中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx中的Rewrite和location用法詳解

發布時間:2020-08-10 21:55:08 來源:網絡 閱讀:720 作者:23trl 欄目:云計算

Nginx中的Rewrite和location用法詳解

rewrite定義

rewrite功能就是使用nginx提供的全局變量或自己設置的變量,結合正則表達式和標志位實現url重寫以及重定向。
rewrite循環最多可以執行10次,超過過nginx將返回500錯誤
支持pcre語言,正則表達式,支持重寫模塊set指令

rewrite 語法

rewrite regex replacement [flag];
正則 跳轉后的內容 rewrite支持的flag標記

    如果相對域名或參數字符串起作用,可以使用全局變量匹配,也可以使用proxy_pass反向代理。
   從上 表明看rewrite和location功能有點像,都能實現跳轉。主要區別在于rewrite是在同一域名內更改獲取資源的路徑,而location是對一類路徑做控制訪問或反向代理,可以proxy_pass到其他機器。

很多情況下rewrite也會寫在location里,它們的執行順序是:

1 執行server塊的rewrite指令
2 執行location匹配
3 執行選定的location中的rewrite指令
如果其中某步URI被重寫,則重新循環執行1-3,直到找到真實存在的文件;循環超過10次,則返回500 Internal Server Error錯誤。

rewrite 實用場景

使用rewrite進行匹配跳轉
使用if匹配全局變量后跳轉
使用location匹配再跳轉
rewrite 放在 sever{},if{},location{}段中
對域名或參數字符串
使用if全局變量匹配
使用proxy_pass反向代理

rewrite常用的正則表達式元字符

Nginx中的Rewrite和location用法詳解

flag標記說明

Nginx中的Rewrite和location用法詳解

last和break比較

Nginx中的Rewrite和location用法詳解

location 詳解之分類

location = patt {} [精準匹配]
location = patt {} [一般匹配]
location ~ patt {} [正則匹配]

正則匹配的常用表達式

Nginx中的Rewrite和location用法詳解

location優先級

相同類型的表達式,字符串長的會優先匹配

按優先級排列

= 類型
^~ 類型表達式
正則表達式 (~和~*)類型
常規字符串匹配類型,按前綴匹配
通用匹配(/),如果沒有其他匹配,任何請求都會匹配到

比較rewrite 和 location

相同點

都能實現跳轉

不同點

rewrite實在同一個域名內更改獲取資源的路徑
location是對一類路徑做控制訪問或反向代理,還可以proxy_到其他機器

rewrite會寫在location里,執行順序

執行server塊里面的rewrite指令
執行location匹配
執行選定的location中的rewrite指令

http server event 三種消息級別結構

Nginx中的Rewrite和location用法詳解

優先級的實列

 location = / {
 [ configuration A ]    ##精確匹配/,主機名后面不能帶任何字符串
 }

location / {
 [ configuration B ]    ##所有的地址都以/開頭,這條規則將匹配到所有請求,但正則
和最長字符串會優先匹配
 }
 location  /documents/ {
 [ configuration C ]    ##匹配任何以 /documents/ 開頭的地址,當后面的正則表達式沒有匹配到時,才起作用
 }

 location ~ /documents/abc {  
 [ configuration D ]  ##匹配任何以/documents/abc 開頭的地址,當后面的正則表達式沒有匹配到時,才會起作用

 }

 location ^~ /images/ {
 [ configuration E ]   ##以/images/開頭的地址,匹配符號后,停止往下匹配
 }

 location ~* \.(gif|jpg|peg)$ {
 [ configuration F]    ##匹配所有以gif,jpg或jpeg結尾的請求,/images/下的圖片會被
 處理,因為^~的優先級更高
 }

 location /images/abc {
 [ configuration G ]  ##最長字符匹配到/images/abc,優先級最低
 }

 location ~ /images/abc {
 [ configuration H ]  ##以/images/abc開頭的,優先級次之
 }

 location /images/abc/1.html {
 [ configuration  I ]  ##如果和正則~ /images/abc/1.html相比,正則優先級更高
 }

