nginx proxy_redirect https配置后端http302跳轉(zhuǎn)處理方式
nginx proxy_redirect https配置后端http302跳轉(zhuǎn)
# HTTPS server # server { listen 443 ssl; server_name localhost; charset utf8; ssl_certificate full_chain.pem; ssl_certificate_key private.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; proxy_set_header Host $host; 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; proxy_connect_timeout 10; proxy_send_timeout 90; proxy_read_timeout 90; proxy_redirect http://$host/ https://$host:$server_port/; location /mgr/ { proxy_pass http://localhost:8080/mgr/; } }
nginx使用proxy_redirect替換proxy_pass Response 301/302的Location字段
Nginx通過proxy_pass反向代理請求到任意一個(gè)地址,并將Response返回給用戶,多數(shù)情況下這是沒什么問題的,但有一種情況下需要額外處理301/302的Location字段,假設(shè)
- Server: 192.168.1.2: 是內(nèi)網(wǎng)中的一臺服務(wù),在內(nèi)網(wǎng)環(huán)境中大家都直接訪問它
- Nginx: 192.168.1.3: 是一臺外網(wǎng)入口的Nginx服務(wù),訪問外網(wǎng)IP將直接訪問到它,它會反向代理到192.168.1.2
192.168.1.3 nginx.conf
server { listen80; server_name www.iisp.com; location / { proxy_pass http://192.168.1.2; } }
可是通過外網(wǎng)用戶通過域名www.iisp.com通過Nginx代理服務(wù)器反向代理內(nèi)網(wǎng)服務(wù)時(shí)Server在Response 301/302的Location會寫內(nèi)網(wǎng)IP,如:
$ curl -I http://www.iisp.com/ HTTP/1.1 302 Server: nginx/1.16.0 Date: Tue, 26 Nov 2019 08:00:35 GMT Location: http://192.168.1.2/index.html Connection: keep-alive Cache-Control: no-cache
外網(wǎng)用戶被Location到一個(gè)內(nèi)網(wǎng)地址192.168.1.2自然訪問不到,因?yàn)椴皇窃趦?nèi)網(wǎng)環(huán)境。
這個(gè)時(shí)候我們需要配置一下Nginx的反向代理設(shè)置,通過添加一條proxy_redirect指令替換Server響應(yīng)301/302 Location字段,配置如下:
server { listen80; server_name www.iisp.com; location / { proxy_pass http://192.168.1.2; proxy_redirect http://192.168.1.2 http://www.iisp.comwww.iisp.com; } }
保存重啟Nginx服務(wù),此時(shí)再來測試一下,外網(wǎng)測試入口www.iisp.com:
$ curl -I http://www.qttc.net/ HTTP/1.1 302 Server: nginx/1.16.0 Date: Tue, 26 Nov 2019 08:31:45 GMT Location: http://www.qttc.net/index.html Connection: keep-alive Cache-Control: no-cache
從上面的信息可以看到從外網(wǎng)訪問時(shí)Server服務(wù)response的header信息中,已經(jīng)在Nginx反向代理那一段替換了Location字段的協(xié)議、域名和端口部分,這樣的話外網(wǎng)用戶最終得到的302地址是一個(gè)外網(wǎng)地址從而可以跳轉(zhuǎn)網(wǎng)頁
而內(nèi)網(wǎng)用戶因?yàn)橹苯釉L問Server服務(wù),不經(jīng)過Nginx代理,自然也不會受影響,內(nèi)網(wǎng)測試入口192.168.1.2:
$ curl -I http://192.168.1.2/ HTTP/1.1 302 Server: nginx/1.16.0 Date: Tue, 26 Nov 2019 09:10:33 GMT Location: http://192.168.1.2/index.html Connection: keep-alive Cache-Control: no-cache
通過額外部署一個(gè)Nginx并利用proxy_redirect指令配合proxy_pass反向代理解決了內(nèi)外網(wǎng)不同IP/域名訪問服務(wù)的問題。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx安裝時(shí),make編譯可能會出現(xiàn)的錯(cuò)誤問題
這篇文章主要介紹了nginx安裝時(shí),make編譯可能會出現(xiàn)的錯(cuò)誤問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06單臺web服務(wù)器如何盡可能的提高網(wǎng)站性能
一個(gè)網(wǎng)站,對于個(gè)人或小公司來說,前期直接上集群的開銷是比較大的,那么采用單臺服務(wù)器如何才能盡可能的提高網(wǎng)站效率呢?2014-06-06Nginx反向代理及負(fù)載均衡如何實(shí)現(xiàn)(基于linux)
這篇文章主要介紹了Nginx反向代理及負(fù)載均衡如何實(shí)現(xiàn)(基于linux),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn)
本文主要介紹了Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03