成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Nginx 配置學(xué)習(xí)筆記

wuyumin / 1319人閱讀

摘要:上面的代碼中定義了一個(gè)名為的負(fù)載均衡器,里面有三個(gè)后端服務(wù),他們是按的方式進(jìn)行輪詢(xún)的。在模塊中,可以設(shè)置后端服務(wù)器的信息,同時(shí)還可以設(shè)定每個(gè)后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)。常用的狀態(tài)有表示當(dāng)前的暫時(shí)不參與負(fù)載均衡。

最近在學(xué)習(xí)如何對(duì) Nginx 進(jìn)行配置,故而對(duì) Nginx 的配置文件的結(jié)構(gòu)功能有了一些新的認(rèn)識(shí)。剛開(kāi)始接觸 Nginx 時(shí),感覺(jué)它的配置十分高深、難以理解,需要配置什么功能都是網(wǎng)上搜索現(xiàn)成的代碼,復(fù)制粘貼,重啟服務(wù)器。雖然也能夠按照預(yù)期來(lái)工作,但是這種做法只是知其然而不知其所以然,不可取。

俗話(huà)說(shuō),好記性不如爛筆頭。現(xiàn)在雖然能力理解看懂,但是過(guò)短時(shí)間之后還能不能記得那就得兩說(shuō)了。

以下是筆記內(nèi)容。

注意:這是針對(duì) Linux 平臺(tái)的筆記,有些內(nèi)容可能對(duì)其他平臺(tái)并不適用!

啟動(dòng)、停止、重載配置

在安裝完 Nginx 程序之后,執(zhí)行 nginx 可執(zhí)行文件即可啟動(dòng) Nginx 服務(wù)了。一旦啟動(dòng)了服務(wù)之后,我們就可以使用那可執(zhí)行文件帶 -s 參數(shù)來(lái)控制 Nginx 服務(wù)器了,它的語(yǔ)法如下:

nginx -s signal

signal 是以下的信號(hào)之一:

stop 快速停止服務(wù)

quit 優(yōu)雅地停止服務(wù)

reload 重新加載配置文件

reopen 重新打開(kāi)日記文件

例如,重新加載配置文件的命令如下:

nginx -s reload

Nginx 的主進(jìn)程接收到重載配置文件的信號(hào)之后,它會(huì)對(duì)新配置文件進(jìn)行語(yǔ)法檢查并嘗試應(yīng)用所提供的配置文件。如果成功的話(huà),主進(jìn)程會(huì)啟動(dòng)新的工作者進(jìn)程,并且發(fā)送信號(hào)給舊的工作者進(jìn)程,要求他們關(guān)閉。否則的話(huà),主進(jìn)程會(huì)將更新回滾,然后繼續(xù)以舊的配置文件運(yùn)行。

配置文件的模塊結(jié)構(gòu)

根據(jù)使用的平臺(tái)不同,你的配置文件的路徑也會(huì)不同,大部分情況下它會(huì)在 /etc/nginx/nginx.conf 。如果不在這里,它還可能會(huì)在 /usr/local/nginx/conf/nginx.conf/usr/local/etc/nginx/nginx.conf

Nginx 的配置文件是按配置塊來(lái)組織的,從結(jié)構(gòu)看起來(lái)一目了然。最外一層是 main 配置塊,它是一個(gè)全局配置的區(qū)域;main 配置塊下面有 events 和 http 配置塊;http 下面又有 upstream 和 server 配置塊;server 里有 location 等配置塊。

從整體結(jié)構(gòu)上來(lái)看,它基本上是這個(gè)樣子:

# main
....
events {
  ....
}
http {
    ....
    upstream myproject {
        .....
    }
    server  {
        ....
        location {
            ....
            if (test_condition) {
                ......
            }
        }
    }
    server {
        ....
        location {
            ....
        }
    }
    ....
}

常用的基本上就這七大塊了:

main 全局配置塊

events 可以配置 Nginx 的工作模式、工作者進(jìn)程連接數(shù)

http http 的相關(guān)配置塊

server 虛擬主機(jī)配置塊

upstream 負(fù)載均衡配置塊

location RUI 匹配快

if 條件判斷塊

各個(gè)模塊的功能、常用指令
main 配置塊

在這里配置全局的配置信息,常用的有如下這些:

user nobody nobody;
worker_processes 2;
error_log  /usr/local/var/log/nginx/error.log  notice;
pid        /usr/local/var/run/nginx/nginx.pid;
worker_rlimit_nofile 1024;

user 配置 Nginx 工作者進(jìn)程的運(yùn)行用戶(hù),默認(rèn)有 nobody 賬號(hào)運(yùn)行

