最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你nginx跳轉(zhuǎn)配置的四種方式

 更新時間:2022年07月06日 12:37:34   作者:BigFish_大魚  
現(xiàn)如今隨著應(yīng)用服務(wù)的增多,服務(wù)可能部署在不同的服務(wù)器上,下面這篇文章主要給大家介紹了關(guān)于nginx跳轉(zhuǎn)配置的四種方式,需要的朋友可以參考下

前言

最近工作用到了nginx,但是路由配置特殊,業(yè)務(wù)場景復(fù)雜,因此整理了集中nginx跳轉(zhuǎn)的配置方式,如servername的正則,location的匹配順序,rewrite和proxy的示例,相信總有一種滿足你的需求。

一、配置server對應(yīng)的域名

server name 為虛擬服務(wù)器的識別路徑。因此不同的域名會通過請求頭中的HOST字段,匹配到特定的server塊,轉(zhuǎn)發(fā)到對應(yīng)的應(yīng)用服務(wù)器中去。server_name匹配規(guī)則:后面可以跟多個域名,第1個是主域名

1.1、精確匹配

如下nginx配置

????????listen???????8080;
????????server_name??test1.com;
????????location / {
????????????return 200 "I am test1!\n";
????????}
????}
????server {
????????listen???????8080;
????????server_name??my.test.com;
????????location / {
????????????return 200 "I am mytest!\n";
????????}
????}

請求結(jié)果

curl http://my.test.com:8080 返回:I am mytest!
curl http://test1.com:8080 返回:I am test1!

1.2、正則表達式

以*通配符開始的最長字符串,如下示例

server {
        listen       8080;
        server_name  test1.*;
        location / {
            return 200 "I am test1!\n";
        }
    }

以*通配符結(jié)束的最長字符串

        listen       8080;
        server_name  *.test.com;
        location / {
            return 200 "I am mytest!\n";
        }
    }

通配符名字只可以在名字的起始處或結(jié)尾處包含一個星號,并且星號與其他字符之間用點分隔。所以,“my..com“都是非法的。

例如 :server_name my..com;

報以下錯誤:

nginx: [emerg] invalid server name or wildcard "my.*.com" on 0.0.0.0:8080

匹配正則表達式

server {
        listen     8080;
        server_name  ~^my(?<serno>.+).mydomain.com$;
        location / {
            return 200 $serno;
        }
    }

解釋說明

  • ~: 表示大小寫敏感的正則;
  • ^:匹配字符串的開始;
  • {.+}:換行符以外的任意自讀重復(fù)一次活更多次;
  • (): 分組與取值;
  • :表示轉(zhuǎn)義;
  • serno:設(shè)置提取的變量;
  • $:匹配字符串的結(jié)束;

請求結(jié)果

curl http://my02.mydomain.com:8080 返回:02% 
curl http://my03.mydomain.com:8080 返回:03%

server_name的配置順序是怎樣的呢?

按照如下順序匹配:

  • 匹配順序->
  • ->精確匹配
  • ->*在前的域名
  • ->*在后的域名
  • ->按文件中的順序匹配
  • ->default server:第一個,listen指定default

二、配置location

2.1、Location 匹配規(guī)則:僅匹配URI,忽略參數(shù)

location [=|~|~*|^~] /uri/ { … }

匹配的正則符號如下:

  • = 嚴格匹配。如果請求匹配這個location,那么將停止搜索并立即處理此請求
  • ~ 區(qū)分大小寫匹配(可用正則表達式)
  • ~* 不區(qū)分大小寫匹配(可用正則表達式)
  • !~ 區(qū)分大小寫不匹配
  • !~* 不區(qū)分大小寫不匹配
  • ^~ 如果把這個前綴用于一個常規(guī)字符串,那么告訴nginx 如果路徑匹配那么不測試正則表達式

2.2、舉例

1、匹配任意請求
location [=|~|~*|^~] /uri/ { … }

2、不區(qū)分大小寫匹配以js、php結(jié)尾的請求
location ~* .(js|php)$ { … }

3、區(qū)分大小寫匹配以.txt結(jié)尾的請求
location ~ ^.+\.txt$

2.3、匹配順序如下圖

A428414C-215D-4AA3-80E8-2F58D3406E56.png

按照上面的規(guī)則配置了如下location

