Nginx 配置用于 Tor 上的 Discourse 论坛

大家好,

我想将 Discourse 配置为通过 nginx 运行的 Tor 隐藏服务。以下是我目前在 nginx 中尝试的配置(但无法工作,提示“找不到服务器”):

server {
    listen unix:/var/run/nginx-onion.sock;
    server_name prostadqmwc6no3n.onion;
    location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

在我的 tor.conf 文件中,我有如下配置:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 unix:/var/run/nginx-onion.sock

在 /var/lib/tor/hidden_service 目录下,我拥有主机名和私钥文件。Tor 正在运行。

Discourse 已在明网(clearweb)上安装并正常运行,且 /var/discourse/shared/standalone/nginx.http.sock 文件存在。

如果需要,我很乐意付费请人花大约一小时帮助我解决此问题(我相信不会超过这个时间,因为可能只是我犯了个低级错误)。

你看过 Template for serving through an .onion address with Docker 吗?

是的,但说实话,我完全搞不懂,而且对于我需要的功能来说,这似乎过于复杂了。我只需要一个能正常运行的 nginx 配置。

你找到解决方案了吗?

另外,你是如何在 Tor 网络上为 .onion 地址部署 Discourse 论坛的?(我希望论坛仅能通过 Tor 访问)

是的,这是正常工作的配置。问题其实很简单:最初我尝试使用 socket 来托管网站,但这行不通,所以我不得不改用端口。

server {
    listen 801;
    server_name 127.0.0.1;
   location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

感谢您的快速回复!

还有一个问题:您的服务器配置是什么(针对多少用户规模)?您是否针对 Tor 网络的性能做过任何优化?

提前感谢!

这是一台 2GB 的 Digital Ocean 虚拟机,有 105 名用户。我们未进行任何修改(除安装了一个插件,以便同时通过 Tor 和清网提供服务)。

还有一个问题,用户图片(如背景卡片、个人资料横幅等)加载时间过长是否有问题?(我猜这是因为 Tor 的原因)。不过一旦缓存后,显示就正常了。

我不太确定 Tor 用户地址是如何工作的。但对我来说,所有登录用户的 IP 都显示为 127.0.0.1,这符合我的预期,因为我在 nginx 中设置了 x-forwarded-for 头。

我不确定 Tor 用户是否在 Tor 网络本身拥有类似 IP 的标识,以及如何将其显示出来。

可能需要使用 set_real_ip_from