Nginx Rewrite實際應用配置解析
前言
在各種網站伺服器軟體中,除了Apache HTTP Server外,還有一款輕量級的HTTP伺服器軟體——Nginx,本文就Nginx中的Rewrite的應用場景相關配置進行一些解析,學習。
一 Nginx Rewrite概述
1.1 Rewrite跳轉場景
URL看起來更規範,合理
企業會將動態URL地址偽裝成靜態地址提供服務
網址換新域名後,讓舊的訪問跳轉到新的域名上
服務端某些業務調整
1.2 Rewrite跳轉實現圖例
1.3 Rewrite實際場景
1.Nginx跳轉需求的實現方式
使用rewrite進行匹配跳轉
使用if匹配全域性變數後跳轉
使用location匹配再跳轉
2.rewirte放在server{},if{},location{}段中
location只對域名後邊的除去傳遞引數外的字串起作用
3.對域名或引數字串
使用if全域性變數匹配 (重定向)
使用proxy_pass反向代理 (動靜分離)
1.4 Nginx正規表示式
常用的正規表示式元字元
字元 說明
^ 匹配輸入字串的起始位置
$ 匹配輸入字串的結束位置
* 匹配前面的字元零次或多次
+ 匹配前面的字元一次或多次
? 匹配前面的字元零次或一次
. 匹配除“\n”(換行)之外的任何單個字元
\ 轉義字元 將後面接著的字元標記為一個特殊字元或一個原義字元或一個向後引用(使用諸如“[.\n]”之類的模式,可匹配包括“\n”在內的任意字元)
\d 匹配純數字 [0-9] 代替單個數字
{n} 重複n次
{n,} 重複n次或更多次
[c] 匹配單個字元c
[a-z] 匹配a-z小寫字母的任意一個
[a-zA-Z] 匹配a-z小寫字母或A-Z大寫字母的任意一個
1.5 Rewrite命令
1.5.1 Rewrite命令語法
rewrite <regex> <replacement> [flag]
需要匹配的正則 跳轉後的內容 rewrite支援的flag標記
1.5.2 flag標記說明
標記 說明
last 迴圈匹配 相當於Apache的[L]標記,表示完成rewrite
break 本條規則匹配完成即終止,不再匹配後面的任何規則
redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址,爬蟲不會更新url
permanent 返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址,爬蟲更新url (路徑會改變)
1.5.3 last和break比較
都可以實現跳轉
last break
使用場景 一般寫在server和if中 一般使用在location中
URL匹配 不終止重寫後的url匹配 終止重寫後的url匹配
1.6 location分類
1.6.1 分類
location = patt {} [精確匹配]
location patt {} [一般匹配]
location ~ patt {} [正則匹配]
1.6.2 正則匹配的常用表示式
標記 說明
~ 執行一個正則匹配,區分大小寫
~* 執行一個正則匹配,不區分大小寫
!~ 執行一個正則匹配,區分大小寫不匹配
!~* 執行一個正則匹配,不區分大小寫不匹配
^~ 普通字元匹配,使用字首匹配。如果匹配成功,則不再匹配其它location
= 普通字元精確匹配。也就是完全匹配
@ 定義一個命名的location,使用在內部定向時
1.7 loation優先順序
1.相同型別的表示式,字串長的會優先匹配
2.按優先順序排列
= 型別 精確匹配
^~ 型別表示式 字首匹配
正規表示式 (~和~*)型別
常規字串匹配型別,按字首匹配 一般匹配
通用匹配(/),如果沒有其他匹配,任何請求都會匹配到 通用匹配
1.8 location優先順序規則
(location = 完整路徑)精確 > (location ^~ 完整路徑) 字首> (location ~* 完整路徑 )正則 = (location ~ 完整路徑) 正則> (location 完整路徑)一般 > (location /)通用
1.9 用目錄做匹配訪問某個檔案
(location = 目錄)> (location ^~ 目錄)>(location ~ 目錄)=(location ~* 目錄)>(location 目錄)>(location /)
1.10 比較rewrite和location
1.相同點 :
都可以實現跳轉
2.不同點:
rewrite是在同一域名內更改獲取資源的路徑
location是對一類路徑做控制訪問或反向代理,還可以proxy_pass到其它機器
rewrite會寫在location裡,執行順序
執行server塊裡面的rewrite指令
執行location匹配
執行選定的location中的rewrite指令
二 Nginx Rewrite應用配置
2.1 安裝Nginx服務
1.步驟
1.安裝nginx源
2.安裝nginx軟體包
3.修改預設站點配置檔案:etc/nginx/conf.d/default.conf
4.啟動nginx
注意:
確定域名可以正常解析
做下一個場景前,要刪除上一個場景的配置
及時清除瀏覽器快取
2.2 基於域名的跳轉
2.2.1 配置需求
公司舊域名www.kgc.com,因業務需求有變更,需要使用新域名www.newkgc.com代替
不能廢除舊域名
從舊域名跳轉到新域名,且保持其引數不變
-
先進行域名對映配置
在C盤/Windows/system32/drivers/etc/hosts檔案
文字形式開啟檔案
新增
20.0.0.12 www.domain.com www.newdomain.com另存到桌面,儲存型別 “所有檔案”
刪除原檔案,刪除檔案字尾 .txt
複製到etc資料夾中。
2.檢視服務程式
[root@client1 ~]# curl -I http://localhost
預設200
3.編輯配置檔案
[root@client1 ~]# vi /etc/nginx.conf
新增修改
server_name www.domain.com;
if ($host = 'www.domain.com')
{
rewrite ^/(.*)$ http://www.newdomain.com/$1 permanent;
}
$host :全域性變數
server {
listen 80;
server_name www.domain.com;
if ($host = 'www.domain.com')
{
rewrite ^/(.*)$ http://www.newdomain.com/$1 permanent;
}
charset utf-8;
access_log logs/www.domain.access.log main;
location / {
root html;
index index.html index.htm;
}
location ~ /status {
stub_status on;
access_log off;
}
[root@client1 ~]# vi /etc/nginx.conf
[root@client1 ~]# nginx -t 檢查語法,報錯,沒有目錄不存在
[root@client1 ~]# mkdir /var/log/nginx 建立目錄
[root@client1 ~]# nginx -t
[root@client1 ~]# ulimit -n 65535 >> /etc/rc.local
[root@client1 ~]# nginx -t
[root@client1 ~]# mkdir -p /usr/share/nginx/html 建立主頁 -p:巢狀
[root@client1 ~]# echo "this is a apple." > /usr/share/nginx/html/index.html
[root@client1 ~]# cat /usr/share/nginx/html/index.html 檢視主頁
[root@client1 ~]# systemctl stop nginx
[root@client1 ~]# systemctl start nginx
在瀏覽器上http;//www.domain.com
進行抓包
重定向後程式碼301
在瀏覽器上http;//www.domain.com/a
進行抓包
2.3 基於客戶端IP訪問跳轉
2.3.1 配置需求今天公司業務版本上線,所有IP訪問任何內容都顯示一個固定維護頁面,只有公司IP訪問正常
2.3.2 方法一
檢視ip地址
[root@client1 ~]# ifconfig
域名捆綁
[root@client1 ~]# vi /etc/hosts
20.0.0.12 www.domain.com
修改預設站點配置檔案,
先刪除之前的域名跳轉的配置檔案
[root@client1 ~]# vi /etc/nginx.conf
刪除
[root@client1 ~]# vi /etc/nginx.conf
[root@client1 ~]# nginx -t
[root@client1 ~]# systemctl stop nginx
[root@client1 ~]# systemctl start nginx
新增
set $rewrite true; 變數自定義
if ($remote_addr = "20.0.0.12") { 全域性變數 (重定向)
set $rewrite false;
}
if ($rewrite = true) {
rewrite (.+) /maintenance.html; 整個域名
}
location = /maintenance.html { 精確定位
root /usr/share/nginx/html; 根路徑
}
建立重定向網頁
[root@client1 ~]# vi /usr/share/nginx/html/maintenance.html
Website is Maintaining,Please visit later.
在主機20.0.0.12的瀏覽器上
http://www.domain.com
在其他裝置瀏覽器上
http://www.domain.com
2.3.3 方法二
修改伺服器地址進行訪問跳轉
[root@client1 ~]# ifconfig ens33 20.0.0.22
[root@client1 ~]# ifconfig
修改域名對映
[root@client1 ~]# vi /etc/hosts
20.0.0.22 www.domain.com
在本地瀏覽器上再次訪問http://www.domain.com
說明 $remote_addr 針對的地址ip上客戶機訪問地址
2.4 基於舊,新域名跳轉並加目錄
2.4.1配置需求
將域名http;//bbs.kgc.com下面的發帖都跳轉到http://www.kgc.com/bbs.且域名跳轉後保持引數不變。
[root@client1 ~]# vi /etc/nginx.conf
[root@client1 ~]# nginx -t
刪除
新增
location /post {
rewrite (.+) http://www.domain.com/bbs$1 permanent;
}
修改
server {
listen 80;
server_name www.domain.com;
charset utf-8;
access_log /var/log/nginx/www.domain.com-access.log main;
location / {
root html;
index index.html index.htm;
}
}
新增bbs目錄,建立網頁
[root@client1 ~]# cd /usr/local/nginx/html/
[root@client1 html]# ls -lh
[root@client1 html]# mkdir -p bbs/post
[root@client1 html]# ls -R bbs/
[root@client1 html]# cd bbs/post/
[root@client1 post]# ls -lh
[root@client1 post]# vi a.html
[root@client1 post]# cd
[root@client1 ~]# systemctl stop nginx
[root@client1 ~]# systemctl start nginx
域名對映
[root@client1 ~]# vi /etc/hosts
20.0.0.12 www.domain.com bbs.domain.com
在瀏覽器上
bbs.domain.com/post/a.html
2.5 基於引數匹配的跳轉
[root@client1 ~]# vi /etc/nginx.conf
[root@client1 ~]# nginx -t
[root@client1 ~]# systemctl stop nginx
[root@client1 ~]# systemctl start nginx
修改刪除
新增 正規表示式
if ($request_uri ~ ^/100-(100|200)-(\d+).html$) { 以100開頭-100或者200-數字
rewrite (.*) http://www.domain.com permanent;
}
在瀏覽器上
www.domain.com
在瀏覽器上
www.domain.com/100-100-100.html
在瀏覽器上
www.domain.com/100-400-100.html
2.6 基於目錄下所有php檔案跳轉
[root@client1 ~]# vi /etc/nginx.conf
[root@client1 ~]# nginx -t
[root@client1 ~]# systemctl stop nginx
[root@client1 ~]# systemctl start nginx
刪除
新增
location ~* /upload/.*\.php$ {
rewrite (.+) http://www.domain.com permanent;
}
~*:不區分大小寫
在瀏覽器上
www.domain.com/upload/1.php
http://www.domain.com/UPLOAD/1.php
http://www.domain.com/test/1.php
2.7 基於最普通url請求的跳轉
[root@client1 ~# vi /etc/nginx.conf
修改
location ~* ^/1/test.html { 可不區分大小寫
rewrite (.+) http://www.domain.com permanent;
}
在瀏覽器上
http://www.domain.com/1/test/html
http://www.domain.com/1/TEST.html
總結
通過以上對Nginx Rewrite實際操作的配置解析,加深了對該服務命令的認知。
相關文章
- nginx thinkphp rewrite配置項NginxPHP
- nginx rewriteNginx
- Nginx RewriteNginx
- Nginx 實現 Rewrite 跳轉Nginx
- redux 原始碼解析與實際應用Redux原始碼
- Yii框架在Nginx下的rewrite配置(偽靜態配置)框架Nginx
- Nginx應用場景配置Nginx
- Nginx rewrite 詳解Nginx
- nginx配置location總結及rewrite規則寫法Nginx
- Nginx全配置解析Nginx
- nginx rewrite語法格式Nginx
- nginx之rewrite匹配需求Nginx
- Nginx Rewrite規則初探Nginx
- nginx的rewrite設定Nginx
- nginx高階篇rewriteNginx
- JNI解析以及在Android中的實際應用Android
- 資源描述框架的用途及實際應用解析框架
- Nginx(六):配置解析之location解析Nginx
- NGINX使用rewrite實現http 跳轉 httpsNginxHTTP
- Nginx rewrite 規則 與 proxy_pass 實現Nginx
- 如何為 Flask Web 應用配置 NginxFlaskWebNginx
- Nginx配置檔案解析Nginx
- 策略模式解析以及在Android中的實際應用模式Android
- Nginx配置檔案示例解析Nginx
- nginx 配置解析(11)——mergeNginx
- 觀察者模式解析以及在Android中的實際應用模式Android
- nginx location匹配及rewrite規則Nginx
- Nginx location匹配及Rewrite重寫Nginx
- redis實際應用-限流Redis
- 棧的實際應用
- nginx應用總結(1)-- 基礎知識和應用配置梳理Nginx
- C++ 運算子全解析:從基礎概念到實際應用C++
- 從零手寫實現 nginx-13-nginx.conf 配置例子解釋 + nginx 配置檔案要如何解析?Nginx
- Nginx 學習總結(4)—— Rewrite 模組Nginx
- nginx通過rewrite方式處理路由Nginx路由
- Nginx常用Rewrite偽靜態規則Nginx
- Nginx的Rewrite規則與例項Nginx
- ItemDecoration深入解析與實戰(二)—— 實際運用