在服务器里面安装一下 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;
}