nginx 代理域名到另外一個(gè)域名的實(shí)現(xiàn)方法
nginx 代理域名到另外一個(gè)域名
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; #兩個(gè)小時(shí)
# 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,可以重定向到新域名的頁(yè)面,但是請(qǐng)求方法是有問(wèn)題的
上述代碼跑了幾天后,不起作用了,又更新了其它代碼
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請(qǐng)求會(huì)將post請(qǐng)求發(fā)送兩次,并且第二次會(huì)轉(zhuǎn)為get請(qǐng)求301:客戶(hù)端在收到 301 響應(yīng)后,會(huì)自動(dòng)將 HTTP 請(qǐng)求轉(zhuǎn)為 GET 請(qǐng)求,同時(shí)將請(qǐng)求地址修改為重定向后的地址
307:對(duì)請(qǐng)求類(lèi)型不做轉(zhuǎn)換
nginx代理轉(zhuǎn)發(fā)post請(qǐng)求變get請(qǐng)求方法
以下是常見(jiàn)的 Nginx HTTP 跳轉(zhuǎn) HTTPS 的方式及其對(duì)請(qǐng)求方法的影響:
301 Moved Permanently:該方式將所有的 HTTP 請(qǐng)求重定向到 HTTPS 上,并且該重定向是永久性的??蛻?hù)端在收到 301 響應(yīng)后,會(huì)自動(dòng)將 HTTP 請(qǐng)求轉(zhuǎn)為 GET 請(qǐng)求,同時(shí)將請(qǐng)求地址修改為重定向后的地址。這意味著,如果原始請(qǐng)求是 POST 請(qǐng)求,那么 301 重定向會(huì)將其轉(zhuǎn)變?yōu)?GET 請(qǐng)求。此外,瀏覽器會(huì)緩存 301 響應(yīng),下一次請(qǐng)求時(shí)會(huì)直接跳轉(zhuǎn)到 HTTPS 上。
302 Found / 303 See Other:這兩種方式將所有的 HTTP 請(qǐng)求臨時(shí)性地重定向到 HTTPS 上。302 Found 的響應(yīng)會(huì)將請(qǐng)求方法保持不變,同時(shí)將請(qǐng)求地址修改為重定向后的地址。而 303 See Other 則會(huì)將所有請(qǐng)求方法轉(zhuǎn)變?yōu)?GET 方法,并將請(qǐng)求地址修改為重定向后的地址。這兩種方式都不會(huì)緩存響應(yīng),下一次請(qǐng)求時(shí)會(huì)再次發(fā)起請(qǐng)求。
307 Temporary Redirect:該方式將所有的 HTTP 請(qǐng)求臨時(shí)性地重定向到 HTTPS 上,并且會(huì)保留原始的請(qǐng)求方法。這意味著,如果原始請(qǐng)求是 POST 請(qǐng)求,那么重定向后的請(qǐng)求仍然是 POST 請(qǐng)求。同時(shí),請(qǐng)求地址也會(huì)被修改為重定向后的地址。與 302 Found 類(lèi)似,307 Temporary Redirect 不會(huì)緩存響應(yīng),下一次請(qǐng)求時(shí)會(huì)再次發(fā)起請(qǐng)求。
308 Permanent Redirect:該方式將所有的 HTTP 請(qǐng)求重定向到 HTTPS 上,并且該重定向是永久性的。客戶(hù)端在收到 308 響應(yīng)后,會(huì)自動(dòng)將 HTTP 請(qǐng)求轉(zhuǎn)為與原始請(qǐng)求方法相同的請(qǐng)求方法,同時(shí)將請(qǐng)求地址修改為重定向后的地址。與 301 Moved Permanently 不同的是,308 Permanent Redirect 不會(huì)允許瀏覽器將 POST 請(qǐng)求重定向到新地址。308 響應(yīng)也會(huì)被緩存,下一次請(qǐng)求時(shí)會(huì)直接跳轉(zhuǎn)到 HTTPS 上。
需要注意的是,不同的重定向方式可能會(huì)對(duì)請(qǐng)求方法、請(qǐng)求地址、緩存等方面產(chǎn)生不同的影響。因此,在選擇重定向方式時(shí),需要根據(jù)具體的需求進(jìn)行選擇。通常情況下,推薦使用 301 Moved Permanently 或 308 Permanent Redirect 將 HTTP 重定向到 HTTPS 上,并且需要注意 POST 請(qǐng)求的處理方式
解決方法
方法1
可以使用return 307進(jìn)行轉(zhuǎn)發(fā),return 307,對(duì)請(qǐng)求類(lèi)型不做轉(zhuǎn)換,意思就是
get----->get
post----->post
所以通過(guò)原樣轉(zhuǎn)發(fā)可以解決我們post請(qǐng)求會(huì)被轉(zhuǎn)化為get請(qǐng)求問(wèn)題
具體配置方法
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;
}
}
這樣的話(huà) 當(dāng)我們post test.123.com/test/api這個(gè)地址時(shí)請(qǐng)求就不會(huì)被轉(zhuǎn)化為get請(qǐng)求了
方法2使用 return 308方式跳轉(zhuǎn)
具體配置方法
server {
listen 80;
server_name example.com;
return 308 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
# HTTPS 相關(guān)配置
...
}
在k8s ingress中配置http強(qiáng)跳https
在ingress注解中加入以下注解
nginx.ingress.kubernetes.io/force-ssl-redirect true

