nginx 代理域名到另外一個域名的實現(xiàn)方法
nginx 代理域名到另外一個域名
server { listen 80; server_name 原域名; location / { #return 301 http://新域名$request_uri; # 重定向到新域名 proxy_pass http://新域名/; proxy_redirect http://原域名/ http://新域名/; } } server { listen 80; server_name 新域名; # websocket代理 #location /webSocket/chat { # proxy_pass http://xxx.xxx.com/webSocket/chat; # proxy_set_header Host $host; # proxy_set_header Upgrade 'websocket'; # proxy_set_header Connection 'Upgrade'; # proxy_connect_timeout 4s; # proxy_read_timeout 7200s; #兩個小時 # proxy_send_timeout 12s; #} location / { proxy_pass http://localhost:8080; root html; index index.html index.htm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
注意:用return
,可以重定向到新域名的頁面,但是請求方法是有問題的
上述代碼跑了幾天后,不起作用了,又更新了其它代碼
server { listen 80; server_name www.old.com; location / { proxy_pass http://www.new.com; proxy_redirect off; } }
上述代碼又修改了一下
server { listen 80; server_name www.old.com; location / { proxy_set_header Host www.new.com; return 307 http://www.new.com$request_uri; # 重定向到新域名 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_redirect http://www.new.com http://www.yyhkjt.com; #rewrite ^(.*)$ http://www.new.com$1 permanent; #rewrite ^(.+)$ $scheme://www.new.com$1 redirect; #return 301 $scheme://www.new.com$request_uri; #proxy_pass http://www.new.com; } }
用postman
請求會將post
請求發(fā)送兩次
,并且第二次會轉為get請求
301:客戶端在收到 301 響應后,會自動將 HTTP 請求轉為 GET 請求,同時將請求地址修改為重定向后的地址
307:對請求類型不做轉換
nginx代理轉發(fā)post請求變get請求方法
以下是常見的 Nginx HTTP 跳轉 HTTPS 的方式及其對請求方法的影響:
301 Moved Permanently:該方式將所有的 HTTP 請求重定向到 HTTPS 上,并且該重定向是永久性的??蛻舳嗽谑盏?301 響應后,會自動將 HTTP 請求轉為 GET 請求,同時將請求地址修改為重定向后的地址。這意味著,如果原始請求是 POST 請求,那么 301 重定向會將其轉變?yōu)?GET 請求。此外,瀏覽器會緩存 301 響應,下一次請求時會直接跳轉到 HTTPS 上。
302 Found / 303 See Other:這兩種方式將所有的 HTTP 請求臨時性地重定向到 HTTPS 上。302 Found 的響應會將請求方法保持不變,同時將請求地址修改為重定向后的地址。而 303 See Other 則會將所有請求方法轉變?yōu)?GET 方法,并將請求地址修改為重定向后的地址。這兩種方式都不會緩存響應,下一次請求時會再次發(fā)起請求。
307 Temporary Redirect:該方式將所有的 HTTP 請求臨時性地重定向到 HTTPS 上,并且會保留原始的請求方法。這意味著,如果原始請求是 POST 請求,那么重定向后的請求仍然是 POST 請求。同時,請求地址也會被修改為重定向后的地址。與 302 Found 類似,307 Temporary Redirect 不會緩存響應,下一次請求時會再次發(fā)起請求。
308 Permanent Redirect:該方式將所有的 HTTP 請求重定向到 HTTPS 上,并且該重定向是永久性的??蛻舳嗽谑盏?308 響應后,會自動將 HTTP 請求轉為與原始請求方法相同的請求方法,同時將請求地址修改為重定向后的地址。與 301 Moved Permanently 不同的是,308 Permanent Redirect 不會允許瀏覽器將 POST 請求重定向到新地址。308 響應也會被緩存,下一次請求時會直接跳轉到 HTTPS 上。
需要注意的是,不同的重定向方式可能會對請求方法、請求地址、緩存等方面產生不同的影響。因此,在選擇重定向方式時,需要根據(jù)具體的需求進行選擇。通常情況下,推薦使用 301 Moved Permanently 或 308 Permanent Redirect 將 HTTP 重定向到 HTTPS 上,并且需要注意 POST 請求的處理方式
解決方法
方法1
可以使用return 307進行轉發(fā),return 307,對請求類型不做轉換,意思就是
get----->get
post----->post
所以通過原樣轉發(fā)可以解決我們post請求會被轉化為get請求問題
具體配置方法
server { listen 80; server_name test.123.com; location /test/api { return 307 http://192.168.1.133:8088/api; proxy_set_header Host $host; } }
這樣的話 當我們post test.123.com/test/api這個地址時請求就不會被轉化為get請求了
方法2使用 return 308方式跳轉
具體配置方法
server { listen 80; server_name example.com; return 308 https://$server_name$request_uri; } server { listen 443 ssl; server_name example.com; # HTTPS 相關配置 ... }
在k8s ingress中配置http強跳https
在ingress注解中加入以下注解
nginx.ingress.kubernetes.io/force-ssl-redirect true
擴展
當我們要根據(jù)請求類型來過濾按照請求類型轉發(fā)到指定的地址時可以用以下方式來實現(xiàn)
upstream test123 { server 192.168.1.133:8888 max_fails=3 fail_timeout=30s; server { listen 80; server_name test.123.com; location /api/bbb { if ($request_method = POST) { return 307 http://192.168.1.133:8088/aaa/bbb; } proxy_pass http://test123; proxy_set_header Host $host; } } }
當我們使用get請求http://test.123.com/api/bbb這個地址時請求不會被轉發(fā)
當我們使用post請求http://test.123.com/api/bbb這個地址時請求會被轉發(fā)到http://192.168.1.133:8088/aaa/bbb這個地址
到此這篇關于nginx 代理域名到另外一個域名的實現(xiàn)方法的文章就介紹到這了,更多相關nginx 代理域名到另外域名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決httpd占用80端口導致Nginx啟動失敗報錯的解決辦法
今天在建自己小網站時啟動Nginx時,發(fā)現(xiàn)其報下列錯誤,意思是因為80端口被占用導致Nginx啟動失敗,所以本文小編給大家介紹介紹如何解決解決httpd占用80端口導致Nginx啟動不成功報nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)2023-11-11keepalived+nginx實現(xiàn)雙服務器主備方案
本文主要介紹了使用keepalived和nginx實現(xiàn)雙服務器主備方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-12-12Nginx中報錯:Permission denied與Connection refused的解決
這篇文章主要給大家介紹了在Nginx中報錯:13: Permission denied與111: Connection refused的解決方法,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04Nginx、Apache、Lighttpd禁止目錄執(zhí)行php配置示例
這篇文章主要介紹了Nginx、Apache、Lighttpd禁止目錄執(zhí)行php配置示例,本文給出了單個目錄、多個目錄的禁止執(zhí)行PHP的方法,需要的朋友可以參考下2014-09-09Nginx配置指令location匹配符優(yōu)先級和安全問題
使用nginx 很久了,它的性能高,穩(wěn)定性表現(xiàn)也很好,得到了很多人的認可。特別是它的配置,有點像寫程序一樣,每行命令結尾一個";"號,語句塊用"{}"括起來。 配制好,直接nginx -t 檢查配制情況,配制成功,直接運行:service nginx reload .服務器沒有任何宕機情況下,實現(xiàn)平穩(wěn)修改配置2014-03-03centos系統(tǒng)下LNMP環(huán)境一鍵安裝
centos下的LNMP環(huán)境一鍵安裝實現(xiàn)方法,需要的朋友可以參考下。2010-06-06Nginx默認location?index設置網站的默認首頁方法詳解
我們都知道index后面可以跟多個設置,如果訪問的時候沒有指定具體訪問的資源,則會依次進行查找,找到第一個為止,這篇文章主要給大家介紹了關于Nginx默認location?index設置網站的默認首頁的相關資料,需要的朋友可以參考下2023-12-12