woker_process 工作者進(jìn)程的數(shù)量
它的最優(yōu)值取決于多種因素,比如 CPU 的核數(shù),保存數(shù)據(jù)的硬盤(pán)驅(qū)動(dòng)的個(gè)數(shù)等等。一般情況下,可以將它設(shè)置為 CPU 的核數(shù)。

error_log 錯(cuò)誤日記文件配置
第一個(gè)參數(shù)是錯(cuò)誤日記的文件,第二個(gè)參數(shù)決定了日記的級(jí)別,可選的值有 debug, info, notice, warn, error, crit, alert 或者 emerg

pid 定義一個(gè)保存主進(jìn)程的進(jìn)程 ID 的文件

worker_rlimit_nofile 這是工作者進(jìn)程的最大文件打開(kāi)數(shù)目

events 配置塊

用指定 Nginx 的工作模式和工作模式及連接數(shù)上限,

events {
    use kqueue; #mac平臺(tái)
    worker_connections  1024;
}

use 指定工作者進(jìn)程的連接方法
一般情況下是不需要設(shè)置這個(gè)的,因?yàn)?Nginx 會(huì)默認(rèn)會(huì)選擇最高效的方法

worker_connections 設(shè)置每個(gè)工作進(jìn)程能夠同時(shí)打開(kāi)的最大連接數(shù)
需要注意的是:這個(gè)連接數(shù)是指所有的連接數(shù)(包括與代理服務(wù)器的連接數(shù),還有其它的連接數(shù)),還有一點(diǎn)就是,最大連接數(shù)(worker_connections)的值不能超過(guò)當(dāng)前工作者進(jìn)程能夠打開(kāi)的最大文件數(shù)目(worker_rlimit_nofile)的限制。

還有一個(gè)關(guān)于最大客戶(hù)端數(shù)目的計(jì)算問(wèn)題,有些困擾這我。當(dāng)作為 HTTP 服務(wù)器時(shí),Max_clients=worker_processesworker_connections;當(dāng)作為代理服務(wù)器是,Max_clients=worker_processesworker_connections/4,這個(gè)為什么是除以 4 ,而不是 2 呢?

http 配置塊

Nginx 的主要功能模塊都是在這里配置的,可以在這里配置 Nginx 作為 HTTP 服務(wù)器,可以在這里配置 Nginx 成為反向代理,也可以在這配置 Nginx 成為負(fù)載均衡器??梢哉f(shuō),這個(gè)配置塊里的配置內(nèi)容至關(guān)重要!

http{
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
        "$status $body_bytes_sent "$http_referer" "
        ""$http_user_agent" "$http_x_forwarded_for"";
    access_log  /usr/local/var/log/nginx/access.log  main;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  10;
    upstream myproject {
        .....
    }
    server {
        ....
    }
}

include 將其它的文件包含到配置文件中

default_type 定義一個(gè)相應(yīng)的默認(rèn) MIME 類(lèi)型

log_format 定義日記的格式

access_log 設(shè)置訪(fǎng)問(wèn)日記的路徑、格式

sendfile 啟用或者禁用 sendfile()

tcp_nopush 當(dāng) sendfile 啟用時(shí),該指令才會(huì)生效。
它的作用是啟用或者關(guān)閉在 freeDSB 中使用 TCP_NOPUSH socket 選項(xiàng),或者在 linux 中使用 TCP_CORK socket 選項(xiàng)

tcp_nodelay 啟用或者禁用 TCP_NODELAY 選項(xiàng)
只有當(dāng)一個(gè)連接是 keep-alive 狀態(tài)時(shí),該指令才會(huì)生效

keepalive_timeout 設(shè)置 keep-alive 連接在服務(wù)端保持打開(kāi)的時(shí)間
第一個(gè)參數(shù)表示鏈接打開(kāi)的時(shí)間,0 表示關(guān)閉 keep-alive 在客戶(hù)端的鏈接;可選的第二個(gè)參數(shù)設(shè)置響應(yīng)頭部的 “Keep-Alive: timeout=time”。這兩個(gè)參數(shù)可以不同

upstream 配置塊

upstream 配置塊用來(lái)定義一組服務(wù),里面的服務(wù)可以監(jiān)聽(tīng)不同的端口。另外,服務(wù)也可以將 TCP 和 UNIX-domain sockets 進(jìn)行混合使用。

upstream backend {
    server backend1.example.com weight=5;
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

    server backup1.example.com  backup;
}

