深入理解Nginx

深入理解Nginx

一、Nginx是什麼?

二、爲什麼選擇Linux

三、Nginx生成的文件有哪些?

四、Nginx的配置詳解?

五、模塊功能詳解

六、虛擬主機配置詳解?

 

 

 

 

 

 

 

 

一、Nginx是什麼?

Nginxengine X)是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由lgor SysoevRambler.ru(該站點爲俄羅斯第二大站點)研發,第一個公開版0.1.0發佈於2004104日。其源代碼以類似BSD許可證的形式發佈,因爲它的穩定性,功能擴展性,示例配置文件和低系統資源的消耗而聞名。

二、爲什麼選擇Nginx

1、更快~

單次請求會得到更快的響應

在高峯期(數以萬計的併發請求時)比其他web服務器更快的響應;

2、高擴展性~

它完全是由多個不同功能、不同層次、不同類型且耦合度低的模塊組成;

3、高可靠性~

官方提供的常用模塊穩定性高,master進程在worker進程出錯時可以快速“拉起”新的worker子進程提供服務;

4、低內存消耗~

高併發

5、單機可支持10萬以上的併發連接~

6、熱部署~

Master管理進程與worker工作進程分離設計,使得Nginx能夠提供熱部署功能,即可在7x24小時不間斷服務的前提下,進行Nginx的可執行文件的升級;

7、最自由的BSD許可協議~

免費,支持二次開發;

三、Nginx的安裝和啓動

1、安裝Nginx

配置Nginxyum

[root@localhost yum.repos.d]# cat nginx.repo

[nginx]

name=nginx

baseurl=http://nginx.org/packages/centos/7/x86_64/

enabled=1

gpgcheck=0

[root@localhost yum.repos.d]#

安裝Nginx

[root@localhost yum.repos.d]# yum install -y nginx

生成的文件

[root@localhost yum.repos.d]# rpm -ql nginx

/etc/logrotate.d/nginx

/etc/nginx

/etc/nginx/conf.d//虛擬主機配置目錄

/etc/nginx/conf.d/default.conf//默認的虛擬主機配置

/etc/nginx/fastcgi_params

/etc/nginx/koi-utf

/etc/nginx/koi-win

/etc/nginx/mime.types

/etc/nginx/modules

/etc/nginx/nginx.conf//nginx的配置文件

/etc/nginx/scgi_params

/etc/nginx/uwsgi_params

/etc/nginx/win-utf

/etc/sysconfig/nginx

/etc/sysconfig/nginx-debug

/usr/lib/systemd/system/nginx-debug.service

/usr/lib/systemd/system/nginx.service

/usr/lib64/nginx

/usr/lib64/nginx/modules

/usr/libexec/initscripts/legacy-actions/nginx

/usr/libexec/initscripts/legacy-actions/nginx/upgrade

/usr/sbin/nginx//Nginx程序

/usr/sbin/nginx-debug

/usr/share/doc/nginx-1.10.2

/usr/share/doc/nginx-1.10.2/COPYRIGHT

/usr/share/man/man8/nginx.8.gz

/usr/share/nginx

/usr/share/nginx/html

/usr/share/nginx/html/50x.html

/usr/share/nginx/html/index.html

/var/cache/nginx

/var/log/nginx

[root@localhost yum.repos.d]#

 

 

 

2、Nginx的啓動和測試

啓動

[root@localhost yum.repos.d]# systemctl  start nginx.service

[root@localhost yum.repos.d]# ss -antp|grep :80

LISTEN     0      128          *:80 //可監聽到80端口已經啓用                     *:*                   users:(("nginx",pid=34244,fd=6),("nginx",pid=34243,fd=6))

[root@localhost yum.repos.d]#

測試

訪問:http://172.16.80.72

 

四、Nginx配置詳解

1、配置文件

/etc/nginx/nginx.conf

