Nginx 作為反向代理時(shí)設(shè)置的請(qǐng)求頭
這三個(gè)參數(shù)是 Nginx 作為反向代理時(shí)設(shè)置的請(qǐng)求頭,目的是把真實(shí)的客戶端信息傳遞給后端應(yīng)用(Tomcat、Spring Boot、Node.js 等)。
location /api {
proxy_pass http://172.28.3.106:8094;
proxy_redirect http:// https://;
proxy_set_header Host $host:$server_port;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
proxy_set_header Host $host:$server_port;
- 含義:把客戶端請(qǐng)求時(shí)的 Host 頭信息 傳給后端。
$host:請(qǐng)求的域名(可能來自Host頭,也可能是請(qǐng)求的 IP)。$server_port:Nginx 接收請(qǐng)求時(shí)監(jiān)聽的端口號(hào)。- 作用:后端應(yīng)用拿到的
Host頭和用戶訪問的保持一致,避免后端誤判。
?? 例子:
用戶訪問
http://example.com:8080/api/user
Nginx 轉(zhuǎn)發(fā)時(shí)會(huì)帶上:
Host: example.com:8080
proxy_set_header X-Real-IP $remote_addr;
- 含義:告訴后端應(yīng)用,真實(shí)客戶端的 IP 地址。
$remote_addr:Nginx 接收到請(qǐng)求時(shí),客戶端的源 IP。- 作用:讓后端知道用戶的真實(shí) IP,而不是只看到 Nginx 的 IP。
?? 例子:
如果用戶 IP 是 203.0.113.5,那么后端會(huì)收到:
X-Real-IP: 203.0.113.5
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
含義:傳遞請(qǐng)求經(jīng)過的 代理鏈路中的客戶端 IP 列表。
$proxy_add_x_forwarded_for:會(huì)在已有的 X-Forwarded-For 頭后面追加 $remote_addr。
作用:
- 如果請(qǐng)求直接來自客戶端 → 就是客戶端 IP。
- 如果請(qǐng)求經(jīng)過多個(gè)代理 → 會(huì)形成一個(gè) IP 列表,最后一個(gè)就是最近的客戶端。
?? 例子:
用戶 203.0.113.5 → 代理1(Nginx1) → 代理2(Nginx2) → 后端。
后端收到的頭可能是:
X-Forwarded-For: 203.0.113.5, 10.0.0.1, 10.0.0.2
(第一個(gè) IP 永遠(yuǎn)是真實(shí)用戶的公網(wǎng) IP)
總結(jié)
| Header 配置 | 作用 | 典型用途 |
|---|---|---|
| Host $host:$server_port | 保留客戶端訪問的域名和端口 | 后端根據(jù)域名/端口 做路由或多租戶 |
| X-Real-IP $remote_addr | 傳遞客戶端真實(shí) IP | 后端日志、風(fēng)控、限流 |
| X-Forwarded-For $proxy_add_x_forwarded_for | 傳遞完整代理鏈路上的客戶端 IP 列表 | 追蹤用戶來源、防攻擊分析 |
在實(shí)際項(xiàng)目里,Spring Boot 里要拿到 真實(shí)客戶端 IP,通常要優(yōu)先取:
- X-Forwarded-For 的第一個(gè) IP
- 如果沒有,就取 X-Real-IP
- 否則再 fallback 到 request.getRemoteAddr()
到此這篇關(guān)于Nginx 作為反向代理時(shí)設(shè)置的請(qǐng)求頭的文章就介紹到這了,更多相關(guān)Nginx 反向代理設(shè)置的請(qǐng)求頭內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx實(shí)現(xiàn)tomcat動(dòng)靜分離詳解
本篇文章主要介紹了nginx實(shí)現(xiàn)tomcat動(dòng)靜分離詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Nginx/Openresty中啟用http2支持的方法教程
Openresty/Nginx默認(rèn)是不支持http2的,需要將http2模塊編譯進(jìn)應(yīng)用中。這篇文章主要給大家介紹了關(guān)于在Nginx/Openresty中啟用http2支持的方法教程,文中介紹的非常詳細(xì),對(duì)大家具有一的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07
Nginx反向代理后無(wú)法獲取客戶端真實(shí)IP地址
本文主要介紹了Nginx反向代理后無(wú)法獲取客戶端真實(shí)IP地址,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Nginx實(shí)現(xiàn)高可用集群構(gòu)建(Keepalived+Haproxy+Nginx)
為什么需要搭建Nginx集群?為了防止Nginx單點(diǎn)故障造成服務(wù)器癱瘓,本文介紹了Nginx實(shí)現(xiàn)高可用集群構(gòu)建(Keepalived+Haproxy+Nginx),感興趣的可以了解一下2021-05-05

