当用户身份验证失败时,Nginx 不返回自定义错误页面

问题描述 投票:0回答:1

我正在使用 Nginx 的 HTTP 基本身份验证,当我发送没有凭据的卷曲请求或无法在浏览器上提供凭据时,我会收到默认的 Nginx 401 错误页面,而不是我提供的自定义错误页面。 e40x.html 位于正确的位置,因为当我使用curl 发送 POST 请求时,我得到了自定义响应,因此我们可以忽略所有这些。

Nginx 用作 Docker 容器中运行的另一个应用程序的反向代理,但所有这些也可以忽略,因为它运行良好。请忽略除错误页面处理之外的所有内容。

我的 nginx.conf:

server {
    listen 3000;
    server_name .domain.com;

    # Custom errors redirect
    error_page 400 401 402 403 404 405 /e40x.html;
    error_page 500 501 502 503 504 /e50x.html;
    
    # Basic auth definition
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/conf/.htpasswd;

    # Disable server tokens
    server_tokens off;
    more_set_headers 'Server: My-Value';

    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        limit_except GET {
            deny all;
        }
    }

    location /health {
        auth_basic off;
        proxy_pass http://localhost:3001/health;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        limit_except GET {
            deny all;
        }
    }

    # Custom errors definitions
    location = /e50x.html {
        root /etc/nginx/conf;
        allow all;
        internal;
    }

    location = /e40x.html {
        root /etc/nginx/conf;
        allow all;
        internal;
    }

    # Security headers definition
    add_header Content-Security-Policy "connect-src 'self' *.domain.com; font-src 'self' *.googleapis.com *.gstatic.com; frame-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' *.googleapis.com 'unsafe-inline'; frame-ancestors 'self'; img-src 'self' data: ; manifest-src 'self'; media-src 'self'; object-src 'self'; worker-src 'self';" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
    add_header X-Content-Type-Options "nosniff";
    add_header X-Frame-Options "DENY";
    
}

我尝试以多种方式解决这个问题,但我无法提供片段,因为所有这些尝试都使 nginx 失败,所以我没有保存它们。

首先我认为缩进一定有问题,但我不确定为什么 nginx 不提供我的自定义错误页面而不是默认的错误页面。

为此损失了几个小时后,我认为这与身份验证有关,但我不确定如何处理它。

我还尝试查找默认错误页面以编辑其中的内容,但我找不到它们。

nginx configuration error-code
1个回答
0
投票

我找到了解决办法。最终事情变得非常简单。 这确实是一个身份验证问题。 由于我无法通过身份验证,我收到了默认的 nginx 401 html 页面。

解决方案是将我的自定义错误页面的基本身份验证设置为关闭:

location = /e50x.html {
    auth_basic off;
    root /etc/nginx/conf;
    allow all;
    internal;
}

location = /e40x.html {
    auth_basic off;
    root /etc/nginx/conf;
    allow all;
    internal;
}
© www.soinside.com 2019 - 2024. All rights reserved.