注意事項

 指令必須以分號結束;

 支持使用配置變量

內建變量:由Nginx模塊引入,可直接引用;

自定義變量:使用set命令進行定義

如:set variable_name value;引用變量:$variable_name

2、配置文件的組成

Manblock

 正常運行必備的配置

user nginx;//用戶爲nginx

pid        /var/run/nginx.pid;//主進程pid表示存放路徑

Include file | mask;//指明包含進來的其他配置文件片段

load_module file;//指明要裝載的動態模塊

 優化性能的相關配置

worker_processes  1;//工作進程數量,一般小於或者等於實際的CPU數量
//參數也可爲auto,自動分配cpu數量;

worker_cpu_affinity cpumask ...; //綁定工作cpu;

//0000 0001 0cpu

//0000 0010 1cpu ......

//參數可謂auto,自動選擇cpu進行工作;

work_priority number//指定worker進程的nice值,設定worker進程優先//:[-20,20]

worker_rlimit_nofile number;//worker進程所能夠打開的文件數量上限;

//理論值應爲$(ulimit -n) 除以worker進程數

//實際應爲ulimit -n

 用於調試和定位問題的相關配置

daemon on|off;//是否以守護進程運行Nginx;

master_process on|off;//是否以master/worker模型運行nginx;默認爲on;

error_log  /var/log/nginx/error.log debug;//error_log file [level];

//錯誤日誌存放位置,日誌級別

//debug,info,notice,warn,error,crit,alert,emerg

Event

 事件驅動的相關配置

worker_connections number;//每個worker進程所能打開的最大併發連接數;

//服務器承載的最大併發爲

//worker_processes * worker_connections

use method//指明併發連接請求的處理方法

//一般爲 use epoll;

accept_mutex on|off//處理新的連接請求的方法

//on意味着由各worker輪流處理新請求,

//off意味着每個心情求到達都會通知worker進程

http

 與套接字相關配置

server { .... }//配置一個虛擬主機

server{

listen  address[:port]|port;

Server_name SERVER_NAME;

Root  /path/to/Document_root

}

 

listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]

//default server:設定爲默認虛擬主機;

//ssl:限制僅能夠通過ssl連接提供服務

//backlog=number:後援列隊長度

//rcvbuf=size:接收緩衝區大小

//sndbuf=size:發送緩衝區大小

server_name name ....;

指明虛擬主機名稱:後可跟多個由空白字符分隔的字符串;

支持*統配任意字符串:server_name *.magedu.comwww.magedu.*

//*處可爲任意字符

支持~”起始的字符做正則表達式模式匹配:server_name ~^www\d+\.magedu\.com$ // \d+ :爲至少一個數字;

Server_name的匹配機制如下:

a. 字符串精確匹配

b. 左側*通配符

c. 右側*通配符

d. 正則表達式

 

Tcp_nodelay on|off//keepalived模式下的連接是否啓用TCP_NODELAY//選項;

Sendfileon|off//是否啓動sendfile功能

Root path:

設置web資源路徑映射;用於指明用戶請求url所對應的本地文件系統上的文檔所在目錄路徑;

可用位置:http,server,location,if in location

Location [ = | ~ | ~* | ^~ ] uri { .... }

Location @name { .... }

在一個serverlocation配置段可存在多個,用於實現從uri到文件系統弄的路徑映射;nginx會根據用戶請求的URI來檢查定義的所有location,並找出一個最佳匹配,而後應用其配置;

=:對URI做精確匹配;例如

http://www.magedu.com/,

http://www.magedu.com/index.html

Location = / {

.....

}

~:URI做正則表達式模式匹配,區分字符大小寫;

~*:對URI做正則表達式模式匹配,不區分字符大小寫;

^~:URI的左半部分做匹配檢查,不區分字符大小寫;

不帶符號:匹配起始於此uri的所有url;

匹配優先級:=^~,~,~*,不帶符號;