location = /documents {
    return 200 'configuration A'
}
location /documents {
    return 200 'configuration B'
}
location /documents/txt1 {
    return 200 'configuration C'
}
location ^~ /documents/ {
    return 200 'configuration D'
}
location ~* /documents/(\w+)$ {
    return 200 'configuration E'
}
location ~ /documents/$ {
    return 200 'configuration F'
}
  • curl http://test1.com:8080/documents,精確匹配返回 configuration A
  • curl http://test1.com:8080/documents/ ^~匹配上后不在匹配,返回 configuration D
  • curl http://test1.com:8080/documents/txt1 走到了正則匹配,不會走到/documents/txt1(正則沒走完) 返回configuration E
  • curl http://test1.com:8080/documents/txt1/,返回configuration C,因為正則都不匹配

2.4、如何debug正則呢?

編譯的時候加上 --with-debug選項,例如 ./configure --with-debug

conf文件加上要debug的host,debug_connection對應(yīng)要debug的連接。

events {
    worker_connections  1024;
    debug_connection  192.168.1.3;
    debug_connection  127.0.0.1;
}

error.log查看debug日志,圖中test location就是正則匹配的過程

三、配置rewrite

語法如下:

   指令語法:rewrite regex replacement[flag];
  默認值:none
  應(yīng)用位置:server、location、if
  rewrite是實現(xiàn)URL重定向的重要指令,他根據(jù)regex(正則表達式)來匹配內(nèi)容跳轉(zhuǎn)到replacement,結(jié)尾是flag標(biāo)記.

flag標(biāo)記說明
last本條規(guī)則匹配完成后繼續(xù)向下匹配新的location URI規(guī)則
break本條規(guī)則匹配完成后終止,不在匹配任務(wù)規(guī)則
redirect返回302臨時重定向
permanent返回301永久重定向

3.1、重定向

return三種code,code url和url。

返回狀態(tài)碼:444表示關(guān)閉連接 301表示http1。0中永久重定向,302表示臨時重定向,進制緩存。http1.1后,303表示臨時重定向,允許改變方法,進制緩存,307表示臨時重定向,不允許改變方法,禁止被緩存,308表示永久重定向,不允許改變方法。

返回code

location / {
    return 301 https://www.xxxx.com$request_uri;
}

通過$request_uri變量匹配所有的URI。

rewrite ^ https://www.xxxx.com$request_uri? permanent;

通過正則匹配所有的URI后再去掉開頭第一個/(反斜線)。

rewrite ^/(.*)$ https://www.xxxx.com/$1;

與if指令結(jié)合

server {
        listen       80;
        server_name  test1.net test2.net;
        if ($host != 'test1.net' ) {
                rewrite ^/(.*)$ http://www.baidu.net/$1 permanent;
        }
}

3.2、如何查看rewrite日志

打開日志開關(guān)rewrite_log on;

可以配置到http,server,location和if上下文中

示例:curl http://test1.com:8080/first/2.txt

location /first {
        rewrite_log on;
        rewrite /first(.*) /second$1 last;
      }

效果圖如下

CF42DE3F-670C-4520-8EEF-08DA05E148AB.png

四、配置 proxy

對上游服務(wù)使用http/https協(xié)議進行反向代理。proxy_pass后面跟url,可以仿造location,if in location和limit_except上下文中。 這個功能是默認編譯到nginx中的。本文重點討論http proxy。

url參數(shù)規(guī)則

  • url必須以http或者https開頭,接下來是域名、ip、unix socket或者upstream名字,都可以就端口。后面是可選的uri

http示例

proxy_pass http://localhost:8000/uri/;

UNIX域套接字路徑來定義示例

proxy_pass http://unix:/tmp/backend.socket:/uri/;

url中是否攜帶uri,結(jié)果也不一樣,如果在proxy_pass后面的url加/,相當(dāng)于是絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;如果沒有/,則會把匹配的路徑部分給代理走。

目錄結(jié)構(gòu)如下

├── first

│   └── index.html

├── index.html

└── second

    └── index.html

nginx配置如下

