基本的に、サブドメインの特定の部分(dev.domain.com
とpma.domain.com
)にアクセスするときに認証モジュールを有効にしようとしていますが、どちらにも認証モジュールがロードされている必要があります。 nginx構成ファイルが機能しない理由がわからないようです。
2番目のサーバーブロックでは、認証モジュールでpma
とdev
を確認できますが、pma.domain.com
またはdev.domain.com
にアクセスすると、認証が表示されません私のブラウザからモジュールが表示され、エラーログも保存されません。
とにかく、nginx構成ファイルを完全に書き直すのではなく、2つのサブドメインで認証を有効にするための修正が必要です。
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;
}
}
誰でも?
ただし、この2つのドメインを別々のサーバーブロックに分割し、他のドメインをワイルドカードに置き換えるか、以下の回避策を使用する必要があります。
1.「location」ディレクティブはURIでのみ機能し、Hostヘッダーでは機能しません
2.そしてあなたが次のようなことをしようとすると
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ディレクティブは無条件であるため
回避策(十分にテストされていません):
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;
}
より簡単な解決策は、マップを使用することです
map $http_Host $auth_type {
default "off";
example.domain.tld "Restricted";
}
server {
auth_basic $auth_type;
}
または
nginx 1.5.4+
の時点で、認証モジュール:
http://nginx.org/en/docs/http/ngx_http_auth_request_module.html