root /vhosts/www/htdocs/

http://www.magedu.com/index.html --> /vhosts/www/htdocs/index.html


server {

root  /vhosts/www/htdocs/

location /admin/ {

root /webapps/app1/data/

}

}

alias path;

定義路徑別名,文檔映射的另一種機制;僅能使用與location上下文;

1. root,給定的路徑對應於location/uri/左側的/

2. alias,給定的路徑對應於location中的/uri/左側的/

Index file ....;//默認資源:httpserver,location

Error_page code ..[=[responde]] uri;

//code 是響應碼,定義響應碼相關頁面;

try_files file ... uri;

 定義客戶端請求的相關配置

Keepalive_timeout timeout [header timeout];

//設定保持連接的超時時長,0表示禁止長連接;    //默認爲75s;

Keepalive_requests number;//在第一次長連接上所允許請求的資源的最大數量,

//默認爲100

Keepalive_disable none | browser ....;

//禁止使用何種瀏覽器;

Send_timeout time;//向客戶端發送響應報文的超時時長,此處,是指兩次寫//操作之間的間隔時長;

Client_body_buffer_size size;

用於接收客戶端請求報文的body部分的緩衝區大小;默認爲16k;超出此大小時,將其暫存到磁盤上由clien_body_temp_path指令所定義的位置;

Client_body_temp_path path [level1 [level2 [level3]] ];

設定用於存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量;

例如:client_body_temp_path /var/tmp/client_body  1  2  2   //16進制數字

 對客戶端進行限制的相關配置

Limit_rate rate;//限制響應給客戶端的速率,

//單位bytes/second,0表示不限制;

Limit_except  method ....//允許method的客戶端

Limit_except GET {

Allow 192.168.1.0/24;

Deny all ;

}

 文件操作優化配置

Aio on | off threads[=pool];//是否啓用aio功能;

//aio異步讀取

Directio size | off;

Linux主機啓用O_DIRECT標記,此處意味文件大於等於給定的大小時使用,例directio 4m;

Open_file_cache off;

Open_file_cache max=N [inactive=time];

nginx可以緩存以下三種信息:

(1)文件的描述法、文件大小和最近一次的修改時間;

(2)打開的目錄結構;

(3)沒有找到的或者沒有權限訪問的文件的相關信息;

Max=N:可緩存的緩存項上限;達到上限後會使用LRU算法實現緩存管理;inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少於open_file_cache_min_uses指令所指定的次數的緩存項即爲非活動項;

Open_file_cache_valid time;//緩存項有效性的檢查頻率;默認爲60s

open_file_cache_min_uses number;

open_file_cache指令的inactive參數指定的時長內,至少應該被命中多少次方可被歸類爲活動項;

Open_file_cache_errors on | off;

是否緩存查找時發生錯誤的文件一類的信息;

 

mail

五、Nginx的模塊詳解

ngx_http_access_module

Ngx_http_auth_basic_module

Ngx_http_stub_status_module

Ngx_http_stub_status_module

Ngx-http_log_module

Ngx_http_gzip_module模塊;

Ngx_http_ssl_module模塊;

ngx_http_rewrite_module模塊;

Ngx_http_refer_modulem模塊;

Ngx_http_proxy_module模塊;

Ngx_http_headers_module模塊;

ngx_http_fastcgi_module模塊;

Ngx_http_core_module模塊;

Ngx_http_upstream_module模塊;

Ngx_stream_proxy_module模塊;

ngx_stream_core_module模塊;

 

Ngx_http_access_module模塊

本模塊主要實現基於ip的訪問控制功能;

Allow address |CIDR |unix: |all;//允許訪問的ip

Deny address |CIDR |unix; |all;//拒絕的訪問Ip;

適用於:http,server,laction,limit_except;

Ngx_http_auth_basic_module模塊

實現基於用戶的訪問控制,使用basic機制進行用戶認證;

Auth_basic string | off;

Auth_basic_user_file file;

Location /admin/ {

Alias /webapps/app1/data/;

Auth_basic admin area

Auth_basic_user_file /etc/nginx/.ngxpasswd;

}

nginx本身不提供htpasswd命令,htpasswd命令則有httpd-tools提供;

Ngx_http_stub_status_module模塊

實現用於輸出Nginx的基本狀態信息;

Active connections : 291

Server accepts handled requests

Xxx xxx xxx xxx

Reading :6 writing: 179 waiting 106

Active connetions:活動狀態的連接數;

Accetps : 已經接受的客戶端請求的總數;

Handled:已經完成處理完成的客戶端請求總數;

Requests:客戶端發來的總的請求書;

Writing:處於向客戶端發送響應報文過程中的連接數;

Waiting:處於等待客戶端發出來的請求的空閒連接數;

stub_status

配置實例:

Location /basic_status {

Stub_status;

}

Ngx-http_log_module模塊

log_format name string ....;//實現日誌格式模塊

String 可以使用Nginx核心模塊及其他模塊內嵌的變量;

Access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

Access_log off;

訪問日誌文件路徑,格式及相關的緩衝的配置;

open_log_file_cache max=N [incative=time] [min_uses=N] [valid=time];

Open_log_file-cache off;

緩存各日誌文件相關的元數據信息;

Max:緩存的最大文件描述符數量;

min_uses:在inactive指定的時長內訪問大於等於此值方可被當做活動項;

Inactive:非活動項;

Valid:這個指多長時間檢查一次緩存信息有效性。也就是說即使我一直訪問這個文件,30S後會檢查此文件的更改信息是否編髮,發現變化就更新。

Ngx_http_gzip_module模塊;

靜態壓縮模塊

1、gzip on | off;//gzip開關

2、gzip_comp_level level;//壓縮級別[1-9]

3、gzip_disable regex ...;

"User-Agent"請求頭進行正則匹配,滿足regex正則的請求對其響應時不啓用gzip壓縮,通常用來去除ie6等對gzip壓縮支持不是很好的瀏覽器的gzip壓縮

4、gzip_min_length length;

啓用gizp壓縮的響應臨界值大小,僅與響應頭的"Content-Length"的值進行比較,只有大於gzip_min_length的響應纔會進行壓縮,比較合理的值是1000

5、gzip_buffers number size;

設置gzip壓縮時使用的緩衝區的個數以及每個緩衝區的大小,例如gzip_buffers 32 4k表示一共32個緩衝區,每個緩衝區4KB

6gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;

nginx作爲代理服務器接收到從被代理服務器發送的響應報文後,在何種條件下啓用壓縮功能的;

off:對代理的請求不啓用;no-cache, no-storeprivate:表示從被代理服務器收到的響應報文首部的Cache-Control的值爲此三者中任何一個,則啓用壓縮功能;

7gzip_types mime-type ...;

壓縮過濾器,僅對此處設定的MIME類型的內容啓用壓縮功能;

指定需要壓縮的響應內容類型,例如text/css application/javascript application/json application/xml分別表示對css js json xml進行壓縮,多個用空格分開,*表示所有。注意:text/html類型總會被壓縮,不需要顯式的指定

Ngx_http_ssl_module模塊;

1ssl on | off;

Enables the HTTPS protocol for the given virtual server.

2ssl_certificate file;

當前虛擬主機使用PEM格式的證書文件;

3ssl_certificate_key file;

當前虛擬主機上與其證書匹配的私鑰文件;

4ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

支持ssl協議版本,默認爲後三個;

5ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

builtin[:size]:使用OpenSSL內建的緩存,此緩存爲每worker進程私有;

shared:name:size]:在各worker之間使用一個共享的緩存;

6ssl_session_timeout time;

客戶端一側的連接可以複用ssl session cache中緩存 的ssl參數的有效時長;

