此配置的目标是:
www.website.com
,www.website.com/?foo=bar
www.website.com/foo
,www.website.com/foo?bar=123
html文件位于/var/www/website.com/index.html
server {
listen 80;
server_name website.com;
return 301 $scheme://www.website.com$request_uri;
}
server {
listen 80;
server_name www.website.com;
access_log off;
location = / {
root /var/www/website.com;
}
location / {
proxy_pass http://127.0.0.1:8000;
}
}
我在Python端看到/index.html
的请求而在那里失败了。如果我删除了location /
,那么我会看到“欢迎使用nginx”页面,显然location = /
无效。我做错了什么?
答案 0 :(得分:2)
NGINX - Serving Static Content
如果请求以斜杠结尾,NGINX会将其视为对目录的请求,并尝试在目录中查找索引文件。 index指令定义索引文件的名称(默认值为index.html)。
检查您是否在当前或任何封闭范围内定义了index
。如果是这样,它会在nginx中创建一个内部重定向,它将匹配Python位置(location /
)。
在你的情况下,我认为至少有两种解决方案:
添加另一个与索引文件明确匹配的位置块:
location = /index.html {
...
}
在根位置使用try_files
:
location = / {
try_files $uri $uri/index.html =404;
}
答案 1 :(得分:1)
您可以使用error_page 404
重定向流量。 "如果在内部重定向期间不需要更改URI和方法,则可以将错误处理传递到命名位置。"
另外,你有语法错误,这就是"欢迎"页面正在显示。
此解决方案在此处注明:http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page
server {
listen 80;
server_name www.website.com;
index index.html;
root /var/www/www.website.com;
error_page 404 = @fallback;
location @fallback {
proxy_pass http://127.0.0.1:8000;
}
}