2015-11-06 101 views
0

我有一個燒瓶應用程序使用gunicorn服務,並使用nginx在其上。我想使用基本身份驗證(用戶/密碼)來保護所有以/admin(後臺)開頭的網址,但仍然繼續以沒有密碼的gunicorn服務所有其他網址。避免在nginx中使用代理重複密碼保護URL

這是我目前nginx的配置:

server { 
    listen 80; 
    server_name example.com; 
    charset utf-8; 

    location/{ 
     proxy_pass http://localhost:8000; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

    location /admin { 
     auth_basic "Administrator Login"; 
     auth_basic_user_file /home/app/.htpasswd; 
     # the following four directives are duplicated :(
     proxy_pass http://localhost:8000; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

如果我沒有在第二位置的塊複製proxy_*指令,然後開始/admin中的網址無法獲取轉發到gunicorn,我也得到一個404.

有什麼辦法可以避免配置重複?我試過位置嵌套,但顯然到最後nginx只「執行」一個位置塊。

回答

1

proxy_pass必須在位置塊內。但是,不需要複製proxy_set_header指令,它們可以移動到服務器塊中。所以你的錯誤只是假設proxy_pass可以存在於服務器塊中:-)

+0

這意味着我需要在兩個位置塊中重複的唯一指令是'proxy_pass http:// localhost:8000;',對吧?將'proxy_set_header'移到服務器塊。 – dukebody

+0

這就是我認爲在閱讀文檔的基礎上 – superTyphoon