配置示例:

server {

listen 443 ssl;

server_name www.magedu.com;

root /vhosts/ssl/htdocs;

ssl on;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

ssl_session_cache shared:sslcache:20m;

}

ngx_http_rewrite_module模塊;

將用戶請求的URI基於regex所描述的模式進行檢查,而後完成替換;

1、rewrite regex replacement [flag]

將用戶請求的URI基於regex所描述的模式進行檢查,匹配到時將其替換爲replacement指定的新的URI

注意:如果在同一級配置塊中存在多個rewrite規則,那麼會自下而下逐個檢查;被某條件規則替換完成後,會重新一輪的替換檢查,因此,隱含有循環機制;[flag]所表示的標誌位用於控制此循環機制;

[flag]

last:重寫完成後停止對當前URI在當前location中後續的其它重寫操作,而後對新的URI啓動新一輪重寫檢查;提前重啓新一輪循環;

break:重寫完成後停止對當前URI在當前location中後續的其它重寫操作,而後直接跳轉至重寫規則配置塊之後的其它配置;結束循環;

redirect:重寫完成後以臨時重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端重新發起請求;不能以http://https://開頭;

permanent:重寫完成後以永久重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端重新發起請求;

2、Return

Return code [text];

Return code URL;

Return URL;

停止處理並指定返回code到客戶端。

3rewrite_log on | off;

是否開啓重寫日誌;

4if (condition) { ... }

引入一個新的配置上下文 ;條件滿足時,執行配置塊中的配置指令;server, location

condition

比較操作符:

==

!=

~:模式匹配,區分字符大小寫;

~*:模式匹配,不區分字符大小寫;

!~:模式不匹配,區分字符大小寫;

!~*:模式不匹配,不區分字符大小寫;

文件及目錄存在性判斷:

-e, !-e

-f, !-f

-d, !-d

-x, !-x

5、set $variable value;

設置用戶自定義變量;

Ngx_http_refer_modulem模塊;

1valid_referers none | blocked | server_names | string ...;

定義referer首部的合法可用值;

none:請求報文首部沒有referer首部;

blocked:請求報文的referer首部沒有值;

server_names:參數,其可以有值作爲主機名或主機名模式;

arbitrary_string:直接字符串,但可使用*作通配符;

regular expression:被指定的正則表達式模式匹配到的字符串;要使用~打頭,例如 ~.*\.magedu\.com


配置示例:

valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;

if($invalid_referer) {

return 403;

}

 

Ngx_http_proxy_module模塊;

代理模塊

##proxy_pass URL;

適用域:locationif in locationlimit_except

注意:proxy_pass後面的路徑不帶uri時,其會將locationuri傳遞給後端主機;

server {

...

server_name HOSTNAME;

location /uri/ {

proxy http://hos[:port];

}

...

}

http://HOSTNAME/uri --> http://host/uri

proxy_pass後面的路徑是一個uri時,其會將locationuri替換爲proxy_passuri

server {

...

server_name HOSTNAME;

location /uri/ {

proxy http://host/new_uri/;

}

...

}


http://HOSTNAME/uri/ --> http://host/new_uri/

##proxy_set_header field value;

設定發往後端主機的請求報文的請求首部的值:

proxy_set_header X-Real-IP $remote_addr;

Proxy_set_header X-Fowaeded-For $proxy_add_x_forwarded_for;

##proxy_cache_path

定義可用於proxy功能的緩存;Context:http

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

##proxy_cache zone |off;

指定要調用的緩存,或關閉緩存機制:

適用域:httpserverlocation

##proxy_cache_key  string

緩存中用於“鍵”的內容;

Proxy_cache_key $scheme$proxy_host$request_uri;

##proxy_cache_valid [code ...] time;

定義對特定響應嗎的響應內容的緩存時長;

定義在http{...}中;

proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;

定義在需要調用緩存功能的配置段,例如server{...}

proxy_cache pxycache;

proxy_cache_key $request_uri;

proxy_cache_valid 200 302 301 1h;

proxy_cache_valid any 1m;

##proxy_cache_use_stale

##proxy_cache_methods GET | HEAD | POST....;

##proxy_hide_header fidle;

##proxy_connect_timeout time;  默認爲60s

 


Ngx_http_headers_module模塊;

向代理服務器響應,給客戶端的的響應報文添加自定義首部,或者修改指定首部的值;

##add_header name valie [always];//添加自定義首部

add_header X-via $server_addr;

Add_header X-Accel $server_name;

##expires [modified] time;

Expires epoch |max | off;

用於定義expire或者Cache-Control首部的值;

 

ngx_http_fastcgi_module模塊;

本模塊主要用於連接fastcgi;用於lnmp搭建;

## fastcgi_pass address;//fastcgiserver地址;

作用域locationif in location;

##fastcgi_index name;//fastcgi默認的主頁頁面;

##fastcgi_param parameter value [if_not_empty];

應該設置一個參數傳遞給FastCGI服務器。值可以包含文本、變量和它們的組合。這些指令是繼承了以前的水平當且僅當沒有fastcgi_param指令定義在當前水平。

/etc/nginx/fastcgi_params 定義了變量傳遞參數;

示例:

location ~* \.php$ {

root           /usr/share/nginx/html;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME

//fpm變量名稱,/usr/share/nginx/html$fastcgi_script_name;

//$fastcgi_script_name;  $之前不應該有/,因爲在資源訪問的時候本身就有一個/;  nginx的變量名稱

 

include        fastcgi_params;

}


配置示例2:通過/pm_status/ping來獲取fpm server狀態信息;

location ~* ^/(pm_status|ping)$ {

include        fastcgi_params;

fastcgi_pass 127.0.0.1:9000;

fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;

}

###fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

用於定義fastcgi的緩存;緩存位置爲磁盤上的文件系統,由path所指定路徑來定義;

Levels=levels; 緩存目錄的層級數量,以及每一級的目錄數量,levels=ONE:TWO:THREE,leves=1:2:2

Keys_zone=name:size//K/v映射的內存空間的名稱及大小;

Inactive=time//非活動時長

max_size=size//磁盤上用於緩存數據的緩存空間上限

###fastcgi_cache zone |off ;//調用指定的緩存空間來緩存數據;

//作用域:http,server,location

###fastcgi_cache_key string;//定義用做緩存項的key的字符串;

###fastcgi_cache_min_uses number;//緩存空間中的緩存項在inactive定義的非活動內至//少要被訪問所指定的次數方可被認作是活動項;

###fastcgi_cache_valid [code ...] time//不同響應嗎各自的緩存時長;

示例:

http {

...

fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;

...

server {

...

location ~* \.php$ {

...

fastcgi_cache fcgi;

fastcgi_cache_key $request_uri;

fastcgi_cache_valid 200 302 10m;

fastcgi_cache_valid 301 1h;

fastcgi_cache_valid any 1m;

...

}

...

}

...

}

fastcgi_keep_conn on

Ngx_http_core_module

http核心模塊

####aio  on|off |sendfile;   //默認爲關閉

該指令的功能是啓用或禁用異步I/0 (AIO)

適用域:http,server,location

####alias path;

針對location中的位置指定一個別名,訪問location中的相關信息相當於訪問別名的位置;

   location /images/ {

        alias /data/w3/images/;

    }

####client_body_buffer_size size

設置讀取客戶端請求的body時的緩存大小。在某些情況下當前請求的body大於緩存尺寸時,body將被緩存到本地磁盤的臨時文件中。默認情況下緩衝區大小是兩個內存頁的大小;

用法:client_body_buffer_size 8K|16K

適用域:http,server,location

####cilent_body_in_file_only   on|clean |off//默認爲off;

