常规位置与命名位置

常规位置与命名位置

我有一个使用 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/;
    }
}

注意末尾的斜线。

相关内容