直接用return簡單方便 return URL; 顯示跳轉后新的網絡地址
proxy_pass配置可以顯示原來的網頁地址
這篇文章通俗易懂:圖解 | 神器 Nginx 的速成手冊 (qq.com)
以下參考:
1. return 指令
在重定向滿足兩個條件時適用:
重寫的 URL 適用於每個匹配的 server 或 location 的請求
可以使用標准的 NGINX 變量構建重寫的 URL
return 指令簡單高效,建議盡量使用 return,而不是 rewrite。
return 指令放在 server 或 location 上下文中。語法很簡單
return code [text];
return code URL;
return URL;
# 下面代碼中,listen 指令表明 server 塊同時用於 HTTP流量。 # server_name 指令匹配包含域名 ‘www.old-name.com’ 的請求。return 指令告訴 Nginx 停止處理請求,直接返回 301 (Moved Permanently) 代碼和指定的重寫過的 URL 到客戶端。 # $scheme 是協議(HTTP 或 HTTPS),$request_uri 是包含參數的完整的 URI。 server{ listen 80; server_name www.old-name.com; # return 指令的第一個參數是響應碼。第二個參數可選,可以是重定向的 URL # location 和 server 上下文中都可以使用 return 指令。 return 301 $scheme://www.new-name.com$request_uri; }
2.rewrite
rewrite 規則會改變部分或整個用戶請求中的 URL,主要有兩個用途:
通知客戶端,請求的資源已經換地方了。例如網站改版后添加了 www 前綴,通過 rewrite 規則可以將所有請求導向新站點。
控制 Nginx 中的處理流程。例如當需要動態生成內容時,將請求轉發到應用程序服務器。try_files 指令經常用於這個目的。
語法:
rewrite regex URL [flag];
flag標志位:
last:停止處理當前的 ngx_http_rewrite_module 指令集,並開始對匹配更改后的 URI 的新 location 進行搜索(再從 server 走一遍匹配流程)。此時對於當前 server 或 location 上下文,不再處理 ngx_http_rewrite_module 重寫模塊的指令。
break:停止處理當前的 ngx_http_rewrite_module 指令集.
last 和 break 的區別及共同處:
last 重寫 url 后,會再從 server 走一遍匹配流程,而 break 終止重寫后的匹配
break 和 last 都能阻止后面的 rewrite 指令再次執行
redirect:返回包含 302 代碼的臨時重定向,在替換字符串不以"http://","https://“或”$scheme"開頭時使用.
permanent:返回包含 301 代碼的永久重定向。
rewrite 指令只能返回代碼 301 或 302。要返回其他代碼,需要在 rewrite 指令后面包含 return 指令。
3. proxy_pass
proxy_pass指令中在nginx的兩個模塊都有
ngx_http_proxy_module的proxy_pass:
語法: proxy_pass URL;
場景: location, if in location, limit_except
說明: 設置后端代理服務器的協議(protocol)和地址(address),以及location中可以匹配的一個可選的URI。協議可以是"http"或"https"。地址可以是一個域名或ip地址和端口,或者一個 unix-domain socket 路徑。
詳見官方文檔: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
ngx_stream_proxy_module的proxy_pass:
語法: proxy_pass address;
場景: server
說明: 設置后端代理服務器的地址。這個地址(address)可以是一個域名或ip地址和端口,或者一個 unix-domain socket路徑。
詳見官方文檔: http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_pass
兩個proxy_pass的關系和區別:
在兩個模塊中,兩個proxy_pass都是用來做后端代理的指令.
ngx_stream_proxy_module模塊的proxy_pass指令只能在server段使用,只需要提供域名或ip地址和端口,可以理解為端口轉發,可以使tcp端口,也可以是udp端口.
ngx-http-proxy-module模塊中的proxy_pass指令需要在location段,location中的if段,limit_except段中使用,處理需要提供域名或ip地址和端口外,還需要提供協議.如 “http” 或 “https”,還有一個可選的url可以配置.
proxy_pass使用詳解: 現在使用 http://test.yeguxin.top/proxy/aaa/bbb.text
第一種: 絕對路徑. proxy_pass http://127.0.0.1:8080; 后面8080沒有 “/”
第二種:相對路徑. proxy_pass http://127.0.0.1:8080; 后面8080有 “/”
第三種 proxy_pass http://127.0.0.1:8080/static; 后面static沒有 “/”
第四種 proxy_pass http://127.0.0.1:8080/static; 后面static有 “/”
最基本proxy_pass 用法
server { listen 80; server_name chat.paas.scorpio.uat.newtank.cn; # 轉發請求到 http://www.example.com location / { proxy_pass http://www.example.com; } }
————————————————
版權聲明:本文為CSDN博主「葉孤心丶」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yeguxin/article/details/94020476