確定nginx是否應該保存整個客戶端請求的body在文件裏。

適用域:http,server,location

####client_body_in_single_buffer   on|off

確定Nginx是否應該保存整個客戶端請求的body在單個緩存中。這個指令被推薦使用當用戶使用“$request_body”變量時;

適用域:http,server,location

####client_body_temp_path  path[level1 [level2 [level3 ]]];

定義一個存儲客戶端請求body臨時文件目錄,3級子目錄的層次結構,可以使用下面指定的目錄。

示例:client_body_temp_path  /spoo/nginx/client_temp;

適用域:http,server,location

一個臨時文件可能看起來像這樣: 
     / spool/nginx/client_temp/7/45/00000123457

####http

http服務器相關配置指令提供一個上下文環境

語法:http{...}

適用域:主配置文件

####if_modified_since  off|exact |before;

規定如何對響應時間同請求頭中if-Modified-Since”字段的值進行比較。

默認:if_modified_since  exact;

適用域:httpserverlocation

Off if_modified_since”字段的請求被忽略;

Before 修改時間小於或者等於這個請求頭中“if_modified_since”字段的值;

Exact:精確匹配

####keepalive_disable

禁止同行爲不端的瀏覽器保持長連接。瀏覽器參數指定的瀏覽器將會受到影響。Misie6參數將禁止老版本的ie瀏覽器建立長連接;

語法:keepalive_disable  none |browser....;

默認:keepalive_disable  msie6;

適用域:httpserverlocation

####keepalive_requests number;

設置一個長連接中最多可以允許的request請求數量。當超過這個數量後,這個鏈接被釋放。

默認:keepalive_requests 100;

適用域:http,server,location

####keepalive_timeout

設置一個客戶端的鏈接在server端保持存活的超時時間。參數爲0則禁止客戶端的keep-alive的鏈接。可選參數用來在http相應頭中設置一個字段,字段名稱keep-alive,字段值爲:header_timeou

語法:keepalive_timeout timeout[header_timeout];

默認:keepalive_timeout 75s

適用域:http,server,location

####large_client_header_buffers numbersize;

設置當讀取大的客戶端請求時緩衝的最大數目和尺寸。在緩衝的一個請求行不能超過這個尺寸。或者客戶端414uri太大請求)信息被返回。一個請求頭部域也不能超過buffer的尺寸,或者客戶端成收到400(壞的請求)信息。緩衝僅在被需要時才創建。默認的buffer的尺寸是8k字節。如果請求的處理接受後,處理連接被轉換成keep-alive狀態,緩衝被釋放。

默認:large_client_header_buffers 4 8k;

適用域:http,server

####limit_except

現在在一個location配置中允許的內置方法。這個方法參數可以是下面參數:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, or PATCH。運行Get方法也允許Head方法。到其他方法的訪問能夠採用ngx_http_access_modulengx_http_auth_basic_module指令來限定。

 

  limit_except GET {

        allow 192.168.1.0/32;

        deny  all;

    }

####limit_rate

向客戶端相應的傳輸速度限制。這個速率制定的單位是 字節/秒鐘。 特殊值0禁止這個速度值限制。該限制是針對每個請求的, 爲此假設一個客戶端模擬打開兩個客戶端連接,總的被現在的速度將是制定速率的2被。

 

速度也能用$limit_rate變量來設置。當速度限制在一個特定的條件下發生時,這種現實是比較好的。例如:

server {

        if ($slow) {

            set $limit_rate 4k;

        }

        …

    }

另外這個速度限制也能在X-Accel-Limit-Rate相應頭中指令中進行控制。本指令的功能能夠通過proxy_ignore_headers指令來限制。

####limit_rate_after

設置初始之後,對客戶端的進一步相應的速度限制.

location /flv/ {

        flv;

        limit_rate_after 500k;

        limit_rate       50k;

    }

