日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Nginx >内容正文

Nginx

nginx location 匹配 多个规则_你需要知道的Nginx配置二三事

發(fā)布時(shí)間:2024/10/6 Nginx 128 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx location 匹配 多个规则_你需要知道的Nginx配置二三事 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Nginx是俄羅斯人Igor Sysoev基于C語(yǔ)言編寫的十分輕量級(jí)的HTTP服務(wù)器,它主要有以下特點(diǎn):

  • 它是一個(gè)高性能的HTTP和反向代理服務(wù)器,同時(shí)也是一個(gè)IMAP/POP3/SMTP 代理服務(wù)器;

  • Nginx使用異步事件驅(qū)動(dòng)的方法來(lái)處理請(qǐng)求,Nginx的模塊化事件驅(qū)動(dòng)架構(gòu)可以在高負(fù)載下提供更可預(yù)測(cè)的性能;

  • 作為Web服務(wù)器,Nginx處理靜態(tài)文件、索引文件,自動(dòng)索引的效率非常高

  • 作為反向代理服務(wù)器,Nginx可以實(shí)現(xiàn)反向代理加速,提高網(wǎng)站運(yùn)行速度

  • 作為負(fù)載均衡服務(wù)器,Nginx既可以在內(nèi)部直接支持Rails和PHP,也可以支持HTTP代理服務(wù)器對(duì)外進(jìn)行服務(wù),同時(shí)還支持簡(jiǎn)單的容錯(cuò)和利用算法進(jìn)行負(fù)載均衡

  • Nginx是專門為性能優(yōu)化而開發(fā)的,非常注重效率,Nginx在官方測(cè)試的結(jié)果中,能夠支持五萬(wàn)個(gè)并行連接,而在實(shí)際的運(yùn)作中,可以支持二萬(wàn)至四萬(wàn)個(gè)并行鏈接

  • 在高可用性方面,Nginx支持熱部署,啟動(dòng)速度特別迅速,因此可以在不間斷服務(wù)的情況下,對(duì)軟件版本或者配置進(jìn)行升級(jí)

nginx如何配置?

Nginx的配置文件默認(rèn)存放路徑是etc/nginx/nginx.conf,可以在Nginx啟動(dòng)時(shí)添加參數(shù)–conf-path=PATH來(lái)更改nginx.conf文件的存放路徑。nginx.conf中的配置信息主要包含以下五個(gè)部分:

  • main(全局設(shè)置):主要是包括Nginx工作進(jìn)程,日志的配置以及server,location中一些共用的配置

  • events(連接設(shè)置):主要包括Nginx連接信息的配置

  • server(主機(jī)設(shè)置):主要是包括主機(jī)名稱,Ip,路徑解析,http請(qǐng)求頭設(shè)置,反向代理等配置

  • upstream(上游服務(wù)器設(shè)置):主要為反向代理服務(wù)器信息、負(fù)載均衡等相關(guān)配置

  • location(URL匹配):特定URL的匹配設(shè)置

以上每部分包含若干個(gè)條指令,他們之間的關(guān)系是:server繼承main,location繼承server,main部分設(shè)置的指令將影響其它所有部分的設(shè)置,server部分的設(shè)置將影響到location部分的設(shè)置。upstream既不會(huì)繼承指令也不會(huì)被繼承,它有自己的特殊指令,不需要在其他地方的應(yīng)用。

nginx中l(wèi)ocation部分url如何匹配?

location主要是匹配url中除去server_name(主機(jī)名)后的部分,其中關(guān)于url的匹配規(guī)則有以下幾種:

  • 精確匹配:以“=”開頭表示精確匹配

  • 開頭匹配:^~ 表示uri以某個(gè)常規(guī)字符串開頭,不是正則匹配

  • 區(qū)分大小寫的正則匹配:~開頭表示區(qū)分大小寫的正則匹配

  • 不區(qū)分大小寫的正則匹配:~* 開頭表示不區(qū)分大小寫的正則匹配

  • 通用匹配:匹配url的前面部分

對(duì)于上述五類匹配,它們之間的匹配順序和優(yōu)先級(jí)關(guān)系如下:

  • 不同類型之間匹配和location的順序無(wú)關(guān),只和優(yōu)先級(jí)有關(guān),各種匹配規(guī)則的優(yōu)先級(jí)關(guān)系是: [精確匹配] > [開頭匹配] > [正則匹配] > [通用匹配];

  • 除了通用匹配,開頭匹配以外,相同類型的匹配優(yōu)先級(jí)只和順序有關(guān),排在前面的優(yōu)先匹配;

  • 通用匹配和開頭匹配的優(yōu)先級(jí)與通用匹配的最長(zhǎng)字符串有關(guān),通用字符串越長(zhǎng),匹配優(yōu)先級(jí)越高;

