2013-11-03 52 views
34

我使用Nginx作爲代理來過濾到我的應用程序的請求。在「http_geoip_module」的幫助下,我創建了一個國家代碼http-header,並且我想通過「headers-more-nginx-module」將它作爲請求標頭傳遞。這是Nginx的配置位置的塊:來自nginx代理服務器的轉發請求標頭

location/{ 
    proxy_pass      http://mysite.com; 
    proxy_set_header    Host http://mysite.com;; 
    proxy_pass_request_headers  on; 
    more_set_headers 'HTTP_Country-Code: $geoip_country_code'; 
} 

但這僅設置在響應中的報頭。我嘗試使用「more_set_input_headers」而不是「more_set_headers」,但是頭部甚至沒有傳遞給響應。

我在這裏錯過了什麼?

+0

Hey Pelig。當有些人爲你提供有用的迴應時,它習慣於給予回覆。如果你在搜索答案時發現你在這裏登陸,它也適合提出一個問題。這是因爲該網站基於聲譽。我提高了你的問題和leshgrinder答案,因爲我正在尋找相同的答案。 – jww

回答

62

如果要將變量傳遞給代理後端,必須使用代理模塊進行設置。

location/{ 
    proxy_pass      http://example.com; 
    proxy_set_header    Host example.com; 
    proxy_set_header    HTTP_Country-Code $geoip_country_code; 
    proxy_pass_request_headers  on; 
} 

現在它被傳遞給代理後端。

+4

我剛想寫回你的文章,因爲我已經嘗試過了,但它顯然不行。我沒有正確查看請求,但在使用[tcpdump](http://www.tcpdump.org)後,我發現標題一直都被傳遞過來......謝謝! – Peleg

+1

如果在客戶端中設置。我只是想讓這個價值傳下來。我不知道我的nginx設置的價值是什麼,所以我無法重置它。 我想要的是由客戶端創建的任何自定義標頭不改變地通過反向代理服務器。當然有一種方法可以做到這一點。 – 2014-04-23 18:47:44

+15

也確保你在服務器塊中使用'''underscores_in_headers on''',否則nginx不會轉發這些頭文件! ref:http://serverfault.com/a/586997/317502 – kishorer747

相關問題