【问题标题】:Custom 401 page not prompting for credentials on nginx自定义 401 页面不提示在 nginx 上输入凭据
【发布时间】:2013-01-24 12:07:58
【问题描述】:

我的网站的一部分受到auth_basic 的保护:

    location / {
            auth_basic "Authorization Required";
            auth_basic_user_file .htpasswd;
            index  app.php;
            try_files $uri @rewriteapp;
    }

对于未经授权的用户(点击“取消”的用户),我想显示一个自定义错误页面。以下是我的做法:

    error_page 401 = @error401;

    location @error401 {
                    rewrite ^ /error/401.html redirect;
    }

    location /error {
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public";
            index  app.php;
            try_files $uri @rewriteapp;
    }

我必须创建 @error401 别名,以便指定“重定向”,因为如果我使用内部重定向,我的应用程序将处理原始请求(并允许访问实际请求的页面!)

所以这工作正常,页面显示。 问题是现在 nginx 甚至不向用户询问那里的凭据。

有没有办法解决这个问题?或者有什么更好的方法来处理这个问题?

【问题讨论】:

    标签: nginx basic-authentication http-status-code-401


    【解决方案1】:

    这就是我能够完成你想要做的事情的方式:

    ## Path must be prefixed with a /, i.e. /401.html, NOT 401.html
    error_page 401 /401.html;
    
    location ~ (401.html)$ {
        alias /usr/share/nginx/html/$1;
    }
    

    【讨论】:

    • 谢谢,您的答案需要进行一些自定义,因为它需要提供 PHP 文件而不是静态文件,但如果可以调整,我会尝试。
    • @Julien 你找到解决重定向问题的方法了吗?错误子句/重定向完全忽略身份验证并首先重写
    【解决方案2】:

    你应该添加auth_basic off;

    【讨论】:

    • 这实际上帮助我显示自定义 401 页面而不是内置的 nginx 401 页面。更好的描述在哪里添加auth_basic off 会更好。我必须将它添加到 location = /40x.html {} 块中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2018-03-04
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2016-04-25
    相关资源
    最近更新 更多