下面是我設(shè)置的幾個(gè)location,并測(cè)試和驗(yàn)證以上匹配規(guī)則:

server {

listen 80 default_server;

server_name dev.zdp.com;

# 通用匹配 [匹配規(guī)則0]

location /

{

return 302 https://dashboard.youdata.com;

}

# 通用匹配 [匹配規(guī)則1]

location /hello

{

return 302 https://dashboard.youdata.com;

}

# 通用匹配 [匹配規(guī)則2]

location /hello/no

{

return 302 https://dev.youdata.com;

}

# 不區(qū)分大小寫的正則匹配 [匹配規(guī)則3]

location ~* /hello/y[a-e][a-z][1-9]

{

return 302 https://test.youdata.com;

}

# 區(qū)分大小寫的正則匹配 [匹配規(guī)則4]

location ~ /hello/y[A-E][E-Z][1-9]

{

return 302 https://pre.youdata.com;

}

# 區(qū)分大小寫的正則匹配 [匹配規(guī)則5]

location ~ /hello/y[a-e][e-z]

{

return 302 https://pre163.youdata.com;

}

# 開頭匹配 [匹配規(guī)則6]

location ^~ /hello/yes

{

return 302 https://youdata.netease.com;

}

# 開頭匹配 [匹配規(guī)則7]

location ^~ /hello/yesno

{

return 302 https://youdata.163.com;

}

# 精確匹配 [匹配規(guī)則8]

location = /hello

{

return 302 https://www.baidu.com;

}

}

location用例測(cè)試:

  • “http://dev.zdp.com/hello” ——- 精確匹配優(yōu)先,命中[匹配規(guī)則8]

  • “http://dev.zdp.com/hello/yesnoOk” ——- 開頭匹配優(yōu)先,開頭匹配同時(shí)滿足條件時(shí),長(zhǎng)優(yōu)先,命中[匹配規(guī)則7]

  • “http://dev.zdp.com/hello/yesOk” ——- 開頭匹配優(yōu)先,命中[匹配規(guī)則6]

  • “http://dev.zdp.com/hello/yaz” ——- 正則匹配,命中[匹配規(guī)則5]

  • “http://dev.zdp.com/hello/yAZ3” ——- 正則匹配,按照l(shuí)ocation順序匹配,命中[匹配規(guī)則3]

  • “http://dev.zdp.com/hello/no” ——- 通用匹配,按照匹配長(zhǎng)度優(yōu)先,命中[匹配規(guī)則2]

  • “http://dev.zdp.com/hello/Ok” ——- 通用匹配,命中[匹配規(guī)則1]

  • “http://dev.zdp.com/everyone” ——- 通用匹配,所有其它匹配不滿足時(shí),命中[匹配規(guī)則0]

nginx中rewrite命令如何重寫url?

rewrite功能就是,使用nginx提供的全局變量或自己設(shè)置的變量,結(jié)合正則表達(dá)式和標(biāo)志位實(shí)現(xiàn)url重寫以及重定向。rewrite只能放在server{},location{}中,并且只能對(duì)域名后邊的除去傳遞的參數(shù)外的字符串起作用,例如:

http://dev.zdp.com/a/we/index.php?id=1&u=str => rewrite只能對(duì)/a/we/index.php部分重寫

server {

rewrite 規(guī)則 定向路徑 重寫flag;

}

location {

rewrite 規(guī)則 定向路徑 重寫flag;

}

rewrite的執(zhí)行順序

執(zhí)行server塊的rewrite指令;執(zhí)行l(wèi)ocation匹配;執(zhí)行選定的location中的rewrite指令,如果location中rewrite指令沒(méi)有break的flag,則會(huì)根據(jù)當(dāng)前rewrite路徑重新匹配location;如果其中某步URI被重寫,則重新循環(huán)執(zhí)行1-3,直到找到真實(shí)存在的文件,循環(huán)最多不會(huì)超過(guò)10次;

rewrite的flag標(biāo)志

