2012-02-14 28 views
16

Làm cách nào tôi có thể bật Xác thực cơ bản HTTP cho mọi thứ ngoại trừ cho một tệp nhất định?nginx: auth_basic cho mọi thứ trừ một vị trí cụ thể

Dưới đây là cấu hình khối máy chủ hiện tại của tôi cho các vị trí:

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

location /README { 
     auth_basic off; 
} 

Tuy nhiên, trên /README, nó vẫn khiến cho một mật khẩu.

Làm cách nào để khắc phục sự cố này?

Cảm ơn! Đánh dấu

Trả lời

33

Cố gắng sử dụng dấu =, giúp bạn:

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

là 'cho phép tất cả 'thực sự cần thiết? Đó không phải là hành vi mặc định? – Joost

+0

Không cần thiết. – KittMedia

+0

Được giảm giá - giải thích lý do tại sao cần phải có một trận đấu đầy đủ ở đây. – Xaser

7

Tôi đang làm một cái gì đó tương tự như sử dụng "bản đồ" thay vì "nếu" để gán auth_basic biến vương quốc và htpasswd file:

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; 
} 
Các vấn đề liên quan