技术解析

nginx location 配置问题
0
2021-05-25 14:44:45
idczone
我现在想配置 nginx 实现以下需求:
1 、主页通过 nginx 直接访问一个静态页面,静态页面目录是:/www/main/index.html
2 、其他服务接口通过 nginx 代理,转发给后端的 python 服务,端口是 20002

我现在的想法是通过两个 location 配置实现,但是在折腾了半天,也没有折腾出来,求各位前辈、高手给指点指点

append:
location = / {
root /www/main;
index index.html;
}
location / {
proxy_pass http://xx.xx.xx.xx:20002;
}
我现在这种写法一直不能实现,我对这种写法的理解是,当我访问首页www.xxx.com的时候,nginx通过精确匹配,找到第一个location,
当我访问www.xxx.co美国服务器m/xxx的时候,nginx找到第二个location,
但是这样配置的话,首页无法访问
location / {
if (!-e $request_filename) {
proxy_pass http://xx.xx.xx.xx:20002;
}
index index.html index.htm;
}
if 的判断是,如果指定路径不存在文件,则执行判断内的语句,将请求转发给代理端口。

非常感谢,用了你的方法成功了,但是我还是不能理解,我的写法为什么不成功

https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

用 try_files 试试
rewrite ^/$ /index.html redirect;

location / {
root /www/main;
try_files $uri {
proxy_pass http://127.0.0.1:20002;
}

因为你的正则没有指定起始和结束符,所以,实际上你写的两个正则匹配的结果是一样的。 Nginx 中要指定仅匹配 / 的正则写法是: ^/$强制限定只匹配 /。
我这个写法是不太好维护的。不如看看 seki 给的连接,试试 try_files 的语法,这个可以方便你指派多个规则跳转到同一个代理端口。维护起来更省事一些。

OK ,谢谢各位了,学习了

~才用正则,=应该是直接匹配的,再把,=/index.html 加上尝试下?

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服