location優先級規則

匹配某個具體文件

(location = 完整路徑)>(location ^~完整路徑)> (location ~完整路徑) > (location ~ 目錄) > (location 目錄) > (location /)

用目錄做匹配訪問某個文件

(location = 目錄)> (location ^~ 目錄/) > (location ~ 目錄) > (location ~* 目錄) > (location 目錄) > (location /)

具體使用場景——1.基于域名的跳轉

安裝nginx官方源

[root@localhost ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
Retrieving http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
warning: /var/tmp/rpm-tmp.VbwudT: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:nginx-release-centos-7-0.el7.ngx ################################# [100%]

安裝nginx,配置nginx

[root@localhost ~]# yum install nginx -y
[root@localhost ~]# vim /etc/nginx/conf.d/default.conf 

  3     server_name  www.chen.com;  #第3行加入你的老域名

 6     access_log  /var/log/nginx/www.chen.com-access.log  main;  #第6行加入你老域名的日志消息

安裝DNS服務解析

[root@localhost ~]# yum install bind -y

配置DNS主配置文件

[root@localhost ~]# vim /etc/named.conf 

 13         listen-on port 53 { any; };
 21         allow-query     { any; };

配置DNS區域配置文件

[root@localhost ~]# vim /etc/named.rfc1912.zones 
zone "chen.com" IN {
        type master;
        file "chen.com.zone";
        allow-update { none; };
};

配置DNS區域數據配置文件

[root@localhost ~]# cd /var/named/
[root@localhost named]# cp -p named.localhost chen.com.zone
[root@localhost named]# cp -p chen.com.zone accp.com.zone 

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
www IN  A       192.168.136.181

[root@localhost named]# systemctl start named
[root@localhost named]# systemctl stop firewalld.service
[root@localhost named]# setenforce 0
[root@localhost named]# systemctl start nginx
[root@localhost named]# netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      81426/nginx: master 

去客戶端去測試訪問Nginx的頁面

先將客戶端DNS服務器選擇我們DNS服務器的地址

Nginx中的Rewrite和location用法詳解
Nginx中的Rewrite和location用法詳解

配置Nginx主配置文件,做老域名轉新域名

[root@localhost named]#vim /etc/nginx/conf.d/default.conf
location / {
#域名重定向
    if ($host = "www.chen.com") {  #如果你訪問這個老域名
      rewrite ^/(.*)$ http://www.accp.com/$1 permanent;  #跳轉為以/開頭匹配多個任意字符結尾,這些參數,都為$1的變量永久性跳轉
    }
    root  /usr/share/nginx/html;
    index  index/html index.html;
}

### 再為新域名去添加到DNS服務中去解析
[root@localhost named]# vim /etc/nginx/conf.d/default.conf 

zone "accp.com" IN {
        type master;
        file "accp.com.zone";
        allow-update { none; };
};

[root@localhost named]# cp -p chen.com.zone accp.com.zone 

[root@localhost named]# systemctl restart named
[root@localhost named]# systemctl restart nginx

再去客戶端去驗證訪問老域名時會轉到新域名

Nginx中的Rewrite和location用法詳解

具體使用場景——2.基于客戶端IP訪問跳轉

先查看客戶端的地址,這個地址為不合法的

Nginx中的Rewrite和location用法詳解

配置nginx主配置文件,把原來的刪掉 3dd

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf 
 if ($host = "www.chen.com") {
          rewrite ^/(.*)$ http://www.accp.com/$1 permanent;
        }

#設置是否合法的IP標志
set $rewrite true;
#判斷是否為合法的IP
if ($remote_addr = "192.168.136.140"){  #140我們把這個地址設置成合法的IP
    set $rewrite false;
}
#非法IP進行判斷打上標記
if ($rewrite = true){
    rewrite (.+) /main.html;
}
#匹配標記進行跳轉站點
location = /main.html {
    root /usr/share/nginx/html;
}

[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# ls
50x.html  index.html

去創建一個維護頁面(給不合法的地址訪問的頁面)

[root@localhost html]# vim main.html
<h2>this is test web</h2>

去客戶端先去測試一下不合法的頁面(www.accp.com的地址是192.168.136.139)

Nginx中的Rewrite和location用法詳解

再去測試一下合法的頁面

先換成固定IP再去訪問

Nginx中的Rewrite和location用法詳解
Nginx中的Rewrite和location用法詳解

具體使用場景——3.基于舊域名跳轉到新域名后面加目錄,比如現在訪問的是http://bbs.accp.com,現在需要將這個域名下面的發帖都跳轉到http://www.accp.com/bbs

[root@localhost html]# vim /etc/nginx/conf.d/default.conf
##把原來的刪掉14dd

  7     location /post {  #匹配到/post才能進行下面的操作
  8         rewrite (.+) http://www.accp.com/bbs$1 permanent;  #任意字符,www.accp.com/bbs $1調前面任意字符的參數,永久跳轉
  9     }
[root@localhost named]# cd /var/named/
[root@localhost named]# vim accp.com.zone 

bbs IN  A       192.168.136.182

[root@localhost named]# systemctl restart nginx
[root@localhost named]# systemctl restart named

去服務器端網站測試一下

Nginx中的Rewrite和location用法詳解

具體使用場景——4.基于參數匹配的跳轉

[root@localhost named]# vim /etc/nginx/conf.d/default.conf 

#記得把原來的刪掉
 if ($request_uri ~ ^/100-(100|200)-(\d+).html$){  #$request_uri是內置變量,匹配開頭為100到100或200,\d+代表1-9任意的數字,然后為結尾的html
        rewrite (.*) http://www.accp.com permanent;  #就跳轉到.*代表0次或多次這個域名的頁面永久
}
[root@localhost named]# vim accp.com.zone 
www IN  A       192.168.136.182

[root@localhost named]# systemctl restart nginx
[root@localhost named]# systemctl restart named

去客戶端測試一下

Nginx中的Rewrite和location用法詳解

具體使用場景——5.基于目錄下所有php文件跳轉

[root@localhost named]# vim /etc/nginx/conf.d/default.conf 
#把原來的刪掉3dd
  location ~* /upload/.*\.php$ {  #匹配正則不區分大小寫,upload代表一個目錄。匹配php結尾的所有文件,\.轉譯.這個符號
        rewrite (.*) http://www.accp.com permanent; #永久跳轉首頁
}
[root@localhost named]# vim /etc/nginx/conf.d/default.conf 
[root@localhost named]# systemctl restart nginx

去客戶端測試一下

Nginx中的Rewrite和location用法詳解

具體使用場景——6.根據具體的頁面跳轉首頁

[root@localhost named]# vim /etc/nginx/conf.d/default.conf 
#原來的第一條改成自己設置的一個具體頁面
  location ~* ^/abc/123.html {    #以/abc/123.html 開頭的

[root@localhost named]# systemctl restart nginx

去客戶端測試一下

Nginx中的Rewrite和location用法詳解

以上就是我們全部的內容了

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投市| 从江县| 香格里拉县| 正定县| 韩城市| 德保县| 富阳市| 师宗县| 高青县| 富宁县| 嘉定区| 通江县| 江山市| 鹤山市| 忻州市| 大余县| 广元市| 丰镇市| 娄烦县| 阳东县| 资中县| 利辛县| 贵定县| 红原县| 蓬莱市| 合肥市| 巴林左旗| 名山县| 咸宁市| 行唐县| 青州市| 瑞昌市| 徐水县| 商南县| 杭州市| 双桥区| 凤山市| 建宁县| 遵义市| 和田市| 宜兴市|