我在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错误。但是,如果我删除第三个位置规则,那么它将在根路径上提供静态页面。
另外,我注意到第一次尝试这个时,它起作用了。但现在,它已不再适用了。请帮忙。
答案 0 :(得分:1)
您获得的结果很可能是由于第2和第3个位置块未设置“索引”指令。除了很好理解的特定原因(例如覆盖默认索引文件类型)之外,“索引”应始终至少在服务器上下文中设置,或者最好在http上下文中设置。同样,应在服务器上下文中设置“root”指令。
使用您的配置,当请求到达第三个位置块时,没有关于如何处理它的信息。实际上,你所描述的内容不应该是第二块。
此外,当您代理似乎是另一个Web服务器时,您需要确保它具有相当于“index”和“root”的设置。
不确定您使用的后端是如何工作的。如果在那里不可配置,那么你必须确保每一个命中它的请求都有完全拼写的URI。
首先,根据服务器上设置的具体内容,我将“index”和“root”指令移至“服务器”级别