nginx location 配置问题

2016-02-04 14:32:12 +08:00
 hayao650
我现在想配置 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.com/xxx的时候,nginx找到第二个location,
但是这样配置的话,首页无法访问
3721 次点击
所在节点    NGINX
7 条回复
lecher
2016-02-04 15:27:18 +08:00
location / {
if (!-e $request_filename) {
proxy_pass http://xx.xx.xx.xx:20002;
}
index index.html index.htm;
}

if 的判断是,如果指定路径不存在文件,则执行判断内的语句,将请求转发给代理端口。
hayao650
2016-02-04 15:30:44 +08:00
@lecher 非常感谢,用了你的方法成功了,但是我还是不能理解,我的写法为什么不成功
seki
2016-02-04 15:33:18 +08:00
lution
2016-02-04 15:41:24 +08:00
用 try_files 试试

rewrite ^/$ /index.html redirect;

location / {
root /www/main;
try_files $uri @python_proxy;
}

location @python_proxy {
proxy_pass http://127.0.0.1:20002;
}
lecher
2016-02-04 15:50:42 +08:00
@hayao650 因为你的正则没有指定起始和结束符,所以,实际上你写的两个正则匹配的结果是一样的。 Nginx 中要指定仅匹配 / 的正则写法是: ^/$强制限定只匹配 /。

我这个写法是不太好维护的。不如看看 seki 给的连接,试试 try_files 的语法,这个可以方便你指派多个规则跳转到同一个代理端口。维护起来更省事一些。
hayao650
2016-02-04 15:59:32 +08:00
OK ,谢谢各位了,学习了
xujif
2016-02-04 16:18:39 +08:00
~才用正则,=应该是直接匹配的,再把,=/index.html 加上尝试下?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX