Autenticação com subdomínios específicos

4

Basicamente, estou tentando ativar o módulo de autenticação ao acessar uma parte específica de um subdomínio, que são dev.domain.com e pma.domain.com , ambos devem ter o módulo de autenticação carregado. Eu não consigo entender por que meu arquivo de configuração nginx não está funcionando.

No segundo bloco de servidor, você pode ver o pma e dev com o módulo de autenticação, quando acesso a pma.domain.com ou dev.domain.com , não vejo o módulo de autenticação exibido no meu navegador nem qualquer registro de erro armazenado.

De qualquer forma, eu só preciso de uma correção para habilitar a autenticação neles dois subdomínios, não uma reescrita completa do meu arquivo de configuração 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;
    }
}

Alguém?

    
por MacMac 17.12.2011 / 22:00

2 respostas

6

No entanto, você precisa dividir esses dois domínios em blocos de servidores separados e deixar a substituição de caracteres curinga para os outros ou tentar usar a solução alternativa abaixo.

1. A diretiva "location" funciona somente com o URI, não com o cabeçalho do host

2. E se você tentar fazer algo como

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

então você vai ter um

error nginx: [emerg] "auth_basic" directive is not allowed here in.....

porque a diretiva auth_basic é incondicional

solução alternativa ( não bem testada ):

    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;
    }
    
por 20.12.2011 / 01:45
5

Uma solução mais simples é usar map

map $http_host $auth_type {
    default "off";
    example.domain.tld "Restricted";
}

server {
    auth_basic $auth_type;
}

Ou

A partir de nginx 1.5.4+ , o módulo de autenticação:

link

    
por 07.03.2016 / 01:04