编辑:
我明白了,请参阅下面的第一个答案
我有一个相当简单的测试配置,用于代理 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 / {
将匹配目录 / (包括所有子文件夹/文件等)