網站首頁 編程語言 正文
nginx 提供反向代理服務,日常開發過程中有時候我們需要使用nginx 作為代理服務根據url的不同去訪問不同的服務器或者不同端口,如下提供兩種方案。
1.直接替換location??匹配部分
1.proxy_pass的目標地址,默認不帶/,表示只代理域名,url和參數部分不會變(把請求的path拼接到proxy_pass目標域名之后作為代理的URL)
2.如果在目標地址后增加/,則表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目標地址
server { listen 80; server_name localhost; location /system { proxy_pass http://127.0.0.1:8080; proxy_redirect off; 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_pass 以/結尾 location /system { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
例如:http://192.168.25.132/system/sysMenu/tree
如上兩個匹配成功后,實際代理的目標url分別是
http://127.0.0.1:8080/system/sysMenu/tree (把/system/sysMenu/tree拼接到proxy_pass 地址的127.0.0.1:8080之后)
http://127.0.0.1:8080/sysMenu/tree (把/system/sysMenu/tree去掉匹配到的location /system拼接到proxy_pass 地址的127.0.0.1:8080之后)
2.使用nginx 的rewrite 模塊?
rewrite是實現URL重寫的關鍵指令,根據regex(正則表達式)部分內容,重定向到replacement,結尾是flag標記。
rewrite <regex> <replacement> [flag]; 關鍵字 正則 替代內容 flag標記 關鍵字:其中關鍵字error_log不能改變 正則:perl兼容正則表達式語句進行規則匹配 替代內容:將正則匹配的內容替換成replacement flag標記:rewrite支持的flag標記 flag標記說明: last #本條規則匹配完成后,繼續向下匹配新的location URI規則 break #本條規則匹配完成即終止,不再匹配后面的任何規則 redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址 permanent #返回301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址
把到本服務的所有請求轉發到www.summer.com
rewrite ^/(.*) http://www.summer.com/$1 break;
把到本服務器的所有請求路徑中以/system開頭的請求 替換成不帶system的,例如http://192.168.25.132/system/sysMenu/tree ,匹配后地址變成?http://127.0.0.1:8080/sysMenu/tree
rewrite ^/system/(.*) /$1 break;?? ??? ?
說明:????????????????????????????????????????
rewrite為固定關鍵字,表示開始進行rewrite匹配規則
regex部分是?^/(.*)?,這是一個正則表達式,匹配完整的域名和后面的路徑地址
replacement部分是http://www.summer.com/$1? ?$1是取自regex部分()里的內容。匹配成功后跳轉到的URL。
flag部分?break表示停止匹配,然后跳轉到新的?http://www.summer.com/$1?地址上。
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { #/data/manager可以存放靜態頁面 root /data/manager; index index.html index.htm; } location /system { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; rewrite ^/system/(.*) /$1 break; } }
regex?常用正則表達式說明
rewrite?企業應用場景
Nginx的rewrite功能在企業里應用非常廣泛:
u?可以調整用戶瀏覽的URL,看起來更規范,合乎開發及產品人員的需求。
u?為了讓搜索引擎搜錄網站內容及用戶體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務。
u?網址換新域名后,讓舊的訪問跳轉到新的域名上。例如,訪問京東的360buy.com會跳轉到jd.com
u?根據特殊變量、目錄、客戶端的信息進行URL調整等
原文鏈接:https://blog.csdn.net/yk614294861/article/details/102688926
相關推薦
- 2023-10-26 void 0 有什么意義?undefined竟然是可變的?
- 2022-12-27 手把手教你實現一個C++單鏈表_C 語言
- 2022-10-19 Python?變量教程字節對象與字符串_python
- 2022-09-10 Python并發編程多進程,多線程及GIL全局解釋器鎖_python
- 2021-12-05 CentOS7環境下gcc(版本10.2.0)升級詳細過程_Linux
- 2022-03-13 C語言實現求最大公約數的三種方法_C 語言
- 2022-03-18 .Net使用分表分庫框架ShardingCore實現多字段分片_實用技巧
- 2022-04-17 python中lambda匿名函數詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支