ngx_http_upstream_module模塊

用於定義組負載均衡組

####upstream name {.....}

定義後端的服務器組;引入一個新的上下文;

默認的調度方法是wrr;

作用域:http

####server address [parameters];

定義服務器地址和相關的參數;

地址格式:

IP[:PORT]

HOSTNAME[:PORT]

Unix:/PATH/TO/SOME_SOCK_FILE

參數:

Weight=number    //權重,默認爲1

max_fails=number  //失敗嘗試的最大次數;

fail_timeout=time  //設置服務器爲不可用狀態的超時時長;

Backup  //把服務器標記爲“備用”狀態;

Down  //手動標記其爲不可用,一般灰度上線時可採用該方式;

####least_conn;

最少連接調度算法:

server擁有不同權重時爲wlc;當所有後端主機的連接數相同時;則使用wrr進行調度;

####least_time_header | last byte;

最短平均響應時長和最少連接;

Header:response_header;

Last_byte:full_response;

plus有效

####ip_hash

源地址綁定;

####hash key [consistent];

基於指定的keyhash表實現請求調度,此處的key可以文本、變量或者二者的組合;

Consistent:參數,指定使用一致性hash算法;

示例:

Hash $request_uri consistent

Hash $remote_addr

Hash $cookie_name

####keepalive connections;

可以使用長連接的連接數量;

ngx_stream_core_module模塊;

Listen address:port   [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport]

默認爲監聽tcp協議;

Udp:監聽udp協議的端口;

ngx_stream_proxy_module模塊

允許在tcp,udpUnix域套接字代理的數據流;

proxy_pass adress;

設置代理服務器的地址。地址可以指定爲域名或IP地址和端口;

作用域:server

示例:

proxy_pass localhost12345;

或作爲UNIX域套接字路徑:

proxy_pass unix/tmp/stream.socket;

如果域名解析爲多個地址,則所有這些地址都將以循環方式使用。此外,地址可被指定爲一個 服務器組。

地址也可以使用變量(1.11.3)指定:

proxy_pass $ upstream

proxy_connect_timeout time

定義與代理服務器建立連接的超時;

默認超時時間是60s

作用域:streamserver

proxy_timeout timeout;

設置timeout兩者之間的連續度或者寫在客戶端或代理服務器連接操作。如果在此時間內沒有數據傳輸,則連接關閉;

 

 

六、Nginx虛擬主機配置詳解

1、什麼是虛擬主機?

虛擬主機是特殊的軟硬件技術,他把一臺服務器主機分成一臺臺“虛擬主機”,每臺虛擬主機都可以成爲一個獨立的網站,具有獨立的域名,並可提供獨立的Internet服務;

利用虛擬主機的特性,Nginx完全可以使用一臺服務器提供完全獨立的WWWMAILFTP服務或同時爲多個站點進行服務。

2、虛擬主機的類別

基於IP的虛擬主機

基於端口的虛擬主機

基於域名的虛擬主機

該種虛擬主機爲最常用的虛擬主機形式;

3、虛擬主機的配置

1、基於IP的虛擬主機

server {

    listen       80;//監聽80端口

    server_name  172.16.80.72;//服務器地址爲

 

    #charset koi8-r;

    #access_log  /var/log/nginx/log/host.access.log  main;

 

    location / {

        root   /nginx/ip;//該路徑爲本定義虛擬主機的Document的路徑

#       index.html;//默認的主頁面可以不寫;

    }

    error_page  404              /404.html;

        location = /404.html {//定義404錯誤頁面

        root /nginx/ip;

        }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root  /nginx/ip

    }

 

2、基於端口的虛擬主機

server {

    listen       81;//監聽80端口

    server_name  172.16.80.72;//服務器地址爲

}

3、基於域名的虛擬主機

server {

    listen       80;//監聽80端口

    server_name  www.guoruilin.com;//服務器地址爲

}

 

 

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章