我有一个基于nginx的配置,其中域的根应该通向静态页面(启动页面),其他任何东西都应该代理到内部可访问的机器。配置大致如下:
server {
listen 80;
location = / {
root /var/www;
}
location ~ / {
location /robots.txt {
root /var/www;
}
proxy_pass http://127.0.0.1:9091;
proxy_set_header Host $host;
}
}
问题在于,如果第二个代码块存在,则第一个代码块不再被考虑在内。换句话说,nginx开始在9091实例上查找index.html文件,该文件不存在。如果注释了proxy_pass块,则第一部分生效。
就文件而言,情况并非如此。如果我的域的根被调用,Nginx应该在第一个块之后停止搜索,因为它是显式的。但事实并非如此。
这里应该做什么?我不想将启动页面代码与其余部分合并。
答案 0 :(得分:1)
你的配置看起来很奇怪,但没有迹象表明它不应该像你想要的那样工作。
也许你可以试试这样的东西?另外,请提供您的完整配置(也许您的简要示例缺少我们应该了解的重要内容)。
server {
listen 80;
root /var/www;
location = / {
}
location = /index.html {
}
location = /robots.txt {
}
location / {
proxy_pass http://127.0.0.1:9091;
proxy_set_header Host $host;
}
}
答案 1 :(得分:0)
试试这个:
将splash.html
替换为您的启动页面文件名。
# Set root directory for requests
root /var/www;
# Rewrite / to /splash.html
rewrite ^/$ /splash.html break;
location = /splash.html { }
location = /robots.txt { }
location ~* / {
proxy_pass http://127.0.0.1:9091;
proxy_set_header Host $host;
}
答案 2 :(得分:0)
我猜你在某个地方有index
指令,这就是index的工作方式。
应该注意的是,使用索引文件会导致内部重定向,并且可以在不同的位置处理请求。
您的第一次location
次匹配,但随后index
模块会导致内部重定向到/index.html
,请求会在第二个location
阻止中结束。
我会写这样的东西:
server {
listen 80;
root /var/www;
location = /index.html {
}
location = /robots.txt {
}
location / {
proxy_pass http://127.0.0.1:9091;
proxy_set_header Host $host;
}
}