国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

嘉興網(wǎng)站系統(tǒng)總部外鏈工廠

嘉興網(wǎng)站系統(tǒng)總部,外鏈工廠,北京網(wǎng)站建設(shè)公司擬,新媒體營銷方法有哪些1.下載地址 官網(wǎng)地址:NGINX - 免費(fèi)試用、軟件下載、產(chǎn)品定價 (nginx-cn.net) 我這邊選擇NGINX 開源版 nginx: download 2.nginx的基本配置 配置文件語法 配置文件組成:注釋行,指令塊配置項(xiàng)和一系列指令配置項(xiàng)組成。 單個指令組成&#x…

1.下載地址

官網(wǎng)地址:NGINX - 免費(fèi)試用、軟件下載、產(chǎn)品定價 (nginx-cn.net)

我這邊選擇NGINX 開源版 nginx: download

2.nginx的基本配置

配置文件語法

配置文件組成:注釋行,指令塊配置項(xiàng)和一系列指令配置項(xiàng)組成。

單個指令組成:配置項(xiàng)名稱和值參數(shù),值參數(shù)可以是一個或多個附加參數(shù),取決于解析該條指令的模塊。

# user nobody;
worker_processes 4;
events {worker_connections 1024;
}

塊配置項(xiàng)組成:一個塊配置頂名和一對大括號組成。 塊配置后面是否帶有參數(shù),如location /webstatic {},取決于解析該配置塊的模塊。

  • 指令配置項(xiàng)總是以分號結(jié)尾(;)。
  • 字符“#”表示改行是注釋行,nginx在讀取配置文件時將忽略的文本。

指令特點(diǎn)

  • 指令都有作用域,如上面例子,worker_connections 只能放在events區(qū)塊才有意義。
  • 配置塊能相互嵌套。在某些情況下不同配置塊能夠相互嵌套。如在http區(qū)段,可以聲明一個或多個server區(qū)段,server區(qū)段又可以插入一個或多個location區(qū)段。
  • 最后同樣重要的是配置的繼承。在一個區(qū)段中嵌套其他區(qū)段,那么被嵌套的區(qū)段會繼承其父區(qū)段的配置。在嵌套模塊中重新聲明指令會覆蓋該繼承。

指令值的單位

可以使用下面單位來指定配置文件所在上下文中指令值的單位。

  • k或K:千字節(jié)
  • m或M:兆字節(jié)
  • ms:Milliseconds(毫秒)
  • s:Seconds(秒)
  • m:Minutes(分鐘)
  • h:Hours(小時)
  • d:Days(天)
  • w:Weeks(星期)
  • M:Months(月)
  • y:Years(年)

字符串值

注意:如果指令值中包含空格、分號或者是大括號等特殊字符,需要使用單引號或雙引號將其括起。

nginx基本模塊

nginx是由一系列模塊組成的,大致可以分為核心模塊、Http核心模塊和其他模塊。其中核心模塊在編譯時不能被禁用。核心模塊包含main模塊、events模塊和include包含指令

main模塊重要指令

main模塊位于配置文件根部。提供如進(jìn)程管理和安全的能力。

daemon on; #啟用或禁用守護(hù)進(jìn)程模式。user  nobody; #worker進(jìn)程運(yùn)行的用戶和組,如果沒有提供則使用nginx的master進(jìn)程的用戶和用戶組。   
worker_processes  4;#定義worker進(jìn)程數(shù)量一般和cpu核數(shù)一致。#錯誤日志,這里的級別由debug,info,notice,warn,error和crit(debug記錄了全部日志,crit僅報告關(guān)鍵錯誤)
#作用域:main, http, mail, stream, server, location
error_log  logs/error.log error; 
pid        logs/nginx.pid; #存放nginx守護(hù)進(jìn)程的pid文件路徑。
log_not_found on; #開啟或禁用記錄404錯誤。
...
#除上面指令外還有worker_rlimit_core、worker_rlimit_nofile、worker_cpu_affinity、worker_priority等。

events模塊

事件模塊提供的指令可以用來配置網(wǎng)絡(luò)機(jī)制

accept_mutex:on; #默認(rèn)值on,啟用或禁用使用一個接受互斥鎖來打開套接字監(jiān)聽。   
use epoll; #指定nginx所使用的網(wǎng)絡(luò)事件模型,可選值有/dev/poll,epoll,kqueue等,通常不需要顯式指定它,默認(rèn)情況下nginx將使用最有效方法。
worker_connections 1024; #定義一個worker進(jìn)程能夠同時連接的數(shù)量。

configuration模塊

提供的include 指令能夠?qū)⑵渌募趎ginx配置文件中。在配置文件的任何地方均可插入該指令。注意如果沒有指定絕對路徑,那么文件路徑將和配置文件的目錄相關(guān)。

