Nginx分别匹配根路径和所有其他路径的位置

时间:2015-08-20 20:18:24

标签: nginx url-rewriting reverse-proxy

我在nginx服务器后面运行Play框架服务器。在根路径,我正在服务静态网站,所有其他路径应重定向到Play服务器。我在default.conf中有以下/etc/nginx/conf.d文件(系统是RHEL 6.7)

# to match the root path only to serve static website
location = / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        # try_files $uri $uri.html $uri/ /index.html;
}

# to match the cms login page
location /cms/ {
        proxy_pass http://localhost:9000/;
}

# to match all the requests from the cms
location / {
        proxy_pass http://localhost:9000/;
}

但是,此配置与根路径请求不匹配。它给出了404错误。但是,如果我删除第三个位置规则,那么它将在根路径上提供静态页面。

另外,我注意到第一次尝试这个时,它起作用了。但现在,它已不再适用了。请帮忙。

1 个答案:

答案 0 :(得分:1)

您获得的结果很可能是由于第2和第3个位置块未设置“索引”指令。除了很好理解的特定原因(例如覆盖默认索引文件类型)之外,“索引”应始终至少在服务器上下文中设置,或者最好在http上下文中设置。同样,应在服务器上下文中设置“root”指令。

使用您的配置,当请求到达第三个位置块时,没有关于如何处理它的信息。实际上,你所描述的内容不应该是第二块。

此外,当您代理似乎是另一个Web服务器时,您需要确保它具有相当于“index”和“root”的设置。

不确定您使用的后端是如何工作的。如果在那里不可配置,那么你必须确保每一个命中它的请求都有完全拼写的URI。

首先,根据服务器上设置的具体内容,我将“index”和“root”指令移至“服务器”级别