上面的代碼中定義了一個(gè)名為 backend 的負(fù)載均衡器,里面有三個(gè)后端服務(wù),他們是按 weight 的方式進(jìn)行輪詢(xún)的。在每七個(gè)請(qǐng)求中,其中的五個(gè)會(huì)分配到 backend1.example.com 服務(wù)器,另外的兩個(gè)請(qǐng)求分別分配給另外兩個(gè)服務(wù)器。

最后還定義了一個(gè)作為備份的服務(wù)器,只有當(dāng)所有的非備份服務(wù)器都掛掉之后才會(huì)請(qǐng)求備份服務(wù)器,所以他的負(fù)載時(shí)最輕的。

在HTTP Upstream模塊中,可以設(shè)置后端服務(wù)器的 socket 信息,同時(shí)還可以設(shè)定每個(gè)后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)。常用的狀態(tài)有:

down 表示當(dāng)前的 server 暫時(shí)不參與負(fù)載均衡。

backup 預(yù)留的備份機(jī)器。

當(dāng)其他所有的非 backup 機(jī)器出現(xiàn)故障或者忙的時(shí)候,才會(huì)請(qǐng)求 backup 機(jī)器,因此這臺(tái)機(jī)器的壓力最輕。

max_fails 允許請(qǐng)求失敗的次數(shù),默認(rèn)為1。

當(dāng)超過(guò)最大次數(shù)時(shí),返回 proxy_next_upstream  模塊定義的錯(cuò)誤。

fail_timeout,在經(jīng)歷了 max_fails 次失敗后,暫停服務(wù)的時(shí)間。

max_fails 可以和 fail_timeout 一起使用。

Nginx 支持四種負(fù)載均衡的方法,它們分別是 Round-robin 、least_conn、ip_hash 和 hash 。

Round-robin 這是根據(jù)權(quán)重的輪詢(xún)方式,Nginx 默認(rèn)使用這種方法。

upstream backend {
   server backend1.example.com weight=3;
   server backend2.example.com;
}

least_conn 具有最少活躍連接數(shù)的服務(wù)器將會(huì)被發(fā)送請(qǐng)求。

upstream backend {
    least_conn;

    server backend1.example.com;
    server backend2.example.com;
}

ip_hash 根據(jù)客戶(hù)端的 ip 地址來(lái)決定將請(qǐng)求發(fā)送給哪個(gè)服務(wù)器。

upstream backend {
    ip_hash;

    server backend1.example.com;
    server backend2.example.com;
}

hash 根據(jù)用戶(hù)自定義的 hash 值來(lái)決定將請(qǐng)求發(fā)送到哪個(gè)服務(wù)器

upstream backend {
    hash $request_uri consistent;

    server backend1.example.com;
    server backend2.example.com;
}
server 配置塊

server 配置塊是用來(lái)配置虛擬主機(jī)的信息的,可以在這里配置虛擬主機(jī)監(jiān)聽(tīng)的端口,域名,URL 重定向等。

server {
        listen       8080;
        server_name  localhost 192.168.12.10 www.yangyi.com;
        # 全局定義,如果都是這一個(gè)目錄,這樣定義最簡(jiǎn)單。
        root   /var/www;
        index  index.php index.html index.htm; 
        charset utf-8;
        access_log  usr/local/var/log/host.access.log  main;
        aerror_log  usr/local/var/log/host.error.log  error;
        ....
}

listen 用來(lái)設(shè)置虛擬主機(jī)要監(jiān)聽(tīng)的端口

server_name 設(shè)置虛擬主機(jī)的域名,多個(gè)域名使用空格隔開(kāi)

root 設(shè)置虛擬主機(jī)目錄

index 定義目錄中沒(méi)有指定文件時(shí)的默認(rèn)訪(fǎng)問(wèn)的文件。
服務(wù)器會(huì)根據(jù)指定的順序來(lái)檢查所指定的文件,文件名可以包含變量,最好一個(gè)可以指定絕對(duì)路徑,例如:

index index.$geo.html index.0.html /index.html;

charset 指定特定的字符集到響應(yīng)頭部的 “Content-Type” 首部。

access_log 設(shè)置訪(fǎng)問(wèn)日記的路徑及格式。

error_log 設(shè)置錯(cuò)誤日記的路徑及格式。

location 配置塊

在這里可以針對(duì)指定的請(qǐng)求 URI 來(lái)設(shè)置配置。

location / {
    root   /var/www/;
    index  index.php index.html index.htm;
}

root 和 index 指令的作用上面已經(jīng)提到過(guò)了,寫(xiě)在這里和寫(xiě)在 server 里面的區(qū)別是,前者是針對(duì)指定的 URI 生效,后者是全局生效的。

