编辑:

编辑:

编辑:

我明白了,请参阅下面的第一个答案


我有一个相当简单的测试配置,用于代理 Tornado 服务器的 NGINX 服务器:

    server {
        listen       80;
        server_name  _;

        location = / {
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_pass   http://127.0.0.1:8901/;
        }

        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

很简单,当我访问http://myserver.com/一切正常,但如果我访问http://myserver.com/somefile.html它触发 404,错误日志中显示

2011/06/06 18:39:24 [error] 23948#0: *100 open() "/usr/share/nginx/html/somefile.html" failed (2: No such file or directory), client: 1.1.1.1, server: _, request: "GET /somefile.html.html HTTP/1.1", host: "myserver.com"

看起来 NGINX 并没有将 /somefile.html 传递给代理。直接转到http://myserver.com:8901/somefile.html工作正常,如果我创建 /usr/share/nginx/html/somefile.html,NGINX 将显示该文件的内容,而不是代理到正确的服务器。

我不记得我的任何 NGINX 服务器上曾经发生过这种情况,所以我完全糊涂了

如果有用的话,它是 RHEL 5.5 上的 NGINX 0.7.67

答案1

哦#失败

为了教育像我一样愚蠢的人,使用

location = / {

将匹配仅有的/但使用

location / {

将匹配目录 / (包括所有子文件夹/文件等)

相关内容