我有一个使用 Thin 运行的 Rails 应用程序,我希望 Nginx 充当反向代理,将给定位置下的所有请求传递到 Thin 服务器。
从我读过的所有内容(而且已经很多了)来看,最流行的解决方案似乎是拥有以下站点配置文件:
upstream thin {
server 127.0.0.1:3000;
}
server {
...
location /thin {
proxy_pass http://thin;
}
}
但是,就我而言,此设置的问题在于零件/thin
已传递到 Thin。我在其他地方读到过,出于这个原因,最好使用命名位置:
server {
...
location @thin {
proxy_pass http://thin;
}
}
但是,当我使用此配置时,检查后/var/log/nginx/error.log
发现请求没有传递到 Thin 服务器(服务器的 IP 地址为 192.168.1.15,客户端的 IP 地址为 192.168.1.105):
2013/04/11 12:55:58 [error] 17988#0: *1 open() "/var/www/thin" failed (2: No such file or directory), client: 192.168.1.105, server: , request: "GET /thin HTTP/1.1", host: "192.168.1.15"
我做错了什么? 命名位置如何处理以及它们有什么用途?
答案1
命名位置不用于正常处理请求,它们仅用于处理内部重定向的请求(例如,使用 error_page、try_files)。
尝试使用
server {
...
location /thin {
proxy_pass http://thin/;
}
}
注意末尾的斜线。