一個(gè) location 可以匹配字符串前綴,也可以匹配正則表達(dá)式。正則表達(dá)式會(huì)以 “~*”(大小寫(xiě)不敏感) 修飾符開(kāi)始,或者以 “~”(大小寫(xiě)敏感) 修飾符開(kāi)始。

為了尋找一個(gè)與當(dāng)前請(qǐng)求匹配的 location,Nginx 首先檢查那些以前綴字符串定義的 location,然后選中其中匹配的前綴最長(zhǎng)的 location 并將其記住。

接著再按照配置文件中定義的順序來(lái)檢查那些以正則表達(dá)式定義的 location,一旦查找到匹配的正則表達(dá)式就馬上停止查找,其相應(yīng)的配置將會(huì)被使用。

如果沒(méi)有找到與之對(duì)應(yīng)的正則表達(dá)式,那么之前匹配的前綴字符串 location 里面的配置將會(huì)被使用。

當(dāng)然,可以使用 “=” 修飾符來(lái)定義一個(gè)對(duì) URI 或者 location 的精確的匹配,Nginx 一旦找到一個(gè)精確匹配,檢查則立馬結(jié)束。舉個(gè)例子,假如 "/" 經(jīng)常被請(qǐng)求,那么定義一個(gè) "location = /" 會(huì)加速這些請(qǐng)求的處理,因?yàn)樵诘谝粋€(gè)比較之后就立馬停止了搜索。

如果最長(zhǎng)的前綴匹配包含有 "^~" 修飾符,那么 Nginx 將不會(huì)再檢查正則表達(dá)式。

可以通過(guò)下面幾個(gè)小例子來(lái)理解上面的內(nèi)容:

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* .(gif|jpg|jpeg)$ {
    [ configuration E ]
}

"/" 請(qǐng)求會(huì)匹配配置 A
"/index.html" 會(huì)匹配配置 B
"/documents/document.html" 會(huì)匹配配置 C
"/images/1.gif" 請(qǐng)求會(huì)匹配配置 D
"/documents/1.jpg" 請(qǐng)求將會(huì)匹配配置 E。

if 配置塊

對(duì)特定的條件進(jìn)行判斷,如果條件為真則執(zhí)行配置塊里面的配置項(xiàng)。

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

如果該請(qǐng)求是來(lái)自 IE 瀏覽器的則進(jìn)行重定向到指定的文件夾。

rewrite 將 URI 重定向到另一個(gè) URI

if 指令將會(huì)對(duì)特定的條件進(jìn)行判斷,如果條件為真,大括號(hào)里面的指令將會(huì)執(zhí)行,if 指令里面的配置將會(huì)分配到請(qǐng)求中。if 指令里面的配置將會(huì)繼承上一級(jí)的配置。

條件可以是以下列舉的任意一項(xiàng):

一個(gè)變量名,如果變量的值是空或者 "0" 則為假。

使用 "=" 或者 "!=" 進(jìn)行比較的變量

使用 "~*"(大小寫(xiě)不敏感) 或者 "~"(大小寫(xiě)敏感)的正則表達(dá)式進(jìn)行匹配的變量

使用 "-f" 和 "!-f" 運(yùn)算符來(lái)檢測(cè)文件是否存在

使用 "-d" 和 "!-d" 運(yùn)算符來(lái)檢測(cè)目錄是否存在

使用 "-e" 和 "!-e" 運(yùn)算符來(lái)檢測(cè)文件、目錄或者符號(hào)鏈接是否存在

使用 "-x" 和 "!-x" 運(yùn)算符來(lái)檢測(cè)文件是否可執(zhí)行

例子:

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

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

if ($request_method = POST) {
    return 405;
}

if ($slow) {
    limit_rate 10k;
}

if ($invalid_referer) {
    return 403;
}
一些不常用的配置塊

split_clients

該配置塊可以將服務(wù)器接收到的請(qǐng)求根據(jù)百分比進(jìn)行劃分成幾個(gè)類(lèi)別。因此可以將不同的內(nèi)容提供給不同的客戶(hù)端來(lái)進(jìn)行 A/B 測(cè)試。

map

該配置塊可以根據(jù)一個(gè)變量的值來(lái)設(shè)置另一個(gè)變量的值。

geo

該配置快可以用來(lái)配置一個(gè)映射。

types

這也是用來(lái)配置映射的。

內(nèi)嵌的變量

$args 這個(gè)變量等于請(qǐng)求行中的參數(shù),同 $query_string

$content_length 請(qǐng)求頭中的 Content-length 字段

$content_type 請(qǐng)求頭中的 Content-Type 字段

$document_root 當(dāng)前請(qǐng)求在root指令中指定的值