server {
        listen       8081;
        server_name  my.test.com;
    }
    server {
        listen       8082;
        # 第一種情況
        location  /first {
            proxy_pass http://my.test.com:8081;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # 第二種情況
        location  /first {
            proxy_pass http://my.test.com:8081/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

不帶/,然后 curl http://127.0.0.1:8082/first/index.html 返回index html

帶/,然后 curl http://127.0.0.1:8082/first/index.html 返回first index

  • Url參數(shù)中可以攜帶變量proxy_pass http://$host$uri;
  • 可以配合rewrite break語句
location /nameb/ { 
    rewrite /nameb/([^/]+) /test?nameb=$1 break;
    proxy_pass http://127.0.0.1:8801/; 
}

五、小結(jié)

配置nginx的路由,有多種方式,域名可以用server_name配置,uri可以用location配置,復(fù)雜的可以加rewrite配置修改請求。還有就是配置proxy代理,在代理中轉(zhuǎn)發(fā)id等。

到此這篇關(guān)于nginx跳轉(zhuǎn)配置的四種方式的文章就介紹到這了,更多相關(guān)nginx跳轉(zhuǎn)配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx獲取客戶端真實IP(real_ip_header)的實現(xiàn)

    Nginx獲取客戶端真實IP(real_ip_header)的實現(xiàn)

    在使用Nginx作為反向代理時,確保獲取客戶端真實IP是關(guān)鍵,通過配置real_ip_header和set_real_ip_from,Nginx可以正確解析X-Forwarded-For頭部信息,并更新$remote_addr為客戶端真實IP,下面就來具體介紹一下
    2024-10-10
  • 強大的Nginx配置生成器詳解

    強大的Nginx配置生成器詳解

    Nginx?Config?是一款可以一鍵生成?Nginx?配置的神器,相當(dāng)給力,這篇文章主要介紹了強大的Nginx配置生成器,需要的朋友可以參考下
    2022-11-11
  • Nginx啟用Brotli算法壓縮的示例

    Nginx啟用Brotli算法壓縮的示例

    這篇文章主要介紹了Nginx啟用Brotli算法壓縮的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Nginx服務(wù)器下配置使用索引目錄的教程

    Nginx服務(wù)器下配置使用索引目錄的教程

    這篇文章主要介紹了Nginx服務(wù)器下配置使用索引目錄的教程,包括自帶的auto_index和使用fancy插件美化的用法,需要的朋友可以參考下
    2016-01-01
  • nginx中斜杠(/)詳解

    nginx中斜杠(/)詳解

    本文主要介紹了nginx中斜杠(/)詳解,配置location、proxy_pass時,加“/”與不加“/”的區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Nginx反向代理的主被動健康檢查方式

    Nginx反向代理的主被動健康檢查方式

    這篇文章主要介紹了Nginx反向代理的主被動健康檢查方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 修改nginx站點根目錄總結(jié)經(jīng)驗(小結(jié))

    修改nginx站點根目錄總結(jié)經(jīng)驗(小結(jié))

    這篇文章主要介紹了修改nginx站點根目錄總結(jié)經(jīng)驗(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Nginx中的root&alias文件路徑及索引目錄配置詳解

    Nginx中的root&alias文件路徑及索引目錄配置詳解

    這篇文章主要介紹了Nginx中的root&alias文件路徑及索引目錄配置,順帶講解了root和alias命令的用法,需要的朋友可以參考下
    2016-01-01
  • 使用nginx實現(xiàn)一個端口和ip訪問多個vue前端的全過程

    使用nginx實現(xiàn)一個端口和ip訪問多個vue前端的全過程

    為滿足單端口訪問多個前端應(yīng)用的需求,需要對nginx進行配置,同時修改vue項目的publicPath參數(shù),這篇文章主要介紹了使用nginx實現(xiàn)一個端口和ip訪問多個vue前端的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • Nginx之rewrite重寫的具體使用

    Nginx之rewrite重寫的具體使用

    訪問重寫rewrite是Nginx HTTP請求處理過程中的一個重要功能,本文主要介紹了Nginx之rewrite重寫的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05

最新評論

曲阳县| 宁陵县| 宜兴市| 上饶县| 宜良县| 淮北市| 临泉县| 鹤庆县| 陇川县| 临武县| 夏河县| 文昌市| 泸西县| 永安市| 厦门市| 邹平县| 南京市| 昭通市| 白河县| 永平县| 扎兰屯市| 青神县| 大港区| 乌海市| 驻马店市| 扶风县| 丹棱县| 青河县| 长岭县| 右玉县| 谢通门县| 枣阳市| 秭归县| 宁明县| 丰县| 神农架林区| 诏安县| 松桃| 杭州市| 离岛区| 乌兰浩特市|