Discourse 反向代理配置问题

已安装 Wikijs(Docker compose)和 Discourse。

Wikijs 一直运行正常,反向代理也正常工作。
开始安装 Discourse 时遇到了一些问题。我研究了一下,发现这可能是因为首次安装 Ubuntu 时 Docker 安装存在一些问题。

因此,我停止了 Wikijs 的 Docker 以进行更新。从 Docker 的仓库重新安装了所有东西。启动 Wikijs 时,我没有看到任何错误。
这次也启动了 Discourse,它完成了整个启动过程。然后我尝试访问这些站点。Nginx 在另一台服务器上,所以我没有动反向代理。你猜怎么着?我无法通过域名或 localip:port 访问它们。

我完全不明白是什么原因,因为它们都显示正在运行,而且 Wikijs 之前是允许我连接的。我差点就成功了。:') Syslog 也没有关于这两个的任何信息。

下面是更多信息。

反向代理:

server {
        listen 80;
        listen [::]:80;

        root /var/www/website.co.uk/html;
        index index.html index.htm index.nginx-debian.html;

        server_name website.co.uk www.website.co.uk;

        location / {
                rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent;
                rewrite ^/(.*)/$ /$1 permanent;
                try_files $uri/index.html $uri.html $uri/ $uri =404;
        }

        location /css {
                alias /var/www/website.co.uk/html/css;
        }

        location /images {
                alias /var/www/website.co.uk/html/media/images;
        }

        location /videos {
                alias /var/www/website.co.uk/html/media/videos;
        }

        location /music {
                alias /var/www/website.co.uk/html/media/music;
        }

        location /fonts {
                alias /var/www/website.co.uk/html/media/fonts;
        }

        location /scripts {
                alias /var/www/website.co.uk/html/scripts;
        }
}

server {
        listen 80;
        server_name wiki.website.co.uk;

        #ssl_certificate           /etc/nginx/cert.crt;
        #ssl_certificate_key       /etc/nginx/cert.key;

        #ssl on;
        #ssl_session_cache  builtin:1000  shared:SSL:10m;
        #ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        #ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        #ssl_prefer_server_ciphers on;

        location / {
                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;

                proxy_pass      http://internalip:port;
                proxy_read_timeout 90;

                proxy_redirect http://127.0.0.1 https://internalip:port;
        }
}
server {
        listen 80;
        server_name forums.website.co.uk;

        #ssl_certificate           /etc/nginx/cert.crt;
        #ssl_certificate_key       /etc/nginx/cert.key;

        #ssl on;
        #ssl_session_cache  builtin:1000  shared:SSL:10m;
        #ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        #ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        #ssl_prefer_server_ciphers on;

        location / {
                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;

                proxy_pass      http://internalip:port2;
                proxy_read_timeout 90;

                proxy_redirect http://127.0.0.1 https://internalip:port2;
        }
}

Tunnel 安装在与 Discourse 和 Wikijs 相同的机器上,但我怀疑那不是问题,因为我已经使用它一段时间了,没有出现过问题。
访问论坛时,我看到“Bad gateway”。而访问 wiki 时,Nginx 返回 504 超时。

如果有人能帮我解决这个问题,将不胜感激。 :slight_smile:
谢谢,Blood。

1 个赞

在 app.yml 中,我是否应该将这些端口更改为:

expose:
  - "80:80"   # http
  - "443:443" # https

更改为类似以下内容:

expose:
  - "8000:80"   # http
  - "8080:443" # https

其中 8000 是我希望它在主 Nginx 机器上查找的端口。
这是我唯一想到的,并且测试后似乎不起作用。(重建了 Discourse 应用)。

1 个赞

请参阅 在运行 Discourse 的同一台机器上运行其他网站
您需要删除 ssl 和 let’s encrypt 模板。您的 nginx 需要处理 ssl,而 discourse 只需要 80 端口供代理连接。

1 个赞

这是否适用于同一个家庭网络,而不是同一台机器,因为它们实际上不在同一台机器上?:slight_smile:

我假设这与我如何修复这个问题有关?
“如果另一台服务器正在使用端口 80 或 443,则不能使用 ./discourse-setup 来设置 Discourse。您需要使用您喜欢的文本编辑器复制并编辑 samples/standalone.yml。”
这是来自提供的指南。因为我正在那台不同的服务器上运行 Nginx。

1 个赞