$host 請(qǐng)求主機(jī)頭字段,否則為服務(wù)器名稱(chēng)

$http_user_agent 客戶(hù)端 agent 信息

$http_cookie 客戶(hù)端 cookie 信息

$limit_rate 這個(gè)變量可以限制連接速率

$request_method 客戶(hù)端請(qǐng)求的動(dòng)作,通常為 GET 或 POST

$remote_addr 客戶(hù)端的IP地址

$remote_port 客戶(hù)端的端口

$remote_user 已經(jīng)經(jīng)過(guò) Auth Basic Module 驗(yàn)證的用戶(hù)名

$request_filename 當(dāng)前請(qǐng)求的文件路徑,由root或alias指令與URI請(qǐng)求生成

$scheme HTTP方法(如http,https)。

$server_protocol 請(qǐng)求使用的協(xié)議,通常是 HTTP/1.0 或 HTTP/1.1。

$server_addr 服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值

$server_name 服務(wù)器名稱(chēng)

$server_port 請(qǐng)求到達(dá)服務(wù)器的端口號(hào)

$request_uri 包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名,如:"/foo/bar.php?arg=baz"

$uri 不帶請(qǐng)求參數(shù)的當(dāng)前 URI,$uri 不包含主機(jī)名,如 "/foo/bar.html"

$document_uri 與 $uri 相同

參考鏈接

http://nginx.org/en/docs/
https://www.zybuluo.com/phper/note/89391
https://www.digitalocean.com/community/tutorials/understanding-the-nginx-configuration-file-structure-and-configuration-contexts

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39650.html

相關(guān)文章

  • 安裝配置gunicorn和NGINX學(xué)習(xí)筆記

    摘要:博客寫(xiě)得差不多了,打算部署到云上因?yàn)樗俣鹊年P(guān)系,不打算部署在上,于是申請(qǐng)了阿里云,環(huán)境是上篇文章提到的位安裝和配置好和,又稍微了解點(diǎn)服務(wù)器的知識(shí)后,打算按這里的方法進(jìn)行部署,思路是用當(dāng)應(yīng)用容器,當(dāng)反向代理安裝安裝非常簡(jiǎn)單,一條命令就解決了測(cè) 博客寫(xiě)得差不多了,打算部署到云上因?yàn)樗俣鹊年P(guān)系,不打算部署在AWS上,于是申請(qǐng)了阿里云,環(huán)境是上篇文章提到的CentOS 7 64位安裝和配置好P...

    Ali_ 評(píng)論0 收藏0
  • springMvc學(xué)習(xí)筆記(2)

    摘要:筆記這周學(xué)習(xí)安裝和配置和,為測(cè)試做準(zhǔn)備。該軟件由創(chuàng)建,并于年首次公開(kāi)發(fā)布。同名公司成立于年,以提供支持。從年月開(kāi)始,的開(kāi)發(fā)由贊助,而年月至年月期間,其開(kāi)發(fā)由贊助。最后發(fā)現(xiàn)是因?yàn)橹械闹械膽?yīng)該為大寫(xiě)將其改為及解決了此問(wèn)題。 筆記 這周學(xué)習(xí)安裝和配置nginx和redis,為測(cè)試做準(zhǔn)備。showImg(https://segmentfault.com/img/bVbpdYF?w=660&h=...

    Shonim 評(píng)論0 收藏0
  • CentOS學(xué)習(xí)筆記 - 12. Nginx搭建Centos7.5遠(yuǎn)程repo

    摘要:搭建服務(wù)器因?yàn)檫@次我們實(shí)際上有在線(xiàn)安裝和離線(xiàn)安裝的不同的需求。參數(shù)可選需要重啟生效。改為后,顯示出文件的大概大小,單位是或者或者而默認(rèn)為,顯示的文件時(shí)間為時(shí)間。 Nginx搭建repo服務(wù)器 因?yàn)檫@次我們實(shí)際上有在線(xiàn)安裝和離線(xiàn)安裝的不同的需求。所以我們同時(shí)采用了兩種方法來(lái)安裝nginx。 1. 在線(xiàn)安裝nginx 安裝nginx對(duì)應(yīng)的源 rpm -Uvh http://nginx.or...

    chengtao1633 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Docker入門(mén)》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層??蛇x指定此鏡像啟動(dòng)時(shí)默認(rèn)執(zhí)行命令??蛇x用于指定需要暴露的網(wǎng)絡(luò)端口號(hào)。可選向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無(wú) 學(xué)習(xí)源碼:無(wú) 第一章:課程簡(jiǎn)介 1-1 課程介紹 Docke...

    CoorChice 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<