使用特定子域进行身份validation

基本上我试图启用身份validation模块访问子域的特定部分,这是dev.domain.compma.domain.com ,他们都必须加载身份validation模块。 我似乎无法确定为什么我的nginxconfiguration文件不起作用。

在第二个服务器块中,您可以使用身份validation模块查看pmadev ,当访问pma.domain.comdev.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