2012-02-14 18 views
16

¿Cómo puedo habilitar HTTP Basic Auth para todo excepto para un determinado archivo?nginx: auth_basic para todo excepto en una ubicación específica

Aquí está mi configuración del bloque actual del servidor de la ubicación:

location/{ 
     auth_basic "The password, you must enter."; 
     auth_basic_user_file /etc/nginx/htpasswd; 
} 

location /README { 
     auth_basic off; 
} 

Sin embargo, en /README, todavía se pida la contraseña.

¿Cómo podemos solucionar esto?

Gracias! Marcos

Respuesta

33

intenta utilizar el signo =, que le ayuda a:

location = /README { 
     auth_basic off; 
     allow all; # Allow all to see content 
} 
+4

es 'permitir que todos 'realmente necesario? ¿No es eso un comportamiento predeterminado? – Joost

+0

No es necesario. – KittMedia

+0

Downvoted: explique por qué es necesaria una coincidencia completa aquí. – Xaser

7

que estoy haciendo algo similar con "mapa" en lugar de "si" para asignar la variable ámbito y htpasswd auth_basic archivo:

map $http_host $siteenv { 
    default  dev; 

    ~^(?<subdomain>.+)\.dev dev; 
    ~^(?<subdomain>.+)\.devprofile devprofile; 
    ~^(?<subdomain>.+)\.devdebug devdebug; 
    ~^(?<subdomain>.+)\.test test; 
    ~^(?<subdomain>.+)\.demo demo; 
    ~^(?<subdomain>.+)\.stage stage; 

    # Live 
    ~^(?<subdomain>.+)\.live live; 
    ~^.*\.(?P<subdomain>.+)\.[a-zA-Z]* live; 
} 

map $http_host $auth_type { 
    default  "Restricted"; 

    ~^(?<subdomain>.+)\.dev "Development"; 
    ~^(?<subdomain>.+)\.devprofile "Development"; 
    ~^(?<subdomain>.+)\.devdebug "Development"; 
    ~^(?<subdomain>.+)\.test "Testing"; 
    ~^(?<subdomain>.+)\.stage "Stage"; 
    ~^(?<subdomain>.+)\.demo "Demo"; 

    # Live 
    ~^(?<subdomain>.+)\.live "off"; 
    ~^.*\.(?P<subdomain>.+)\.[a-zA-Z]* "off"; 
} 

server { 
    .. etc .. 

    auth_basic   $auth_type; 
    auth_basic_user_file /etc/nginx/conf.d/htpasswd-$siteenv; 
} 
Cuestiones relacionadas