运行多个80 端口访问的网站,包括 Discourse

在服务器里面安装一下 NGINX,然后配置一个代理,这样就可以在同一台服务器上运行多个在 80 端口访问的网站,包括 Discourse。
在 NGINX 的配置文件,我们还可以配置一下 SSL 证书。

下面是我为 Discourse 准备的 NGINX 配置(/etc/nginx/conf.d/ssl.talk.ninghao.net.conf)

upstream discourse {
  server 127.0.0.1:8080;
}
server {
  listen       443;
  server_name  talk.ninghao.net;
  ssl          on;
  index index.html; 

  ssl_certificate   /etc/nginx/ssl/talk.ninghao.net/213977054090706.pem;
  ssl_certificate_key  /etc/nginx/ssl/talk.ninghao.net/213977054090706.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
  ssl_prefer_server_ciphers on;

  location / {
    proxy_set_header  X-Forwarded-Host $host;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    expires off;    
    sendfile off;
    proxy_pass http://discourse;
  }
}

我先把 Discourse 的端口设置成了 8080,可以配置 app.yml,像这样:

expose:
  - "8080:80"

8080 是服务器上的端口,后面的 80 是 Discourse 容器里的端口,在它的容器里也有一个 NGINX。修改以后,你又需要重新编译 Discourse。

让 HTTP 重定向到 HTTPS ,可以再准备一个 NGINX 配置(/etc/nginx/conf.d/talk.ninghao.net.conf)

server {
  listen      80; 
  server_name   talk.ninghao.net;
  return 301    https://$host$request_uri;
}