Nginx中的proxy_set_header核心參數(shù)解析
1. proxy_set_header的基本語法
proxy_set_header <HeaderName> <HeaderValue>;
• HeaderName:需設(shè)置的請(qǐng)求頭名稱(如 Host、X-Real-IP)。
• HeaderValue:請(qǐng)求頭的值,可以是靜態(tài)字符串、Nginx 內(nèi)置變量(如 $host、$remote_addr)或兩者的組合
2. 核心參數(shù)解析
2.1 設(shè)置Host 頭
- 作用:指定后端服務(wù)器的主機(jī)名。確保后端服務(wù)器接收到的
Host頭與客戶端請(qǐng)求一致,避免因Host不匹配導(dǎo)致的 400/404 錯(cuò)誤。若未設(shè)置,默認(rèn)傳遞代理服務(wù)器的主機(jī)名。 - 配置示例:
proxy_set_header Host $host; # 傳遞客戶端請(qǐng)求的原始 Host proxy_set_header Host $http_host; # 優(yōu)先使用請(qǐng)求頭中的 Host(若存在) proxy_set_header Host backend.example.com; # 強(qiáng)制指定固定值
- 場(chǎng)景:當(dāng)后端應(yīng)用依賴 Host 頭進(jìn)行路由或生成絕對(duì) URL 時(shí)需配置。
- 示例對(duì)比:
1)未設(shè)置 proxy_set_header Host
GET / HTTP/1.1 Host: backend.example.com # 默認(rèn)由 proxy_pass 決定
2)設(shè)置 proxy_set_header Host $host:
GET / HTTP/1.1 Host: nginx.example.com # 與客戶端請(qǐng)求的 Host 一致
2.2 客戶端真實(shí) IP 傳遞
2.2.1 X-Real-IP??
proxy_set_header X-Real-IP $remote_addr;
作用??:將客戶端真實(shí) IP 寫入 X-Real-IP 頭,供后端服務(wù)器讀取。
2.2.2 X-Forwarded-For??
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
作用??:在原有 X-Forwarded-For 頭的基礎(chǔ)上追加客戶端 IP(支持多級(jí)代理)
2.3 協(xié)議與安全頭
2.3.1 X-Forwarded-Proto??
proxy_set_header X-Forwarded-Proto $scheme;
- ??作用??:傳遞原始請(qǐng)求協(xié)議(HTTP/HTTPS),用于后端生成正確鏈接。
2.3.2 安全頭??
proxy_set_header X-Frame-Options "SAMEORIGIN"; # 防點(diǎn)擊劫持 proxy_set_header X-XSS-Protection "1; mode=block"; # 防 XSS 攻擊
2.4禁用或修改特定請(qǐng)求頭
2.4.1 禁用請(qǐng)求頭:將值設(shè)為空字符串
proxy_set_header User-Agent ""; # 禁用 User-Agent 頭
2.4.2 修改請(qǐng)求頭:設(shè)置新的值
proxy_set_header Authorization "Bearer <token>"; # 修改授權(quán)頭
2.5 支持 CORS(跨域資源共享)
proxy_set_header Origin $http_origin; # 直接傳遞客戶端Origin值?
??作用??:保留客戶端原始 Origin 頭(適用于動(dòng)態(tài)域名場(chǎng)景)
??2.6 連接控制?
proxy_set_header Connection "";
2.6.1 支持 HTTP/1.1 持久連接
問題:默認(rèn)情況下,Nginx 的 Connection: close 會(huì)強(qiáng)制關(guān)閉與后端的連接,導(dǎo)致每次請(qǐng)求都需要重新建立 TCP 連接,增加延遲。
解決方案:如果后端服務(wù)器支持 HTTP/1.1 的持久連接(Keep-Alive),可以通過以下配置啟用:
proxy_set_header Connection ""; proxy_http_version 1.1;
2.6.2 避免 Connection 頭沖突
問題:如果客戶端請(qǐng)求中包含 Connection: keep-alive,而 Nginx 默認(rèn)覆蓋為 Connection: close,可能導(dǎo)致后端服務(wù)器行為異常。
解決方案:通過清空 Connection 頭,保留客戶端原始意圖:
proxy_set_header Connection "";
2.6.3 WebSocket 協(xié)議升級(jí)
WebSocket 特殊需求:WebSocket 需要協(xié)議升級(jí)(Upgrade: websocket),此時(shí)必須設(shè)置 Connection: upgrade:
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
- 注意:此時(shí)不能清空
Connection頭,否則握手失敗。
2.7自定義頭傳遞?
proxy_set_header X-Custom-Header "DynamicValue";
- ????作用:傳遞業(yè)務(wù)標(biāo)識(shí)、灰度發(fā)布標(biāo)記等自定義信。
2.8緩存控制?
proxy_set_header Cache-Control "no-cache, no-store";
- ??作用??:強(qiáng)制后端禁用緩存,適用于動(dòng)態(tài)內(nèi)容。
2.9 請(qǐng)求頭刪除
proxy_set_header Accept-Encoding ""; # 禁用后端壓縮
- 優(yōu)點(diǎn):
避免后端服務(wù)器進(jìn)行壓縮處理,減少 CPU 開銷。 - 缺點(diǎn):
響應(yīng)內(nèi)容未壓縮,可能導(dǎo)致傳輸數(shù)據(jù)量增加,影響網(wǎng)絡(luò)性能(尤其對(duì)大文件或高并發(fā)場(chǎng)景)。
3 注意事項(xiàng)
3.1 下劃線
若自定義頭含下劃線(如 X-My_Header),需在配置中開啟:
underscores_in_headers on;
??????3.2指令位置
proxy_set_header 必須放在 location 或 server 塊中,否則無效。
3.3 空值處理
- 設(shè)置
proxy_set_header field "";會(huì)從請(qǐng)求中移除該頭。 - 若值包含變量且變量為空,頭字段會(huì)被移除,這樣就能阻止它們被傳遞。
下面是一個(gè)完整的配置示例,它會(huì)禁用所有默認(rèn)頭,僅傳遞必要的客戶端信息:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
# 禁用默認(rèn)傳遞的頭
proxy_set_header Host "";
proxy_set_header Connection "";
proxy_set_header User-Agent "";
proxy_set_header Accept "";
proxy_set_header Accept-Encoding "";
# 僅傳遞必要的頭
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 若需要授權(quán)頭
proxy_set_header Authorization $http_authorization;
}
}到此這篇關(guān)于Nginx之proxy_set_header核心參數(shù)解析的文章就介紹到這了,更多相關(guān)nginx proxy_set_header參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx指令add_header和proxy_set_header的區(qū)別及說明
- nginx中的proxy_set_header參數(shù)指令詳解
- nginx中proxy_set_header參數(shù)的實(shí)現(xiàn)
- nginx proxy_set_header的具體實(shí)現(xiàn)
- Nginx中add_header和proxy_set_header的區(qū)別及說明
- Nginx proxy_set_header配置方式
- nginx proxy_set_header設(shè)置自定義header的實(shí)現(xiàn)步驟
- Nginx proxy_set_header參數(shù)設(shè)置
相關(guān)文章
nginx配置ssl實(shí)現(xiàn)https訪問(小白文)
安全起見,需要將之前的http接口訪問變成https訪問,所以需要配置SSL證書,本文主要介紹了nginx配置ssl實(shí)現(xiàn)https訪問,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
Nginx在Windows下的安裝及環(huán)境配置(將nginx作為服務(wù)運(yùn)行)
這篇文章主要介紹了Nginx在Windows下的安裝及環(huán)境配置,主要是將nginx作為服務(wù)運(yùn)行,需要的朋友可以參考下2018-11-11
windows下nginx的安裝使用及解決80端口被占用nginx不能啟動(dòng)的問題
這篇文章主要給大家介紹了關(guān)于windows下nginx的安裝使用,以及如何解決80端口被占用導(dǎo)致nginx不能啟動(dòng)的問題,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-04-04
Nginx作為反向代理時(shí)傳遞客戶端IP的設(shè)置方法
因?yàn)閚ginx的優(yōu)越性,現(xiàn)在越來越多的用戶在生產(chǎn)環(huán)境中使用nginx作為前端,不管nginx在前端是做負(fù)載均衡還是只做簡(jiǎn)單的反向代理,都需要把日志轉(zhuǎn)發(fā)到后端real server,以方便我們檢查程序的各種故障2014-08-08
Nginx Lua 緩存配置的實(shí)現(xiàn)步驟
在Web應(yīng)用緩存層次中,Nginx Lua緩存因其高效的協(xié)程機(jī)制,與Nginx的集成,以及OpenResty的擴(kuò)展性,成為了一種高性能的緩存解決方案,本文就來詳細(xì)介紹,感興趣的可以了解一下2022-05-05
Nginx?502?Bad?Gateway錯(cuò)誤解決詳細(xì)指南與實(shí)例
這篇文章主要介紹了Nginx?502?Bad?Gateway錯(cuò)誤解決的相關(guān)資料,502BadGateway錯(cuò)誤是Web開發(fā)和運(yùn)維中常見的錯(cuò)誤,表示一個(gè)服務(wù)器在充當(dāng)網(wǎng)關(guān)或代理時(shí),從上游服務(wù)器收到了一個(gè)無效的響應(yīng),需要的朋友可以參考下2024-11-11
使用google-perftools優(yōu)化nginx在高并發(fā)時(shí)的性能的教程(完整版)
如果使用googler開發(fā)的google-perftools優(yōu)化Nginx和MySQL的內(nèi)存管理,性能將會(huì)有一定程度的提升。特別是對(duì)高并發(fā)下的服務(wù)器,效果更明顯2013-02-02
使用nginx配置基于域名的虛擬主機(jī)實(shí)現(xiàn)
這篇文章主要介紹了nginx配置基于域名的虛擬主機(jī)實(shí)現(xiàn)​,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

