阻止NGINX提供本地index.html,而不是传递到代理服务器

af7jpaap  于 2023-02-15  发布在  Nginx
关注(0)|答案(1)|浏览(247)

找到了其他类似的问题,但似乎没有一个在我的情况下工作。
我正试图代理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的直接链接。所以我需要禁用或绕过这个“特性”,并将没有指示的页面定向到免责声明页面。
谢谢

gkl3eglg

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__ @proxy;

try_files至少需要两个参数。最后一个参数之前的所有参数都是要测试的文件名。__nonexistent__就是这样一个名称,它可能在您的文件系统中不存在(也有助于记录作者的意图)。

相关问题