找到了其他类似的问题,但似乎没有一个在我的情况下工作。
我正试图代理NGINX到IIS服务器,这是托管存档网站的全部。该网站是编码与一些硬index.html链接,我不想进去,并修改网站在所有。
任何时候直接在URL中使用/index. html调用该站点时,NGINX似乎不是代理该位置,而是提供一个本地index.html页面。
此外,我试图默认而不是index.html页面时,没有进入任何页面(即域只),而不是传递到一个default.htm页面(设置为默认在IIS中),其中提供了一个免责声明页面,将需要阅读,然后才能继续到原来的index.html的网站。
这是我的网站的nginx配置文件。我不想改变我的整体结构,因为它是什么多个网站使用。我需要一个解决方案,我可以添加。
upstream my_backend {
server 10.10.10.102:1011;
include snippets/shared_upstream_settings.conf;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name server.mydomain.com;
include snippets/shared_server_proxy_settings.conf;
location @proxy {
proxy_pass http://my_backend;
}
location / {
satisfy any;
allow 10.16.0.0/24;
deny all;
auth_basic "Authorized Users Only";
auth_basic_user_file secure/.htpasswd;
auth_request /auth-1;
try_files $uri @proxy;
}
(我不认为任何一个包含应该对这个特定的问题有影响)
这个配置适用于我拥有的其他15个站点,但是没有一个有硬编码的index.html。直到今天我才意识到NGINX不会代理到index.html的直接链接。所以我需要禁用或绕过这个“特性”,并将没有指示的页面定向到免责声明页面。
谢谢
1条答案
按热度按时间gkl3eglg1#
try_files
语句中的$uri
参数指示Nginx在分支到@proxy
块之前测试文件是否存在。存在满足该测试的本地index.html
文件。您有两种选择:
将
try_files $uri @proxy;
行替换为proxy_pass http://my_backend;
,因为不需要单独的location @proxy
块。或者:
如果要保留第二个location块,请将
try_files
语句更改为:try_files
至少需要两个参数。最后一个参数之前的所有参数都是要测试的文件名。__nonexistent__
就是这样一个名称,它可能在您的文件系统中不存在(也有助于记录作者的意图)。