加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

nginx – 使用特定子域进行身份验证

发布时间:2020-12-13 21:22:51 所属栏目:Nginx 来源:网络整理
导读:基本上我正在尝试在访问子域的特定部分(dev.domain.com和pma.domain.com)时启用身份验证模块,他们都必须加载身份验证模块.我似乎无法弄清楚为什么我的nginx配置文件无法正常工作. 在第二个服务器块中,您可以通过身份验证模块查看pma和dev,当我访问pma.domain

基本上我正在尝试在访问子域的特定部分(dev.domain.com和pma.domain.com)时启用身份验证模块,他们都必须加载身份验证模块.我似乎无法弄清楚为什么我的nginx配置文件无法正常工作.

在第二个服务器块中,您可以通过身份验证模块查看pma和dev,当我访问pma.domain.com或dev.domain.com时,我看不到我的浏览器显示的身份验证模块,也没有任何错误日志存储.

无论如何,我只需要一个修复程序来启用它们两个子域的身份验证,而不是整个重写我的nginx配置文件.

server {

    server_name domain.com;

    root            /var/www/domain.com/www;
    index           index.php index.htm index.html;
    error_page      404 /404.html;
    error_page      500 502 503 504  /50x.html;

    access_log      /var/www/domain.com/logs/access.log;
    error_log       /var/www/domain.com/logs/errors.log;

    error_page 404  /index.php;

    location ~ .php$
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/domain.com/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

server {

    server_name ~^(.+).domain.com$;

    set $file_path $1;

    root            /var/www/domain.com/www/$file_path;
    index           index.html index.php;

    access_log      /var/www/domain.com/logs/access.log;
    error_log       /var/www/domain.com/logs/errors.log;

    location /
    {
        try_files $uri /$uri /index.php?$args;
    }

    location ~ pma
    {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
    }

    location ~ dev
    {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
    }

    location ~ .php$
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/domain.com/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

任何人?

最佳答案
但是,您需要将这两个域拆分为单独的服务器块,并为其他服务器块保留通配符替换,或尝试使用下面的解决方法.

1.
“location”指令仅适用于URI,不适用于主机头

2.
如果你尝试做类似的事情

if ($host ~ "(dev|pma).example.com" ) {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
}

然后你会得到一个

error nginx: [emerg] “auth_basic” directive is not allowed here
in…..

因为auth_basic指令是无条件的

解决方法(未经过充分测试):

    if ($host ~ "(dev|pma).example.com" ) {
        return 555;
    }

    error_page 555 = @auth;

    location @auth {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
        try_files $uri /$uri /index.php?$args;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读