include /file/path.conf;
include sites/*.conf;

3.HTTP配置

HTTP 核心模塊是Nginx中最大的一個模塊,它包含了所有的基本的區(qū)段、指令和變量。

區(qū)段結(jié)構(gòu)

通過下面的例子,來認(rèn)識http模塊的區(qū)段結(jié)構(gòu)。

http {#在http區(qū)段中啟用gzip壓縮gzip on;server {server_name localhost;listen 80;location /downloads/ {#在此location區(qū)段禁用gzip壓縮gzip off;}}
}
  • http 區(qū)段位于配置文件的根部,在這個區(qū)段中允許定義HTTP模塊的指令和HTTP模塊的相關(guān)區(qū)段。
  • server區(qū)段用于聲明一個站點(diǎn),該區(qū)段只能用在http區(qū)段中。
  • location 區(qū)段應(yīng)用于網(wǎng)站特定的URI位置,該區(qū)段能夠用于server區(qū)段中,也能嵌套在其他location中。

模塊指令

在http/server/location三個層次的每個層次都可以插入指令,下面介紹的指令都主要由http模塊引入,對于每條指令都有它的使用環(huán)境。指令對應(yīng)的級別包括http塊、server塊、location塊,另外還有rewrite模塊的if塊。注意:一些指令不能用于某些級別。
下面介紹一些常見指令,如無特殊說明作用域?yàn)閔ttp,server,location。

套接字和主機(jī)配置指令

下表指令可以根據(jù)主機(jī)名或IP地址和端口的組合創(chuàng)建一個server區(qū)段。并通過一些指令來配置TCP套接字選項(xiàng),以便調(diào)整網(wǎng)絡(luò)設(shè)置。

  • listen:用于設(shè)置監(jiān)聽套接字使用的ip端口號。
    語法:listen [address][:port][其他選項(xiàng)]
    其他選項(xiàng):
    default:指定監(jiān)聽的默認(rèn)套接字,該server區(qū)段被用于默認(rèn)的網(wǎng)站,在該IP地址和端口上接受任何客戶端的請求。 ssl:指定的網(wǎng)站提供SSL服務(wù)。 其他選項(xiàng)依賴于bind和listen系統(tǒng)調(diào)用:backlog=num,rcvbuf=size,sndbuf=size,accept_filter=filter,deferred和bind。
    作用域:server
  • server_name:在server區(qū)段中指定一個或多個主機(jī)名。
    nginx收到http請求時,根據(jù)請求header中Host值與所有server區(qū)段比較,第一個與主機(jī)名匹配的server塊將被選中,否則如果沒有server區(qū)段與客戶端請求的主機(jī)名匹配,nginx會選擇第一個server區(qū)段,匹配監(jiān)聽參數(shù)(如listen *:80),另外具有default選項(xiàng)的listen會被優(yōu)先選擇。注意該指令接受通配符。
    作用域:server
server_name www.website.com website.com;
server_name *.website.com;
server_name *.website.*;
  • tcp_nodelay:開啟或關(guān)閉使用TCP_NODELAY套接字選項(xiàng),僅用于keep-alive連接。它禁用了Nagle 緩沖算法。
  • tcp_nopush
    開啟或禁用TCP_NOPUSH(FreeBSD)或TCP_CORK(Linux)的scoket選項(xiàng)。如果tcp_nopush開啟,則nginx將嘗試在整個tcp數(shù)據(jù)包中發(fā)送整個http響應(yīng)頭。
  • sendfile
    指定nginx是否調(diào)用sendfile系統(tǒng)函數(shù)來輸出文件,減少內(nèi)核空間和用戶空間的上下文切換。對于普通應(yīng)用設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。

另外還有sendfile_max_chunk、send_lowat等指令。

路徑和文檔

下表指令用來設(shè)置根目錄、主頁、錯誤頁等。

  • root:定義文檔的根目錄。
    作用域:http,server,location,if。
  • alias:location 指定uri路徑的別名,它不會改變root的值。
    作用域:location
location  /i/ {alias  /spool/w3/images/;
}
#例如:請求"/i/top.gif",將返回這個文件: "/spool/w3/images/top.gif"。
#正如你所看到的,uri中l(wèi)ocation后面的部分會追加到這個目錄后面,而location自身指定的uri路徑是"丟棄的"
  • error_page
    允許修改訪問URI所產(chǎn)生的HTTP相應(yīng)代碼,并選擇性地將它替換為其他代碼。
    作用域:http,server,location,if。
    語法:error_page code1 [code2 ...] [=replacement code] [=@block|URI]
    例如:
error_page 404 html/404/html;
error_page 500 502 503 504 html/5x.html;
#跳轉(zhuǎn)到命名的location區(qū)段。
error_page 404 @notfound; 
#在出現(xiàn)404錯誤時 ,內(nèi)部重定向到index.html,并且返回200 OK響應(yīng)碼。
error_page 404 =200/index/html;
  • index:定義默認(rèn)的頁面,如果請求中沒有指定文件名,nginx則使用默認(rèn)頁面提供服務(wù)。默認(rèn)值index.html。

語法:index file1 [file2...]

#例如: 
index index.php index.html index.htm;
  • try_files:試圖找到指定的文件,如果指定的這些文件都不是,就跳轉(zhuǎn)到命名location區(qū)段(最后一個參數(shù))或者指定的URI。
    作用域:location。
#例如
location / { try_files $uri $uri.php @proxy; 
} 
location @proxy {proxy_pass 127.0.0.1:8080;
}

客戶端請求

下面描述的是nginx處理客戶端請求機(jī)制,如配置keepalive、客戶端緩沖區(qū)設(shè)置等。

  • keepalive相關(guān)指令:keepalive_requests、keepalive_timeout、send_timeout。
  • 緩沖區(qū)相關(guān)指令:client_body_buffer_size、client_header_buffer_size、large_client_header_buffers等。
  • 其他客戶端指令:client_body_timeout、client_header_timeout、client_max_body_size、lingering_time、ligering_timeout、ignore_invalid_header等。

MIME類型

MIME類型會在HTTP響應(yīng)頭中Content-Type中發(fā)送,這個頭通常影響瀏覽器對文件的處理,如MIME類型是application/octet-stream,那么瀏覽器會下載該文件,而非顯示;如果MEMEE類型是text/plain,那么該文件在瀏覽器中會作為純文本而不用html解釋提供。

Nginx提供了兩個配置MINE類型的指令。分別是types和default_types;

http {include mime.types;location /downloads/ {#移除所有的MIME類型types {};default_type application/octet-stream.}
}

記錄相關(guān)

  • log_not_found:開啟或禁用404沒有找到的HTTP錯誤,如果日志中由于找不到favicon.ico或robots.txt而充滿404錯誤日志,則可以通過這個選項(xiàng)關(guān)閉掉。
    作用域:http,server,location。
    默認(rèn)值:on
  • log_subrequest:啟用或禁用記錄子請求(被內(nèi)部請求指令(如rewrite)或SSI請求觸發(fā)的請求)。
    作用域:http,server,location。
    默認(rèn)值:off

其他

除了以上介紹的指令外,還有限制和約束以及文件處理和緩存相關(guān)指令,需要時可查閱相關(guān)文檔。 但這里有必要介紹下internal指令。

#internal:該指令指定location區(qū)段只能用于內(nèi)部訪問。內(nèi)部重定向參考Rewrite模塊。
server {server_name *.website.com;location /admin/ {internal;}
}

模塊變量

HTTP核心模塊引入了大量的變量,可以使用這些變量應(yīng)用到配置文件中。nginx的變量分為請求頭變量、響應(yīng)頭變量和Nginx產(chǎn)生的各種變量。

客戶端請求頭變量

nginx允許你可以訪問客戶端請求頭,以$http_為前綴的格式訪問,如下表。

  • $http_host:HTTP頭中的Host值。
  • $http_referer:HTTP頭中的referer值。
  • $http_x_forward_for:HTTP頭中的X-Forward-For的值。 除此之外還有$http_user_agent、$http_via、$http_cookie等。

響應(yīng)頭變量

這類變量發(fā)生在響應(yīng)發(fā)送后,nginx允許你訪問客戶端響應(yīng)頭。以$send_http...為前綴,如下表。

  • $send_http_content_type:HTTP頭中的Content-Type的值。
  • $send_http_content_length:HTTP頭中的Content-Length的值。 除此之外還有$send_http_location、$send_http_connection等。

nginx產(chǎn)生的變量

  • $arg_XXX:訪問查詢字符串中的參數(shù)。
  • $args 所有結(jié)合在一起的查詢字符串,同$query_string。
  • $body_bytes_sent:在響應(yīng)頭中發(fā)送的字節(jié)數(shù)。
  • $content_length:相當(dāng)于HTTP頭中的Content-Length。
  • $content_type:相當(dāng)于HTTP頭中的Content-Type。
  • $cookie_XXX:允許訪問cookie數(shù)據(jù),這里XXX替換為具體參數(shù)。
  • $document_root:返回root指令的值。
  • $document_uri:返回當(dāng)前請求的uri,如果內(nèi)部重定向被執(zhí)行,將返回重定向后的uri。它與變量$uri相同。
  • $request_uri:原始請求的uri,在整個處理過程中保持不變(不像$document_uri/$uri)。
  • $host:相當(dāng)于HTTP請求頭中的Host,如果請求頭沒有Host,nginx會給這個變量賦一個值。
  • $hostname:返回服務(wù)器的系統(tǒng)名稱。
  • $is_args:如果$args變量為空,那么$is_args也為空。
  • $request_filename:返回當(dāng)前請求文件的絕對路徑。 除此之外還有$nginx_version、$hostname、$remote_addr、$request_body、$request_method、$server_name、$scheme等。

深入location區(qū)段

nginx location區(qū)段可以通過指定的模式與客戶端請求URI相匹配,location區(qū)段語法如下:

Syntax:	location [ = | ~ | ~* | ^~ ] uri { ... }location @name { ... }
Default:	—
Context:	server, location

注意:location只是對URI進(jìn)行匹配,不管查詢字符串參數(shù)。

修飾符描述

  • = :URI必須與指定模式精確匹配。這里的模式為簡單字符串,不可使用正則表達(dá)式。
# uri必須與/abcd精確匹配(優(yōu)先級最高),如:
# http://www.website.com/abcd 可用
location = /abcd {...
}
  • (無):URI必須以指定模式開始,不可使用正則表達(dá)式。
#uri必須與指定模式開始,以下uri可用:
# http://www.website.com/abcd
# http://www.website.com/abcd/
# http://www.website.com/abcde
location /abcd {...
}
  • ~:URI與指定的正則表達(dá)式模式匹配,區(qū)分大小寫。
#正則表達(dá)式^/abcd$,指定模式必須以/開始,后根abc,以d字符結(jié)尾。如:
http://website.com/abcd 可用
http://website.com/abcd?param1&param2 可用
location ~ ^/abcd$ {...
}
  • ~*:URI與指定正則表達(dá)式模式匹配,不區(qū)分大小寫。
  • ^~:URI以指定模式開始,如果模式匹配,則停止搜索其他模式,
  • @ 定義命名location區(qū)段。這些區(qū)段只能由內(nèi)部產(chǎn)生的請求訪問,如try_files或error_page。

修飾符優(yōu)先級

  1. =
  2. ^~
  3. ~或~*
  4. (無)

4.模塊配置

主要有關(guān)Rewrite模塊及可能會用到的其他模塊。

Rewrite模塊

nginx rewrite模塊使用Perl兼容正則表達(dá)式庫,在安裝nginx時需要預(yù)先安裝perl和perl-dev。

正則表達(dá)式

元字符

  • ^ :以^后跟的字符開始
  • $ :以$前的字符結(jié)尾
  • . :匹配任何字符
  • [ ] :組,匹配指定字符集合內(nèi)的任何字符。
  • [^ ] :否定組,匹配不包括在指定字符集內(nèi)的字符。
  • | :匹配符號“|”之前或之后的實(shí)體。
  • ( ) :分組,組成一組匹配的實(shí)體,常和“|”配合使用。
  • \ :對特殊字符進(jìn)行轉(zhuǎn)義。

量詞

使用量詞可以擴(kuò)展實(shí)體匹配次數(shù)。

  • *:0或多次
  • +:1或多次
  • ?:0或1次
  • {x}:x次
  • {x,}:至少x次
  • {x,y}:x到y(tǒng)次

捕獲

正則表達(dá)式最后一個功能是能夠捕獲自表達(dá)式,放在“( )”之間的任何文本,在被捕獲后都能用于后面的處理。 例如:

server {server_name website.com;location ~* ^/(downloads|files)/(.*)$ {add_header capture1 $1;add_header capture2 $2;}}

關(guān)于內(nèi)部請求

nginx有兩種類型的內(nèi)部請求:

  1. 內(nèi)部重定向: nginx在內(nèi)部重定向客戶端的請求。URI被改變,請求可能匹配到其他的location區(qū)段。常見的內(nèi)部重定向指令有error_page、rewrite、try_files。
  2. 子請求: 另一種觸發(fā)內(nèi)部請求而產(chǎn)生內(nèi)容的就是子請求,如使用Addition模塊或SSI模塊的指令。

注意:error_log 日志級別設(shè)置為debug時能夠捕獲到內(nèi)部請求日志,詳情可參閱error_log指令。

rewrite模塊指令

條件結(jié)構(gòu)

Rewrite模塊引入了if條件結(jié)構(gòu)。
語法:if (condition) { ... }
作用域:server, location

條件運(yùn)算符說明:

  • 一個變量名 : 如果指定的變量或數(shù)據(jù)不等于空字符串或0,則條件為真。
  • =或!= : 相等或不等比較
  • ~ , ~* : 模式匹配,除此之外還有,!,!*
  • -f,!-f : 測試文件是否存在
  • -d,!-d : 測試一個目錄是否存在
  • -e,!-e : 測試文件、目錄或符號鏈接是否存在
  • -x,!-x : 測試文件是否存在且可執(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;}

注意:if和location都能實(shí)現(xiàn)類似的效果,它們的不同之處在于能夠在這兩個區(qū)段使用的指令不同。換句話說就是有些指令可以用在if區(qū)段,有的則不可以,但幾乎所有指令都可以在location中使用。比較常見的是在if區(qū)段中使用rewrite指令。
rewrite
語法:rewrite regex replacement [flag];
如果指定的正則表達(dá)式與URI匹配,則URI將按照replacement指定的字符串進(jìn)行更改。該rewrite指令將按其在配置文件中出現(xiàn)的順序執(zhí)行??梢允褂胒lag終止指令的進(jìn)一步處理。如果replacement以“http://”、“https://”或“$scheme”開頭,則處理將停止并將重定向返回給客戶端。 flag標(biāo)志說明:

  • last:停止處理后面的rewrite指令集,并使用新的URI重新發(fā)起一個內(nèi)部請求。
  • break:停止處理后面的rewrite指令集,相當(dāng)于執(zhí)行了break指令。如果重定向后的文件不存在返回404。
  • redirect:臨時重定向,返回302 Moved temporarily HTTP 重定向響應(yīng),Location Header顯示跳轉(zhuǎn)后的URL地址。
  • permanent:永久重定向,返回301響應(yīng)。
server {...rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;return  403;...
}
# 如上配置,如果放到location區(qū)塊中,則last標(biāo)志應(yīng)該替換稱break,否則nginx將執(zhí)行10次循環(huán),并返回500錯誤。
location /download/ {rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;return  403;
}

注意:

  • 如果URI重寫后發(fā)生循環(huán),則重復(fù)該循環(huán),但不超過10次。nginx將返回“500 Internal Server Error”。
  • last和break都不再匹配后面的rewrite規(guī)則,但last應(yīng)用完當(dāng)前規(guī)則后,會重新發(fā)起一個內(nèi)部請求查找一個location.

break
停止處理后面的rewrite指令集,阻止進(jìn)一步改寫請求URI。

if (-e $request_filename) {break;
}
//因?yàn)閎reak指令,后面的指令集不會執(zhí)行
if ($uri ~ ^/search/(.*)$){rewrite ^/search.php?q=$1;
}

return
中斷請求處理過程,并返回一個指定的HTTP狀態(tài)碼。
語法:return code [text] | [codURL] ; return URL;

if ($uri ~ ^/admin/) {return 403;#因?yàn)橐呀?jīng)完成了請求,此條指令不會執(zhí)行。rewrite ^ http://website.com; 
}

set
初始化或重定義一個變量。注意有些變量不能修改,如$uri。
語法:set $variable value;

rewrite_log
如果設(shè)置為on,nginx將在“notice”錯誤級別對rewrite引擎處理的每個操作記錄日志。
默認(rèn)值:off

Log模塊

該模塊指令作用域:http,server,location
access_log:設(shè)置日志寫入的路徑,格式。
語法:access_log path [format [buffer=size] | off;

  • path:日志記錄的文件路徑,路徑中可以使用變量。
  • format:用log_format指令聲明一個模版名稱。
  • off:關(guān)閉日志記錄

log_format:定義一個模版,用于表述日志中一個條目包含的內(nèi)容。 語法:log_format template_name format_string; 默認(rèn)的模版為combined。定義為:

log_format combined '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent"';

變量
Log模塊除了可以使用公用變量之外,也帶來了下面一些新的變量,但這些變量只能在寫日志條目時使用。

  • $connection:連接號
  • $msec:寫入日志時的微秒時間
  • $request_time:處理請求花費(fèi)的總時間。
  • $status:響應(yīng)狀態(tài)碼
  • $bytes_sent:發(fā)送到客戶端的字節(jié)總數(shù)
  • $body_bytes_sent:發(fā)送到客戶端body的總字節(jié)數(shù)
  • $reqeust_length 請求體長度。
    此外還有$time_ios8601、$time_local、$connection_requests、$pipe幾個變量。

headers模塊

該模塊允許將“ Expires”和“ Cache-Control”頭字段以及任意添加響應(yīng)頭字段。主要有兩個指令:

  • add_header: 允許在響應(yīng)頭中添加一個新行。 如果響應(yīng)碼為200、204、301、302、304,則該行被添加到響應(yīng)頭中??梢栽趘alue中使用變量。如果指定了always參數(shù),則無論響應(yīng)碼如何,都會添加到響應(yīng)頭。 語法:add_header name value [always];
  • expires:該指令能夠控制發(fā)送到客戶端Expires和Cache-Control HTTP header的值,它影響的代碼和前面一樣。 語法:expires [modified] time | epoch | max | off;
    參數(shù)說明
    • time:過期時間值,如expires 30d;
    • epoch:將文件有效期設(shè)置為January 1970。Cache-Control header設(shè)置為no-cache。
    • max:將文件設(shè)置為Decemeber 31,2037。Cache-Control header被設(shè)置為緩存10年。
    • off:兩個頭都不修改

referer模塊

該模塊有一個簡單的指令:valid_referers。它的目的是檢查來自客戶端請求的referer HTTP頭。如果referer被認(rèn)為無效,則$invalid_referer設(shè)置為1。
語法:valid_referers none | blocked | server_names | string ...;
例如:

valid_referers none blocked server_names*.example.com example.* www.example.org/galleries/~\.google\.;if ($invalid_referer) {return 403;
}

注意:可以使用該模塊實(shí)現(xiàn)網(wǎng)站防盜鏈功能,對其他網(wǎng)站鏈接的圖片禁止訪問。

Secure link模塊

該模塊與SSL模塊無關(guān),對訪問的鏈接提供了基本的保護(hù)。該模塊提供兩種模式:

  • 通過 secure_link_secret 指令啟用,用于檢查請求鏈接的真實(shí)性,和保護(hù)未授權(quán)的資源訪問。
  • 通過secure_link and和secure_link_md5 指令請用,也用于限制鏈接的生存周期。 常用作下載防盜鏈功能。

Image filter模塊

該模塊提供圖像處理功能,通過GD Graphics Library(gdlib)來實(shí)現(xiàn)。默認(rèn)編譯的Nginx不包含這個模塊

其他模塊

除此之外比較重要的還有Index模塊、gzip模塊、realip模塊、ssl模塊等。另外在有特殊需要時還有 AutoIndex模塊、auth_basic模塊、Limit zone模塊、Limit request模塊,Empty GIF模塊、Addtion模塊、Gzip模塊、Charset模塊、Browser模塊、GeoIp模塊等等。其他模塊根據(jù)需要查閱nginx文檔。

5.fastcgi模塊

基本概念:

  • CGI協(xié)議(通用網(wǎng)關(guān)接口):描述了Web服務(wù)器和應(yīng)用程序網(wǎng)關(guān)之間的信息如何交換。
  • FastCGI:它是一個基于套接字的通信協(xié)議,使Web服務(wù)器能夠?qū)⒖蛻舳苏埱筠D(zhuǎn)發(fā)到應(yīng)用程序網(wǎng)關(guān),它使用了能夠處理多個請求的常駐進(jìn)程,因而效率比較高。

默認(rèn)情況下fastcgi模塊默認(rèn)是啟用的,通過該模塊提供的指令,能夠使nginx將請求傳遞給FastCGI程序。
注意:nginx配置目錄下的fastcgi.conf,包含了fastcgi預(yù)定義的一些參數(shù)。對所有fastcgi來說,有兩個參數(shù)是必須的SCRIPT_FILENAME和QUERY_STRING。 例如:

#/etc/nginx/fastcgi.conf fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
....#示例
location ~ \.php($|/) {fastcgi_pass unix:/dev/shm/php.sock;fastcgi_index  index.php;# 根據(jù)正則表達(dá)式分割為$fastcgi_script_name和$fastcgi_path_info兩個變量。# 比如請求/show.php/article/0001,被分割為/show.php和/article/0001fastcgi_split_path_info  ^(.+\.php)(/.*)$;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;# 設(shè)置PATH_INFO SEVER變量fastcgi_param  PATH_INFO $fastcgi_path_info;fastcgi_param APP_ENV 'production';include fastcgi.conf;
}

模塊指令

下面簡要介紹幾個主要指令,其他指令用是可以查看官方文檔。注意:如無特殊說明該模塊指令作用域?yàn)?#xff1a;http、server、location

  • fastcgi_pass:將請求轉(zhuǎn)發(fā)給fastcgi服務(wù)器。 語法:fastcgi_pass address; 作用域:location, if in location
    //對于TCP?fastcgi_pass localhost:9000;?//對于UNIX?fastcgi_pass unix:/tmp/fastcgi.socket;
  • fastcgi_param:允許將配置傳遞給Fastcgi服務(wù)器。
  • fastcgi_index:設(shè)置索引文件名,如果請求URI以斜杠結(jié)尾,則請求URI,帶上由fastcgi_index指令附加上的索引文件名。
  • fastcgi_split_path_info:根據(jù)正則表達(dá)式,將指令分割為$fastcgi_script_name和$fastcgi_path_info兩個變量。

變量

  • $fastcgi_script_name:請求uri.

6.upstream模塊

upstream模塊用來定義一組服務(wù)器,從而可以由proxy_pass,fastcgi_pass等指令引用。在upstream模塊中,默認(rèn)的方法是輪詢,這種方法會帶來Session會話問題,會出現(xiàn)同一個訪問者的兩個請求可能會被不同的兩個服務(wù)器處理。

模塊指令(整理自?nginx.org upstream模塊?)

upstream:定義一組服務(wù)器,服務(wù)器可以監(jiān)聽不同端口,另外,可以混合監(jiān)聽TCP和UNIX域套接字。
語法:upstream name { ... }
作用域:http
注意:默認(rèn)情況下,使用加權(quán)輪詢均衡方法。在下面例子中,每7個請求,將有5個分配給172.16.0.50,第2和第3個服務(wù)器各一個請求。如果服務(wù)器通信期間發(fā)生錯誤,該請求將被傳遞到下一個服務(wù)器。依此類推,直到嘗試所有正常運(yùn)行的服務(wù)器為止,如果無法從任何一臺服務(wù)器獲得成功響應(yīng),則客戶端收到最后一臺服務(wù)器的響應(yīng)結(jié)果。
示例:

upstream backend {server 172.16.0.50 weight=5;server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;server unix:/tmp/backend3;server 172.16.0.49  backup;
}

除upstream指令外,其他指令的作用域是:upstream

server指令:定義后端服務(wù)器的地址和參數(shù),這些參數(shù)將影響nginx對后端服務(wù)器的選擇。

語法:server address [parameters];
參數(shù)說明:

  • weight=n:設(shè)置服務(wù)器的權(quán)重,默認(rèn)為1。注意:如果使用ip_hash模式,weight選項(xiàng)會被忽略。
  • max_conns=number:限制連接到該服務(wù)器上的最大活動連接數(shù),默認(rèn)值為0,表示沒有限制。作用是可以對單個服務(wù)器進(jìn)行限流,防止服務(wù)器超負(fù)荷運(yùn)轉(zhuǎn)。
  • max_fails=n:設(shè)置在fail_timeout參數(shù)設(shè)置的期間內(nèi)與服務(wù)器通信失敗的嘗試次數(shù),超過這個次數(shù)服務(wù)器將不可用,默認(rèn)設(shè)置為1。認(rèn)定失敗的條件由proxy_next_upstream、fastcgi_next_upstream等指令定義。
  • fail_timeout=time:指定服務(wù)器不可用的嘗試時間范圍。默認(rèn)情況下,該參數(shù)設(shè)置為10s。
  • backup:將服務(wù)器標(biāo)記為備份服務(wù)器,當(dāng)主服務(wù)器全部不可用時,才傳遞請求。
    此參數(shù)不能和hash,ip_hash和random負(fù)載均衡方法一起使用。
  • down:標(biāo)記服務(wù)器為離線狀態(tài)。

hash
語法:hash key [consitent]; 指定服務(wù)器組的負(fù)載均衡方法??蛻舳?服務(wù)器的映射是基于散列key值。key中可以使用nginx變量。如果指定consistent將使用一致性hash方法,可確保將服務(wù)器添加到組中或從組中刪除服務(wù)器時,只有少量的key被重新映射到不同服務(wù)器。
注意:從組中添加或刪除服務(wù)器,可能會導(dǎo)致key值重新映射到其他服務(wù)器。

ip_hash
語法:ip_hash;
指定服務(wù)器組的負(fù)載均衡方法,它是基于客戶端ip在服務(wù)器間分配請求。注意:1.如果其中一臺服務(wù)器需要臨時刪除,需使用down參數(shù)標(biāo)記該服務(wù)器,以保留客戶端ip地址的當(dāng)前哈希值。2.在運(yùn)營商移動網(wǎng)絡(luò)下,ip經(jīng)常是會變化的。

keepalive指令
語法:keepalive connections;
每個 worker 進(jìn)程連接上游服務(wù)器的最大長連接數(shù)(默認(rèn)情況下是短連接)。超過此數(shù)量時,將關(guān)閉最近最少使用的連接。

對于HTTP,應(yīng)將 proxy_http_version指令設(shè)置為“1.1”,并清除 “Connection” 頭字段:

upstream http_backend {server 127.0.0.1:8080;keepalive 16;
}server {location /api/ {proxy_pass http://http_backend;proxy_http_version 1.1;#即使客戶端和代理服務(wù)器使用的是短鏈接,代理服務(wù)器和上游服務(wù)器之間也將使用長連接。proxy_set_header Connection ""; ...}
}

和它一起使用的還有兩個參數(shù),分別是:

  • keepalive_requests:設(shè)置通過一個keepalive連接可以處理的最大請求數(shù)。
  • keepalive_timeout 空閑keepalive保持打開的超時時間。

注意:對于fastcgi服務(wù)器,需要開啟fastcgi_keep_conn才能使keepalive連接正常工作。

last_conn
指定服務(wù)器組的負(fù)載均衡方法,將請求傳遞到活動連接數(shù)最少的服務(wù)器,同時需要考慮權(quán)重。如果有多個這樣的服務(wù)器,就使用輪詢的方法。

random
語法:random [two [method]]; 指定服務(wù)器組的負(fù)載均衡方法,其中將請求隨機(jī)傳遞到選擇的服務(wù)器,同時需要考慮服務(wù)器權(quán)重。

resolver
語法:resolver address ... [valid=time] [ipv6=on|off] [status_zone=zone]; 配置用于解析上游服務(wù)器名的域名解析服務(wù)器。

變量

upstream模塊支持以下變量:

  • $upstream_addr:上游服務(wù)器的ip和端口活著UNIX套接字的路徑。
  • $upstream_bytes_received:從上游服務(wù)器中收到的字節(jié)數(shù)。
  • $upstream_bytes_send:發(fā)送到上游服務(wù)器的字節(jié)數(shù)。
  • $upstream_connect_time:與上游服務(wù)器建立連接的時間。
  • $upstream_cookie_name:上游服務(wù)器在“Set-Cookie”響應(yīng)頭字段中發(fā)送的具有指定值的cookie。
  • $upstream_header_time:從上游服務(wù)器接收header耗費(fèi)的時間。
  • $upstream_response_length:從上游服務(wù)器接收響應(yīng)的長度(bytes)。
  • $upstream_response_time:接收上游服務(wù)器接收響應(yīng)耗費(fèi)的時間。
  • $upstream_status:上游服務(wù)器的響應(yīng)狀態(tài)。

7.nginx反向代理

默認(rèn)情況下proxy模塊默認(rèn)是啟用的,通過該模塊能夠?qū)⒖蛻舳说腍TTP請求轉(zhuǎn)發(fā)到后端服務(wù)器。 注意:如無特殊說明,指令的作用域都為:http,server,location。
示例:

location / {proxy_pass       http://localhost:8000;proxy_set_header Host      $host;proxy_set_header X-Real-IP $remote_addr;
}

模塊指令

下面簡要介紹幾個主要指令,其他指令用是可以查看官方文檔。注意:如無特殊說明該模塊指令作用域?yàn)?#xff1a;http、server、location

主要指令
proxy_pass:指定轉(zhuǎn)發(fā)給后端服務(wù)器的協(xié)議和地址。

語法:proxy_pass 協(xié)議://地址[/URI];

協(xié)議可以是http或https。地址可以是TCP套接字(域名或者ip地址+port)、UNIX域套接字,還可以指向upstream區(qū)段。URI是可選部分,如果指定了URI,location 后面指定的路徑將被替換。

作用域:location, location中的if

proxy_pass http://localhost:8080;
proxy_pass http://127.0.0.1:8080;
proxy_pass http://unix:/tmp/backend.sock;
proxy_pass https://192.168.0.1;
proxy_pass http://localhost:8080/uri/;
proxy_pass http://unix:/tmp/backend.sock:/uri/:
# URL中還可以使用變量
proxy_pass http://$server_name:8080;#指向upstream區(qū)段
#格式:proxy_pass http://myblock;
upstream backend {server 127.0.0.1:8080;server 127.0.0.1:8081;
}
location ~ \.php($|/) {fastcgi_pass http://backend;
}

注意:如果proxy_pass指定了URI,那么location匹配不能使用正則表達(dá)式。如果代理的URI需要使用正則表達(dá)式,則可以使用rewrite和proxy_pass結(jié)合的方式來定義轉(zhuǎn)發(fā)路徑。此時proxy_pass 后面定義的URL不再生效。

location /static_js/ {rewrite /static_js/(._)$ /$1 break;proxy_pass http://js.test.com;
}

proxy_next_upstream:指定哪種情況將請求傳遞到下一個服務(wù)器。
語法:proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
默認(rèn):proxy_next_upstream error timeout;

參數(shù)說明:

  • error:與服務(wù)器建立連接或傳遞請求或讀取響應(yīng)頭時發(fā)生錯誤。
  • timeout:與服務(wù)器建立連接或傳遞請求或讀取響應(yīng)頭時發(fā)生超時。
  • invalid_header:后端服務(wù)器返回空或無效的響應(yīng)
  • http_xxx:發(fā)生對應(yīng)HTTP錯誤。
  • off:禁止將請求傳遞到下一個服務(wù)器。
proxy_next_upstream error timeout http_504;

proxy_ignore_headers:禁用來自后端服務(wù)器的某些響應(yīng)頭字段。可以忽略以下字段:X-Accel-Redirect、Expires、Cache-Control、Set-Cookie和Vary。

proxy_set_body:用于重新定義傳遞給后端服務(wù)器的請求正文,一般用于調(diào)試目的。

proxy_set_header:用于重新定義或增加傳遞給后端服務(wù)器的請求頭字段。 語法:proxy_set_header field value; 默認(rèn)值:proxy_set_header Host $proxy_host; proxy_set_header Connection close;

除以上外還有proxy_method、proxy_hide_header、proxy_pass_header、proxy_pass_request_body、proxy_pass_request_header、proxy_redirect等指令。

緩沖、緩存和臨時文件
proxy_buffer_size:設(shè)置緩沖區(qū)大小,該緩沖區(qū)用于存放來自后端服務(wù)器響應(yīng)數(shù)據(jù)的開始不分。默認(rèn)情況下,緩沖區(qū)的大小等于一個內(nèi)存頁(根據(jù)平臺不同,4k或8k)

porxy_buffering:定義是否緩沖后端服務(wù)器的響應(yīng),如果禁用,響應(yīng)就直接轉(zhuǎn)發(fā)給客戶端。
語法:proxy_buffering on | off;
默認(rèn):proxy_buffering on;

proxy_buffers?:設(shè)置緩沖區(qū)數(shù)量和大小,用于存放從后端服務(wù)器讀取的響應(yīng)數(shù)據(jù)。默認(rèn)情況下,緩沖區(qū)的大小等于一個內(nèi)存頁。
語法:proxy_buffers number size;
默認(rèn):proxy_buffers 8 4k | 8k;

proxy_busy_buffers_size:在緩沖區(qū)中,收到后端服務(wù)器數(shù)據(jù)總大小超過該指令指定大小時,緩沖區(qū)就會被刷新,并且數(shù)據(jù)被發(fā)送到客戶端。默認(rèn)為2*proxy_buffer_size。
默認(rèn)值:proxy_busy_buffers_size 8k | 16k;

proxy_cache_前綴開頭的指令:用于定義存放緩存文件目錄等。
例如:proxy_cache、proxy_cache_key、proxy_cache_path等。

超時、錯誤及限制
proxy_connect_timeout:定義連接到后端服務(wù)器的超時時間。
默認(rèn):proxy_connect_timeout 60s;

proxy_read_timeout:定義從后端服務(wù)器讀取數(shù)據(jù)的超時時間,超時設(shè)置僅表示在兩個連續(xù)的讀操作之間,而不是整個響應(yīng)的傳輸。如果上游服務(wù)器未傳輸任何內(nèi)容,則連接被關(guān)閉。
默認(rèn):proxy_read_timeout 60s;

proxy_send_timeout:定義從發(fā)送數(shù)據(jù)到后端服務(wù)器的超時時間,超時設(shè)置僅表示在兩個連續(xù)寫操作之間,而不是整個請求的傳輸。如果后端服務(wù)器在這期間未收到任何數(shù)據(jù),則連接被關(guān)閉。
默認(rèn):proxy_send_timeout 60s;

proxy_ignore_client_abort:確定當(dāng)客戶端關(guān)閉和代理服務(wù)器間的連接時,是否關(guān)閉與后端服務(wù)器的連接。 默認(rèn)值:proxy_ignore_client_abort off;

除此之外還有proxy_intercept_errors、proxy_send_lowat、 proxy_headers_hash_max_size、proxy_headers_hash_bucket_size、proxy_store、proxy_store_access等指令等指令。

變量

  • $proxy_host:當(dāng)前請求后端服務(wù)器的名稱;
  • $proxy_port:當(dāng)前請求后端服務(wù)器的端口。
  • $proxy_add_x_forwarded_for:該變量包含“X-Forwarded-For”請求頭的值,后跟遠(yuǎn)程客戶端的ip地址,這兩個值由逗號分割,如果客戶端請求頭中不存在“X-Forwarded-For”字段,則該變量等于$remote_addr的值。

8.擴(kuò)展閱讀

nginx 官方文檔:https://nginx.org/en/docs/

nginx全面配置 包括實(shí)例:Nginx全面配置 - 知乎 (zhihu.com)

Nginx配置文件_nginx 配置文件-CSDN博客

http://m.aloenet.com.cn/news/1592.html

相關(guān)文章:

  • web 網(wǎng)站做甘特圖教育機(jī)構(gòu)排名
  • 自己做國際網(wǎng)站網(wǎng)絡(luò)營銷管理
  • 有沒有靠譜的推廣平臺手機(jī)優(yōu)化軟件哪個好用
  • 怎么用ps做網(wǎng)站圖片nba排名西部和東部
  • 做網(wǎng)站搜索如何顯示官網(wǎng)高端網(wǎng)站定制開發(fā)
  • 蘭州網(wǎng)站建設(shè) 冰雨品牌推廣的具體方法
  • 站長平臺百度百度直播
  • 新手學(xué)做網(wǎng)站pdf手競價網(wǎng)官網(wǎng)
  • 網(wǎng)頁設(shè)計(jì)專業(yè)大學(xué)排名網(wǎng)站seo最新優(yōu)化方法
  • 網(wǎng)站選擇理由描述百度seo排名原理
  • 秦皇島網(wǎng)站建設(shè)哪家好天津做優(yōu)化好的公司
  • 博羅做網(wǎng)站報價軟文模板
  • 舞鋼市做網(wǎng)站開發(fā)的公司網(wǎng)絡(luò)營銷的目的是
  • 網(wǎng)站建設(shè)字圖search搜索引擎
  • 武漢手游網(wǎng)站開發(fā)推廣賺錢項(xiàng)目
  • 成都個人網(wǎng)站seo企業(yè)建站系統(tǒng)
  • 建站平臺在線提交表格數(shù)字營銷工具
  • 微信網(wǎng)站 手機(jī)網(wǎng)站互聯(lián)網(wǎng)廣告平臺排名
  • 私人網(wǎng)站服務(wù)器搭建怎么建立一個屬于自己的網(wǎng)站
  • 官方網(wǎng)站打不開怎么回事廣州企業(yè)推廣
  • 成都網(wǎng)站改版優(yōu)化寧波seo推廣咨詢
  • 網(wǎng)站單個頁面seo公司網(wǎng)站推廣
  • 怎樣做php網(wǎng)站初學(xué)seo網(wǎng)站推廣需要怎么做
  • 公司網(wǎng)站建設(shè)有用嗎谷歌優(yōu)化seo
  • 做折扣的網(wǎng)站有哪些定制網(wǎng)站
  • 網(wǎng)站做多少層級seo快速優(yōu)化技術(shù)
  • 濟(jì)南高端網(wǎng)站制作公司公司官網(wǎng)開發(fā)制作
  • 幫忙找人做網(wǎng)站網(wǎng)絡(luò)營銷概述
  • 晉城住房保障和城鄉(xiāng)建設(shè)管網(wǎng)站濟(jì)南seo小黑seo
  • 專門做衛(wèi)生間效果圖的網(wǎng)站巨量引擎官網(wǎng)