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能夠提供熱部署功能,即可在7×24小時不間斷服務的前提下,進行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學習筆記 

四、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.com www.magedu.*

//*處可為任意字符

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

Server_name的匹配機制如下:

a. 字符串精確匹配

b. 左側*通配符

c. 右側*通配符

d. 正則表達式

 

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

Sendfile   on|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 ….;     //默認資源:http,server,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;

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

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

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

7、gzip_types mime-type …;

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

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

Ngx_http_ssl_module模塊;

1、 ssl on | off;

Enables the HTTPS protocol for the given virtual server.

2、ssl_certificate file;

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

3、ssl_certificate_key file;

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

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

支持ssl協議版本,默認為后三個;

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

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

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

6、ssl_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到客戶端。

3、 rewrite_log on | off;

是否開啟重寫日志;

4、 if (condition) { … }

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

condition

比較操作符:

==

!=

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

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

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

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

文件及目錄存在性判斷:

-e, !-e

-f, !-f

-d, !-d

-x, !-x

5、set $variable value;

設置用戶自定義變量;

Ngx_http_refer_modulem模塊;

1、valid_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;

適用域:location,if in location,limit_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;

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

適用域:http,server,location

##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地址;

作用域location,if 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;

適用域:httpserver,location;

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

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

Exact:精確匹配

####keepalive_disable

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

語法:keepalive_disable  none |browser….;

默認:keepalive_disable  msie6;

適用域:http,server,location;

####keepalive_requests number;

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

默認:keepalive_requests 100;

適用域:http,server,location

####keepalive_timeout

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

語法:keepalive_timeout timeout[header_timeout];

默認:keepalive_timeout 75s;

適用域:http,server,location

####large_client_header_buffers numbersize;

設置當讀取大的客戶端請求時緩沖的最大數目和尺寸。在緩沖的一個請求行不能超過這個尺寸?;蛘呖蛻舳?/span>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;

作用域:stream,server

proxy_timeout timeout;

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

 

 

六、Nginx虛擬主機配置詳解

1、什么是虛擬主機?

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

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

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;  //服務器地址為

}

 

 

 

 

 

 

 

原創文章,作者:guo_ruillin,如若轉載,請注明出處:http://www.www58058.com/66628

(0)
guo_ruillinguo_ruillin
上一篇 2017-03-15
下一篇 2017-03-15

相關推薦

  • ?Linux基礎知識之磁盤及文件系統管理(一)

    1.設備類型:     塊設備(block):隨機訪問,數據交換單位是"塊"     字符設備(character):線性訪問,數據交換的單位是"字符" 2.設備文件:FHS     /dev &nb…

    Linux干貨 2016-08-29
  • Linux進程管理-初級

    Linux進程管理-初級 背景: 在學習完Linux進程管理后,發現這一塊的知識點比較多,很多都是自己以前沒有接觸過的,而且這部分知識對今后的工作有很大幫助,在這里做個學習的總結,供以后復習。 進程介紹: 什么是進程 進程(Process):運行中的程序的一個副本,是被載入內存的一個指令集合,進程有進程ID(Process ID,PID),用來標記每個進程,…

    2017-08-26
  • iptables學習筆記

    這幾學習iptables,踩了一些坑,作下總結。 1、三表 (1)filter:默認表,處理本機數據包,包含input、output和forward (2)nat:處理源或目的IP/端口轉換,包含prerouting、postrouting、output (3)mangle:處理高級路由信息,包含prerouting、output、input、forward…

    Linux干貨 2016-06-09
  • Linux的哲學思想第二篇

    Linux的哲學思想 一切皆文件 物理終端 物理終端指的是顯示器等硬件終端設備,文件存在于 /dev/console 這個路徑下 虛擬終端 虛擬終端指的是在linux命令行連接的終端,文件存在于 /dev/tty# [1,6] 這個路徑下 串行終端 指的是使用計算機串行端口連接的終端設備,文件存在于 /dev/ttyS# 這個路徑下 偽終端 指的是在Xshe…

    2018-02-26
  • bash變量和邏輯運行

    bash 特性及bash腳本編程初步       終端,附著在終端的接口程序:      GUI:KDE,GNome,Xfce      CLI: /etc/shells              b…

    Linux干貨 2016-12-23
  • 我與Linux的第一次親密接觸

        作為一個新手,經過一周的學習,我對Linux目前有了些許的了解,從Linux的發展史中,開源共享精神深深的感染了我,也使得我對Linux的興趣更加濃厚。對于一個一直翹計算機課的我來說,入門和基礎是一項非常艱巨的任務,初期為了搭建學習的環境,也是費了不小的功夫,相信許多萌也對此有很大的感觸,在這里,我來和大家分享一下如何去構建環境?!?/p>

    Linux干貨 2017-03-26
欧美性久久久久