日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一直以為自己很懂Nginx,不就是配置一些負載一些路由嘛,直到這次需要自己進行調試部署時才發現依然存在好多概念不清的情況,比如location匹配的幾種優先級,rewrite 階段、access 階段以及 content 階段的運行順序

因為工作需要,這里主要總結我們常用的server,location模塊的一些信息

先來看一下nginx配置文件的大體分區

不會這些東東,不敢說你會nginx?

 

mian全局塊:

影響nginx全局的配置模塊,一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數等。

events模塊:

 events{
  use epoll;
  worker_connections      65536;
}

use epoll;use是個事件模塊指令,用來指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在linux平臺上,而kqueue用在BSD系統中。==對于Linux系統,epoll工作模式是首選。==在操作系統不支持這些高效模型時才使用select。

worker_connections 65536;每一個worker進程能并發處理(發起)的最大連接數(包含與客戶端或后端被代理服務器間等所有連接數)。nginx作為反向代理服務器,計算公式 最大連接數 = worker_processes * worker_connections/4,所以這里客戶端最大連接數是65536,這個可以增到到8192都沒關系,看情況而定,但不能超過后面的worker_rlimit_nofile。當nginx作為http服務器時,計算公式里面是除以2。進程的最大連接數受Linux系統進程的最大打開文件數限制,在執行操作系統命令ulimit -n 65536后worker_connections的設置才能生效。
http塊:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等。

下面進入重點模塊

server塊

Server塊: 一個server可以看作一個nginx的虛擬主機拷貝一份server段的文件如下

 upstream backend {
#    ip_hash;    #優先IP hash的規則    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}server {        listen       9033;             #虛擬機監聽的端口
        server_name  localhost;  #匹配的域名        root /data/htdocs/www;  #服務器默認的網站根目錄位置(html文件存放目錄)
        index index.html index.htm index.php;  #默認訪問的html名稱   一般在root定義的路徑下存放        location /ftpFile {   #匹配方式見下方            proxy_set_header Host $http_host;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header X-Forwarded-Proto $scheme;   #         alias   /home/migu_nginx/ftpdata;        }location /img/ {    alias /var/www/image/;     #alias會直接覆蓋上面的匹配內容/img,并替換成定義內容加上截取的后綴
}location /img/ {    root /var/www/image;   #root不會直接覆蓋上面的匹配內容/img,并替換成定義內容加上截取的后綴
}

location匹配規則:

語法規則: location [=||*|^~] /uri/ {… }首先匹配 =,其次匹配^~,其次是按文件中順序的正則匹配,最后是交給 /通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。

不會這些東東,不敢說你會nginx?

 


值得注意的是,有一種暫不能理解的情況,但確實存在

不會這些東東,不敢說你會nginx?

 

root和alias的區別

配置一:

location /img/ {
alias /var/www/image/;
}

#若按照上述配置的話,則訪問/img/目錄里面的文件時,ningx會自動去/var/www/image/目錄找文件
配置二:

location /img/ {
root /var/www/image;
}

#若按照這種配置的話,則訪問/img/目錄下的文件時,nginx會去/var/www/image/img/目錄下找文件。]比如訪問鏈接為 /img/a/a.html則回去/var/www/image/img/a目錄下找a.html

set指令
set $task_flag 0; 設置變量task_flag為0

反向代理 proxy_pass

如果一個請求過來了,比如 http:/127.0.0.1/mg/123/2.html,如果是下面這種配置,那最后的路由地址是http://apimigu/mg/123/2.html

location /mg{
proxy_pass http://apimigu;
}

若是下面帶/的這種配置,那路由后得到的地址是http://apimigu/123/2.html

location /mg{
proxy_pass http://apimigu/;
}

所以結尾有沒有/符號很重要
如果轉發的和后臺有多臺服務器,我們可以定義一個upstream 負載均衡

 location /mg{ 
 proxy_pass         http://apimigu/;
 }upstream apimigu{
#    ip_hash;    #優先IP hash的規則
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}
serve

rewrite語法

rewrite是實現URL重寫重定向的重要指令,他根據regex(正則表達式)來匹配內容跳轉到replacement,結尾是flag標記

配置語法:

 Syntax: rewrite regex replacement [flag];

rewrite的含義:該指令是實現URL重寫的指令。
regex的含義:用于匹配URI的正則表達式。
replacement:將regex正則匹配到的內容替換成 replacement。
flag: flag標記。
舉個小例子

 rewrite ^/(.*) http://www.baidu.com/ break;     # 匹配成功后跳轉到百度

找了份正則表達式符號含義表,以供查詢

不會這些東東,不敢說你會nginx?

 


rewrite 的最后一項參數flag的作用,一般有四個
值得一提的是,正常情況下nginx會收集所有的rewrite結果集,這和之后要介紹的nginx的三個級別有關

不會這些東東,不敢說你會nginx?

 


對于臨時重定向和永久重定向的區別,這里著重說明以下
首先客戶端瀏覽器的URL都會改變;

  1. 302重定向是暫時的重定向,搜索引擎會抓取新的內容而保留舊的地址。因為服務器返回302,所以搜索引擎會認為新的網址是暫時的;
  2. 301重定向是永久的重定向,搜索引擎會抓取新的內容的同時將舊的地址替換為重定向后的網址;

nginx中 $1,$2 的含義,有個博客講的很簡單易懂,這里直接拷貝

Nginx中,set $para $1,$1表示路徑中正則表達式匹配的第一個參數。
以下是一個示例,用以實驗$1,$2。

如:location ~/yxl/(.)/(.) {
set $para1 $1
set $para2 $2
content_by_lua_block {
ngx.say(ngx.var.para1)ngx.say(ngx.var.para2)}}

此時,若訪問路徑為localhost:8080/yxl/qwe/asd時,則瀏覽器會輸出

qwe
asd

nginx請求執行的幾大階段

詳細分的話一共有11個階段,這里著重介紹rewrite 、access 以及 content 三大階段

不按代碼順序執行,是按階段執行,順序如下:
先執行命中的所有rewrite層指令(下面的set),
再執行access,再執行content(下面的echo)

舉個例子語法:

 location  = / { 
       set $a 32;      
         echo $a;       
           set $a 64;   
           eho $a;
           }

因為是先收集結果,最后再content,所以最后兩個打印都是64

 

https://www.linuxprobe.com/hown-nginx-connect.html

分享到:
標簽:nginx
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定