当我访问 repo.xxx.com 时,我没有看到 rhodecode 页面,而是得到了 502(错误网关)。
这是 nginx error.log 条目。
2013/03/14 21:48:33 [error] 11207#0: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 11.111.111.11, server: repo.xxx.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "repo.xxx.com"
这是我的 nginx.conf 的相关部分。
upstream rhodecode{
server 0.0.0.0:5000;
}
server {
listen 80 default;
server_name www.xxx.com;
location / {
root /opt/html;
index index.html;
}
}
server {
listen 80;
server_name repo.xxx.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Url-Scheme $scheme;
proxy_set_header X-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Proxy-host $proxy_host;
client_max_body_size 400m;
client_body_buffer_size 128k;
proxy_buffering off;
proxy_connect_timeout 7200;
proxy_send_timeout 7200;
proxy_read_timeout 7200;
proxy_buffers 8 32k;
location / {
try_files $uri @rhodecode;
}
location @rhodecode {
proxy_pass http://rhodecode;
}
}
我还将 rhodecode ini 文件中的主机属性更改为host=0.0.0.0
。这一切都是在由 linode 托管的 ubuntu 12.04 LTS 服务器上完成的(如果这很重要)。
我读过的大部分内容都表明这是一个“权限”问题,端口未正确打开或我的环回接口配置不正确。
这是 的输出iptables -L -n
。
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
答案1
问题在于:
upstream rhodecode{
server 0.0.0.0:5000;
}
您没有为 nginx 指定要连接的有效地址;0.0.0.0
不是有效的目标 IP 地址。
要解决该问题,请指定实际的 IP 地址,例如127.0.0.1
。
答案2
事实证明,我是一个无法遵循教程的庞大工具。
我没有正确设置 rhodecode,我没有运行paster setup-rhodecode production.ini
,其中 production.ini 是 rhodecode 的配置文件。
所以这里的教训是如果你收到连接被拒绝错误,502 显示页面,并且你运行 netstat 但没有看到你正在寻找的端口(在我的情况下是 5000)那么你的应用程序可能正在崩溃,你应该检查你的应用程序的错误日志而不是责怪 ubuntu 的权限方案。