2013-02-19 100 views
7

我需要根據查詢字符串參數限制對某些文件的訪問。我有一個NGINX代理服務器,它位於其他幾個nginx Web服務器的前面,用於負載平衡。我已決定在代理服務器級別強制執行此查詢字符串參數以合併配置更改。這給我的設置增加了一些複雜性,因爲請求不能被困在if中,因爲它需要向上遊發送。如何在多個位置重新使用NGINX代理設置

server { 
     listen 443; 
     # SSL Settings 

     server_name staging.xxxx.com; 

     location/{ 
       proxy_pass http://webdav-cluster; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header X-Real-IP  $remote_addr; 
       proxy_set_header Host   $http_host; 
     } 

     # Unless the correct application token is passed in as a query parameter 
     # then deny access. 
     location ~ \/protected\/.*txt$ { 
       if ($arg_secret != abc) { 
         return 403; 
       } 

       proxy_pass http://webdav-cluster; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header X-Real-IP  $remote_addr; 
       proxy_set_header Host   $http_host; 
     } 
} 

有沒有辦法將這4個代理行存儲在一個位置或變量,然後內部重定向到一行?我也可以在不同的虛擬主機中使用相同的設置。

+0

OP,那你最終會做什麼?我也很好奇這個。 – Mahn 2013-10-26 18:36:53

回答

2

在這種情況下,你應該使用include指令:http://nginx.org/r/include

+4

從技術上講是正確的,但是如果能夠做到這一點,不用將它分解爲幾個小文件的文件就可以。 – Mahn 2013-10-26 18:37:50

+0

然後使用您最喜歡的模板引擎來生成配置。它也可以是'bash'。 – VBart 2013-10-27 12:23:56