last: 停止處理當(dāng)前l(fā)ocation中的ngxhttprewritemodule指令集(rewrite,return等),并開始重新搜索與更改后的URI相匹配的locationbreak : 停止處理當(dāng)前l(fā)ocation中的ngxhttprewritemodule指令集(rewrite,return等),不會(huì)重新搜索redirect : 返回302臨時(shí)重定向,地址欄會(huì)顯示跳轉(zhuǎn)后的地址permanent : 返回301永久重定向,地址欄會(huì)顯示跳轉(zhuǎn)后的地址default: 默認(rèn)標(biāo)志,繼續(xù)會(huì)處理當(dāng)前l(fā)ocation中的ngxhttprewrite_module指令集(rewrite,return等),如果沒(méi)有return,會(huì)開始重新搜索與更改后的URI相匹配的location

nginx中if判斷如何使用?

只是上面的簡(jiǎn)單重寫很多時(shí)候滿足不了需求,比如需要判斷當(dāng)文件不存在時(shí)、當(dāng)路徑包含xx時(shí)等條件,則需要用到if

Nginx中if語(yǔ)法為:if(condition){…},對(duì)給定的條件condition進(jìn)行判斷。如果為真,大括號(hào)內(nèi)命令將被執(zhí)行

if判斷規(guī)則

  • 當(dāng)表達(dá)式只是一個(gè)變量時(shí),如果值為空或任何以0開頭的字符串都會(huì)當(dāng)做false

  • 直接比較變量和內(nèi)容時(shí),使用=或!=

  • ~正則表達(dá)式匹配,~*不區(qū)分大小寫的匹配,!~區(qū)分大小寫的正則表達(dá)式不匹配,滿足條件返回true

  • -f和!-f用來(lái)判斷是否存在文件

  • -d和!-d用來(lái)判斷是否存在目錄

  • -e和!-e用來(lái)判斷是否存在文件或目錄

  • -x和!-x用來(lái)判斷文件是否可執(zhí)行

if使用舉例

if條件中一般會(huì)使用到一些變量,這些變量有些是用戶定義的,有些是系統(tǒng)本身存在的,關(guān)于變量相關(guān)內(nèi)容請(qǐng)看下文[Nginx中如何使用變量?]

server {

if ($http_user_agent ~ MSIE) {

rewrite ^(.*)$ /msie/$1 break;

}

# 如果UA包含"MSIE",rewrite請(qǐng)求到/msid/目錄下

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {

set $id $1;

}

# 如果cookie匹配正則,設(shè)置變量$id等于正則引用部分

if ($request_method = POST) {

return 405;

}

# 如果提交方法為POST,則返回狀態(tài)405(Method not allowed)。return不能返回301,302

if ($slow) {

limit_rate 10k;

}

# 限速,$slow可以通過(guò) set 指令設(shè)置

if (!-f $request_filename){

break;

proxy_pass http://127.0.0.1;

}

# 如果請(qǐng)求的文件名不存在,則反向代理到localhost 。這里的break也是停止rewrite檢查

if ($args ~ post=140){

rewrite ^ http://example.com/ permanent;

}

# 如果query string中包含"post=140",永久重定向到example.com

location ~* .(gif|jpg|png|swf|flv)$ {

valid_referers none blocked www.jefflei.com www.leizhenfang.com;

if ($invalid_referer) {

return 404;

}

# 防盜鏈

}

}

nginx變量如何使用?

Nginx也可以使用變量,變量分為系統(tǒng)變量和自定義變量

變量特點(diǎn)

  • Nginx變量的創(chuàng)建只能發(fā)生在Nginx配置加載的時(shí)候,或者說(shuō)Nginx啟動(dòng)的時(shí)候;

  • Nginx變量的賦值操作則只會(huì)發(fā)生在請(qǐng)求實(shí)際處理的時(shí)候;

  • 每個(gè)請(qǐng)求都有所有變量的獨(dú)立副本,或者說(shuō)都有各變量用來(lái)存放值的容器的獨(dú)立副本,它們之間的值彼此互不干擾;

自定義變量

自定義變量通過(guò)set命令初始化和賦值,變量名前需要加$符號(hào)作為區(qū)分

# 設(shè)置變量$a = "helloworld";

set $a hello world;

# 設(shè)置變量$b = "helloworld, helloworld";

set $b "$a, $a";

nginx中一些常用的命令

  • nginx -t 檢查配置是否可用

  • nginx -s reload 重啟nginx

總結(jié)

以上是生活随笔為你收集整理的nginx location 匹配 多个规则_你需要知道的Nginx配置二三事的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。