擴(kuò)展
當(dāng)我們要根據(jù)請(qǐng)求類(lèi)型來(lái)過(guò)濾按照請(qǐng)求類(lèi)型轉(zhuǎn)發(fā)到指定的地址時(shí)可以用以下方式來(lái)實(shí)現(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;
}
}
}
當(dāng)我們使用get請(qǐng)求http://test.123.com/api/bbb這個(gè)地址時(shí)請(qǐng)求不會(huì)被轉(zhuǎn)發(fā)
當(dāng)我們使用post請(qǐng)求http://test.123.com/api/bbb這個(gè)地址時(shí)請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到http://192.168.1.133:8088/aaa/bbb這個(gè)地址
到此這篇關(guān)于nginx 代理域名到另外一個(gè)域名的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)nginx 代理域名到另外域名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx實(shí)現(xiàn)靜態(tài)資源壓縮的方法詳解
靜態(tài)資源過(guò)大,下載耗時(shí)導(dǎo)致頁(yè)面打開(kāi)慢,希望通過(guò)壓縮減小文件大小,提升下載速度,所以本文給大家介紹了Nginx實(shí)現(xiàn)靜態(tài)資源壓縮的方法,并通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
Nginx反向代理實(shí)現(xiàn)支持長(zhǎng)連接詳解
這篇文章主要給大家介紹了關(guān)于Nginx反向代理實(shí)現(xiàn)支持長(zhǎng)連接的相關(guān)資料,文字介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06
Nginx中l(wèi)ocation實(shí)現(xiàn)多條件匹配的方法詳解
在 Nginx 中,location 指令用于匹配請(qǐng)求的 URI,雖然 location 本身是基于單一匹配規(guī)則的,但可以通過(guò)多種方式實(shí)現(xiàn)多個(gè)條件的匹配邏輯,下面小編就來(lái)為大家介紹一下具體實(shí)現(xiàn)方法吧2025-03-03
使用Nginx搭建文件服務(wù)器及實(shí)現(xiàn)文件服務(wù)的步驟
Nginx是輕巧、高效的Web服務(wù)器,用作文件服務(wù)器非常合適,但是需要一些高級(jí)功能,如FTP遠(yuǎn)程訪問(wèn)、多用戶(hù)管理,可能需要選擇更為復(fù)雜的方案,例如Apache或FileZilla Server,這篇文章主要介紹了詳解如何使用Nginx搭建文件服務(wù)器及實(shí)現(xiàn)文件服務(wù),需要的朋友可以參考下2024-01-01
使用Nginx實(shí)現(xiàn)HTTPS雙向驗(yàn)證的方法
這篇文章主要介紹了使用Nginx實(shí)現(xiàn)HTTPS雙向驗(yàn)證的方法,涉及到單向驗(yàn)證和雙向驗(yàn)證的區(qū)別介紹,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06

