web-dev-qa-db-ja.com

特定のサブドメインによる認証

基本的に、サブドメインの特定の部分(dev.domain.compma.domain.com)にアクセスするときに認証モジュールを有効にしようとしていますが、どちらにも認証モジュールがロードされている必要があります。 nginx構成ファイルが機能しない理由がわからないようです。

2番目のサーバーブロックでは、認証モジュールでpmadevを確認できますが、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;
    }
}

誰でも?

4
MacMac

ただし、この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;
    }
6
ghloogh

より簡単な解決策は、マップを使用することです

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

6
Tom Siwik