1、背景
XXX
2、語(yǔ)法
語(yǔ)法 | proxy_set_header field value; |
默認(rèn)值 | proxy_set_header Host $proxy_host; |
proxy_set_header Connection close; | |
上下文 | http, server, location |
允許重新定義或者添加發(fā)往后端服務(wù)器的請(qǐng)求頭。value可以包含文本、變量或者它們的組合。 當(dāng)且僅當(dāng)當(dāng)前配置級(jí)別中沒(méi)有定義proxy_set_header指令時(shí),會(huì)從上面的級(jí)別繼承配置。 默認(rèn)情況下,只有兩個(gè)請(qǐng)求頭會(huì)被重新定義:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
2.1? nginx是支持讀取非nginx標(biāo)準(zhǔn)的用戶(hù)自定義header的,但是需要在http或者server下開(kāi)啟header的下劃線(xiàn)支持:
underscores_in_headers on;
2.2 舉例
比如我們自定義header為X-Real-IP,通過(guò)第二個(gè)nginx獲取該header時(shí)需要這樣:
$http_x_real_ip; (一律采用小寫(xiě),而且前面多了個(gè)http_)
2.3? 如果需要把自定義header傳遞到下一個(gè)nginx:
如果是在nginx中自定義采用proxy_set_header X_CUSTOM_HEADER $http_host;
如果是在用戶(hù)請(qǐng)求時(shí)自定義的header,
例如curl –head -H “X_CUSTOM_HEADER: foo” http://domain.com/api/test
則需要通過(guò)proxy_pass_header X_CUSTOM_HEADER來(lái)傳遞
2.4? 語(yǔ)法
underscores_in_headers on|off
默認(rèn)值:off
使用字段:http, server
是否允許在header的字段中帶下劃線(xiàn)
3、內(nèi)置變量
核心模塊支持內(nèi)置變量,其名稱(chēng)與Apache中的變量名稱(chēng)相對(duì)應(yīng)。
常用變量如下表格
名稱(chēng) | 說(shuō)明 | demo值 |
---|---|---|
$remote_addr | 客戶(hù)端的ip地址 | |
$http_x_forwarded_for | 相當(dāng)于網(wǎng)絡(luò)訪(fǎng)問(wèn)路徑 | 待驗(yàn)證 |
$remote_user | 客戶(hù)端用戶(hù)名稱(chēng),認(rèn)證用 | |
$remote_port | 客戶(hù)端端口號(hào) | 看似隨機(jī) |
$time_local | 用來(lái)記錄訪(fǎng)問(wèn)時(shí)間與時(shí)區(qū) | |
$request | 用來(lái)記錄請(qǐng)求的url與http協(xié)議 | |
$status | 用來(lái)記錄請(qǐng)求狀態(tài);成功是200 | |
$body_bytes_sent | 記錄發(fā)送給客戶(hù)端文件主體內(nèi)容大小 | |
$http_referer | 用來(lái)記錄從那個(gè)頁(yè)面鏈接訪(fǎng)問(wèn)過(guò)來(lái)的 | |
$http_user_agent | 記錄客戶(hù)端瀏覽器的相關(guān)信息 | |
$host | 請(qǐng)求信息中的"Host",如果請(qǐng)求中沒(méi)有Host行,則等于設(shè)置的服務(wù)器名?? ?ngxin.arg.test |
|
$hostname | 機(jī)器名使用 gethostname系統(tǒng)調(diào)用的值 | |
$server_addr | 服務(wù)器地址,如果沒(méi)有用listen指明服務(wù)器地址, 使用這個(gè)變量將發(fā)起一次系統(tǒng)調(diào)用以取得地址 (造成資源浪費(fèi)) |
127.0.0.1 nginx 所在服務(wù)器IP地址 |
$server_name | 請(qǐng)求到達(dá)的服務(wù)器名 | 監(jiān)聽(tīng) server? 下的server_name : localhost |
$server_port | 請(qǐng)求到達(dá)的服務(wù)器端口號(hào) | 監(jiān)聽(tīng) server 下的 listen 端口 : 80 |
$server_protocol | 請(qǐng)求的協(xié)議版本,“HTTP/1.0"或"HTTP/1.1” | “HTTP/1.0"或 "HTTP/1.1” |
$scheme | 所用的協(xié)議,比如http或者是https | http |
$request_body | 這個(gè)變量(0.7.58+)包含請(qǐng)求的主要信息。 在使用proxy_pass或fastcgi_pass指令的location中比較有意義?? ? |
|
$request_body_file | 客戶(hù)端請(qǐng)求主體信息的臨時(shí)文件名 | |
$request_completion | 如果請(qǐng)求成功,設(shè)為"OK"; 如果請(qǐng)求未完成或者不是一系列請(qǐng)求中最后一部分則設(shè)為空 |
|
$request_filename | 當(dāng)前請(qǐng)求的文件路徑名, 比如/opt/nginx/www/test.php |
|
$request_method | 請(qǐng)求的方法,比如"GET"、"POST"等 | GET |
$request_uri | 請(qǐng)求的URI,帶參數(shù) | 請(qǐng)求的URI, 帶參數(shù)?? ?/a/b/c/?d=test&e=123 &username= %E7%94%A8%E6%88%B7 |
$uri | 請(qǐng)求的URI,可能和最初的值有不同,比如經(jīng)過(guò)重定向之類(lèi)的 | /a/b/c/ |
$http_cookie | cookie 信息 | |
$content_type | 請(qǐng)求信息里的"Content-Type" | |
$content_length | HTTP請(qǐng)求信息里的"Content-Length" | |
$arg_* | *可具體為請(qǐng)求中的某個(gè)參數(shù) | $arg_d=test |
$args | 請(qǐng)求中的參數(shù) | d=test&e=123&u sername=%E7%94% A8%E6%88%B7 |
$binary_remote_addr | 遠(yuǎn)程地址的二進(jìn)制表示 | |
$document_root | 針對(duì)當(dāng)前請(qǐng)求的根路徑設(shè)置值 | |
$document_uri | 與$uri相同 | /a/b/c/ |
$http_via | 最后一個(gè)訪(fǎng)問(wèn)服務(wù)器的Ip地址 | |
$is_args | 如果請(qǐng)求行帶有參數(shù),返回“?”,否則返回空字符串 | |
$limit_rate | 對(duì)連接速率的限制 | |
$nginx_version | 當(dāng)前運(yùn)行的nginx版本號(hào) | |
$pid | worker進(jìn)程的PID | |
$query_string | 與$args相同 | |
$realpath_root | 按root指令或alias指令算出的當(dāng)前請(qǐng)求的絕對(duì)路徑。其中的符號(hào)鏈接都會(huì)解析成真實(shí)文件路徑 |
3、工作原理
XXXX文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-776538.html
4、總結(jié)
? ? ? ?proxy_set_header 就是可設(shè)置請(qǐng)求頭-并將頭信息傳遞到服務(wù)器端。不屬于請(qǐng)求頭的參數(shù)中也需要傳遞時(shí) 重定義下就行啦。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-776538.html
到了這里,關(guān)于nginx proxy_set_header設(shè)置、自定義header的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!