基本上我试图启用身份validation模块访问子域的特定部分,这是dev.domain.com和pma.domain.com ,他们都必须加载身份validation模块。 我似乎无法确定为什么我的nginxconfiguration文件不起作用。
在第二个服务器块中,您可以使用身份validation模块查看pma和dev ,当访问pma.domain.com或dev.domain.com ,我没有看到从浏览器显示的身份validation模块,也没有任何错误日志存储。
无论如何,我只需要一个修复,以启用身份validation两个子域,而不是整个重写我的nginxconfiguration文件。
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; } }
任何人?
但是,您需要将这两个域分割为不同的服务器块,并为其他块留下通配符replace,或尝试使用下面的解决方法。
1.“location”指令只与URI一起工作,而不与主机头一起工作
如果你尝试做类似的事情
if ($host ~ "(dev|pma).example.com" ) { auth_basic "Website development"; auth_basic_user_file /var/www/domain.com/www/dev/authfile; }
那么你会得到一个
错误nginx:[emerg]“auth_basic”指令在这里是不允许的…..
因为auth_basic指令是无条件的
解决方法 ( 没有很好的testing ):
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; }
一种更简单的解决scheme是使用地图
map $http_host $auth_type { default "off"; example.domain.tld "Restricted"; } server { auth_basic $auth_type; }
要么
从nginx 1.5.4+ auth模块开始:
http://nginx.org/en/docs/http/ngx_http_auth_request_module.html