如何在运行Nginx的服务器上同时托管.onion站点与常规站点?
问题:Tor隐藏服务无法通过Nginx正常访问
在Ubuntu 22.04系统上运行Nginx服务器,已托管多个.com站点;同时安装运行Tor,.onion地址已在/var/lib/tor/hidden/hostname生成,但Tor浏览器访问该地址无法加载页面。
现有配置如下:
Tor配置(/etc/tor/torrc)
HiddenServiceDir /var/lib/tor/hidden/ HiddenServicePort 80 unix:/var/run/tor-hidden-service.sock #HiddenServicePort 80 127.0.0.1:80 #tried #HiddenServicePort 443 127.0.0.1:443 #tried
Nginx配置(/etc/nginx/sites-available/torsite)
server { listen unix:/var/run/tor-hidden-service.sock; #listen 127.0.0.1:80; #tried #listen 80; #tried #listen [::]:80; #tried server_name mylongoniondaddress.onion; error_log /var/www/tor.log; root /var/www/tor; #此处存在可访问的index.html文件 index index.html index.php; }
尝试过多种配置组合,均未成功,部分组合导致Nginx或Tor无法重启;且tor.log日志为空,需排查思路。
排查解决思路
权限检查(Unix套接字核心问题)
Tor默认以debian-tor用户运行,Nginx以www-data用户运行,Unix套接字/var/run/tor-hidden-service.sock需要让两者都有权限访问:- 在
torrc中添加配置,确保套接字权限正确:HiddenServiceUnixSocketGroup www-data HiddenServiceUnixSocketMode 0660 - 重启Tor服务:
systemctl restart tor@default - 验证套接字权限:
ls -l /var/run/tor-hidden-service.sock,应显示属组为debian-tor:www-data,权限为rw-rw----
- 在
Nginx配置有效性验证
- 测试配置语法:
nginx -t,若报错,根据提示修正配置 - 确保配置已启用:将
torsite软链接到sites-enabled目录:ln -s /etc/nginx/sites-available/torsite /etc/nginx/sites-enabled/ - 重启Nginx:
systemctl restart nginx
- 测试配置语法:
服务状态与日志排查
- 查看Tor服务实时日志,排查启动或转发错误:
journalctl -u tor@default -f - 检查Nginx主错误日志(可能包含
torsite的错误信息):tail -f /var/log/nginx/error.log - 修复
/var/www/tor.log的权限,确保Nginx可写入:chown www-data:www-data /var/www/tor.log
- 查看Tor服务实时日志,排查启动或转发错误:
本地连通性测试
跳过Tor网络,直接测试Nginx的响应:curl --unix-socket /var/run/tor-hidden-service.sock http://mylongoniondaddress.onion- 若能返回
index.html内容,说明Nginx配置正常,问题出在Tor转发; - 若返回错误,说明Nginx配置或权限有问题,针对性修正。
- 若能返回
简化配置排查(排除Unix套接字干扰)
暂时改用TCP端口替代Unix套接字,验证核心链路是否正常:- 修改
torrc:HiddenServicePort 80 127.0.0.1:8080 - 修改Nginx的
torsite配置:listen 127.0.0.1:8080; - 重启Tor和Nginx,用Tor浏览器访问.onion地址,若能正常加载,再换回Unix套接字排查权限问题。
- 修改
内容的提问来源于stack exchange,提问作者Johnny Bravo
相关产品推荐
相关产品推荐

