1. 程式人生 > >燕姐的 Linux 私房菜之(30)—— Nginx

燕姐的 Linux 私房菜之(30)—— Nginx

1、Nginx 簡介

Nginx官網:http://nginx.org/
Nginx,即 engine X,是為了解決 C10k 問題出現的。
(1)Nginx 的特性
1)模組化設計、較好擴充套件性;
2)高可靠性,master/worker架構;
3)支援熱部署,不停機更新配置檔案、更換日誌、更新伺服器程式版本;
4)低記憶體消耗,10000 個 keep-alive 連線模式下的非活動連線僅消耗 2.5M 記憶體;
5)Nginx 是 event-driven 的,支援 AIO 非同步 IO,mmap 記憶體對映。
(2)Nginx 的基本功能
1)靜態資源的web伺服器;
2)http協議的反向代理伺服器;
3)pop3, smpt, imap4等郵件協議的反向代理;
4)能快取開啟的檔案(元資料)、支援FastCGI(php-fpm),uWSGI(Python Web Framwork)等協議;
5)模組化(非DSO機制),過濾器zip,SSL;
(3)web服務相關的功能:
虛擬主機(server)、keepalive、訪問日誌(支援基於日誌緩衝提高其效能)、url rewirte、路徑別名、基於IP及使用者的訪問控制、支援速率限制及併發數限制;
(4)Nginx的基本架構:master/worker
1)一個master程序,可生成一個或多個worker程序;
2)事件驅動:epoll(Linux),kqueue(FreeBSD),/dev/poll(Solaris);
3)訊息通知:select,poll,rt signals;
4)支援sendfile,sendfile64;
5)支援AIO,mmap。
master:載入配置檔案、管理worker程序、平滑升級
worker:http服務,http代理,fastcgi代理
(5)Nginx 的模組型別
1)核心模組:core module;
2)Standard HTTP modules;
3)Optional HTTP modules;
4)Mail modules;
5)3rd party modules;
(6)Nginx 的用途
1)靜態資源的web伺服器;
2)http伺服器反向代理。

2、Nginx 的安裝配置

(1)Nginx的安裝
# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-debug


# make && make install
(2)Nginx的配置檔案
配置檔案的組成部分:
主配置檔案:nginx.conf(其中配置有include conf.d/* .conf),/etc/nginx/conf.d/*.conf;
fastcgi的配置檔案:fastcgi_params,uwsgi_params。
配置指令(必須以分號結尾):Directive value1 [value2...];
支援使用變數:
內建變數:由模組引入;
自定義變數:set variable value;
引用變數:$variable
配置檔案組織結構

main block
event {
	...
}
http {
	...
}

http配置段:

http {
	...
	server {
		...
		server_name 
		root 
		alias
		location /uri/ {
			...	
		}
		...
	}
	server {
		...
	}
}

(3)main配置段
類別:正常執行必備的配置;優化效能相關的配置;用於除錯、定位問題的配置。
正常執行必備的配置:
1)user USERNAME [GROUPNAME];
指定用於執行worker程序的使用者和組;
user nginx nginx;
2)pid /PATH/TO/PID_FILE;
指定nginx程序的pid檔案路徑;
pid /var/run/nginx.pid;
3)worker_rlimit_nofile #;
指定一個worker程序所能夠開啟的最大檔案描述符數量;
4)worker_rlimit_sigpending #;
指定每個使用者能夠發往worker程序的訊號的數量;
效能優化相關的配置:
1)worker_processes #;
worker程序的個數;通常應該為物理CPU核心數量減1;可以為"auto",實現自動設定;
2)worker_cpu_affinity CPUMASK CPUMASK ...;
CPUMASK:0001,0010,0100,1000;
worker_cpu_affinity 00000001 00000010 00000100;
3)worker_priority nice;
nice 值的取值範圍為:[-20, 19]
除錯、定位問題的配置:
1)daemon off|on;
是否以守護程序方式啟動nignx;
2)master_process on|off;
是否以master/worker模型執行nginx;
3)error_log /PATH/TO/ERROR_LOG level;
錯誤日誌檔案及其級別;出於除錯的需要,可以設定為debug;但debug僅在編譯時使用了“–with-debug”選項時才有效;
(4)event 配置段
1)worker_connections #;
每個worker程序所能夠響應的最大併發請求數量;
worker_proceses * worker_connections
2)use [epoll|rgsig|select|poll];
定義使用的事件模型;建議讓nginx自動選擇;
3)accept_mutex [on|off];
各worker接收使用者的請求的負載均衡鎖,啟用時,表示用於讓多個worker輪流地、序列化地響應新請求;
4)lock_file /PATH/TO/LOCK_FILE;
(5)http 配置段
套接字或主機相關的指令:
1)server {}
定義一個虛擬主機;

server {
		listen PORT;
		server_name NAME;
		root /PATH/TO/DOCUMENTROOT;
}

注意:
(a) 基於port:listen指令監聽在不同的埠;
(b) 基於hostname:server_name指令指向不同的主機名;
2)listen

listen address[:port] [default_server] [ssl] [http2 | spdy] 
listen port [default_server] [ssl] [http2 | spdy]

default_server:設定預設虛擬主機;用於基於IP地址,或使用了任意不能對應於任何一個server的name時所返回站點;
ssl:用於限制只能通過ssl連線提供服務;
spdy:SPDY protocol(speedy),在編譯了spdy模組的情況下,用於支援SPDY協議;
http2:http version 2;
3)server_name NAME [...];
後可跟一個或多個主機名;名稱還可以使用萬用字元和正則表示式(~);
(a) 首先做精確匹配;例如:www.magedu.com
(b) 左側萬用字元;例如:* .magedu.com;
© 右側萬用字元,例如:www.magedu.* ;
(d) 正則表示式,例如:~^.*.magedu.com$;
(e) default_server;
4)tcp_nodelay on|off;
對keepalive模式下的連線是否使用TCP_NODELAY選項;
5)tcp_nopush on|off;
是否啟用TCP_NOPUSH(FREEBSE)或TCP_CORK(Linux)選項,僅在sendfile為on時有用;
6)sendfile on|off;
是否啟用sendfile功能;
路徑相關的指令:
7)root
設定web資源的路徑對映;用於指明請求的URL所對應的文件的目錄路徑;

server {
	...
	root  /data/www/vhost1;
}

http://www.magedu.com/images/logo.jpg --> /data/www/vhost1/images/logo.jpg

server {
	...
	server_name  www.magedu.com;
	location /images/ {
		root  /data/imgs/;
		...
	}
}

http://www.magedu.com/images/logo.jpg --> /data/imgs/images/logo.jpg
8)location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
功能:允許根據使用者請求的URI來匹配定義的各location,匹配到時,此請求將被相應的location塊中的配置所處理;簡言之,即用於為需要用到專用配置的uri提供特定配置;

server {
		...
		server_name www.magedu.com;
		root /data/www;
		location  /admin/  {
				...
		}
}

=:URI的精確匹配;
~:做正則表示式匹配,區分字元大小寫;
~* :做正則表示式匹配,不區分字元大小寫;
^~:URI的左半部分匹配,區分字元大小寫;
^~* :URI的左半部分匹配,不區分字元大小寫;
匹配優先順序:精確匹配=、^或~*、不帶符號的URL;
9)alias
只能用於location配置段,定義路徑別名;

location  /images/ {
		root /data/imgs/;
}
location  /images/  {
		alias /data/imgs/;
}

注意:
root指令:給定的路徑對應於location的“/”這個URL;
/images/test.jpg --> /data/imgs/images/test.jpg
alias指令:給定的路徑對應於location的“/uri/"這個URL;
/images/test.jpg --> /data/imgs/test.jpg
10)index
index file ...;定義預設主頁面;
11)error_page code ... [=[response]] uri;
根據http的狀態碼重定向錯誤頁面;

error_page  404  /404.html
error_page  404  =200  /404.html  (以指定的響應狀態碼進行響應)

12)try_files file ... uri;
try_files file ... =code;
嘗試查詢第1至第N-1個檔案,第一個即為返回給請求者的資源;若1至N-1檔案都不存在,則跳轉至最後一個uri(必須不能匹配至當前location,而應該匹配至其它location,否則會導致死迴圈);
客戶端請求相關的配置:
13)keepalive_timeout timeout [header_timeout];
設定keepalive連線的超時時長;0表示禁止長連線;預設為75s;
14)keepalive_requests number;
在keepalived連線上所允許請求的最大資源數量;預設為100;
15)keepalive_disable none | browser ...;
指明禁止為何種瀏覽器使用keepalive功能;
16)send_timeout #;
傳送響應報文的超時時長,預設為60s;
17)client_body_buffer_size size;
接收客戶請求報文body的緩衝區大小;預設為16k;超出此指定大小時,其將被移存於磁碟上;
18)client_body_temp_path path [level1 [level2 [level3]]];
設定用於儲存客戶端請求body的臨時儲存路徑及子目錄結構和數量;
client_body_temp_path /var/tmp/client_body 2 2;
對客戶端請求的進行限制:
19)limit_excpet METHOD {...}
對指定範圍之外的其它的方法進行訪問控制;

limit_except  GET {
		allow  172.16.0.0/16;
		deny all;
}

20)limit_rate speed;
限制客戶端每秒鐘所能夠傳輸的位元組數,預設為0表示無限制;
檔案操作優化相關的配置:
21)aio on|off;
22)directio size|off;
23)open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以快取以下三種資訊:
(a) 檔案描述符、檔案大小和最近一次的修改時間;
(b) 開啟的目錄的結構;
© 沒有找到的或者沒有許可權操作的檔案的相關資訊;
max=N表示可快取的最大條目上限;一旦達到上限,則會使用LRU演算法從快取中刪除最近最少使用的快取項;
inactive=time:在此處指定的時長內沒有被訪問過的快取項是為非活動快取項,因此直接刪除;
24)open_file_cache_errors on | off;
是否快取找不到其路徑的檔案,或沒有許可權沒有許可權訪問的檔案相關資訊;
25)open_file_cache_valid time;
每隔多久檢查一次快取中快取項的有效性;預設為60s;
26)open_file_cache_min_uses number;
快取項在非活動期限內最少應該被訪問的次數;
ngx_http_access_module模組的配置(基於IP的訪問控制):
27)allow address | CIDR | unix: | all;
28)deny address | CIDR | unix: | all;
ngx_http_auth_basic_module模組的配置(basic認證):
29)auth_basic string | off;
使用http basic認證協議對使用者進行認證;
30)auth_basic_user_file file;
實現使用者認證的賬號檔案;
檔案格式:
name1:password1
name2:password2:comment
密碼格式:
encrypted with the crypt() function;
md5加密;

location /admin/ {
		auth_basic "Admin Area";
		auth_basic_user_file /etc/nginx/.ngxhtpasswd;
}

(6)ngx_http_log_module模組的配置(訪問日誌)
31)log_format name string ...;
定義日誌格式及其名稱;日誌格式一般通過呼叫內建變數來定義;
32)access_log path [format [buffer=size [flush=time]]];
access_log off;
訪問日誌檔案路徑,格式名稱以及快取大小和刷寫時間間隔;建議定義緩衝以提升效能;
33)open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
(7)ngx_http_stub_status_module模組配置
34)stub_status;
通過指定的uri輸出stub status;

Active connections: 291 
server accepts handled requests
16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106 				
					
Active connections:當前活動的客戶端連線數;
accepts:已經接受的客戶端連線總數量;
handled:已經處理過的客戶端連線總數量;
requests:客戶端的總的請求數量;
Readking:正在讀取的客戶端請求的數量;
Writing:正向其傳送響應報文的連線數量;
Waiting:等待其發出請求的空閒連線數量;

(8)ngx_http_referer_module模組配置(基於請求報文中的Referer首部的值做訪問控制)
35)valid_referers none | blocked | server_names | string ...;
none:請求報文不存在referer首部;
blocked:請求報文中存在referer首部,但其沒有有效值,或其值非以http://或https://開頭;
server_names:其值為一個主機名;
arbitrary string:直接字串,可以使用*萬用字元;
regular expression:以~起始的正則表示式;
內建變數:$invalid_referer(所有不能符合valid_referer指定定義的引用請求均為不合法引用):

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

(9)ngx_http_ssl_module模組配置
ssl_certificate file;
證書檔案路徑;
ssl_certificate_key file;
證書對應的私鑰檔案;
ssl_ciphers ciphers;
指明由nginx使用的加密演算法,可以是OpenSSL庫中所支援各加密套件;
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
指明支援的ssl協議版本,預設為後三個;
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
指明ssl會話快取機制;
builtin:使用OpenSSL內建的ssl會話快取,對機制為各worker私有;
shared:在各worker之間使用一個共享的快取;
name:獨有名稱;
size:快取空間大小;
ssl_session_timeout time;
ssl會話超時時長;即ssl session cache中的快取有效時長;
(10)ngx_http_rewrite_module模組配置
將請求的url基於正則表示式進行重寫:
http --> https, domain1.tld --> domain2.tld, uri1 --> uri2, …
指令:rewrite regex replacement [flag];
regex:正則表示式,用於匹配使用者請求的url;
replacement:重寫為的結果;
[flag]:
last:重寫完成之後停止對當前uri的進一步處理,改為對新url的新一輪處理;
break:重寫完成之後停止當uri的處理,轉向其後面的其它配置;
redirect:重寫完成之後會返回客戶端一個臨時的重定向,由客戶端對新的url重新發起請求(302);
permanent:重寫完成之後會返回客戶端一個永久的重定向,由客戶端對新的url重新發起請求(301);

server {
		...
		rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
		rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
		return  403;
		...
}				

http://www.magedu.com/download/a/b/c/media/32.wmv -->
/download/a/b/c/mp3/32.mp3
PCRE正則表示式元字元
字元匹配:., [ ], [^]
次數匹配:* , +, ?, {m}, {m,}, {m,n}
位置錨定:^, $
或者:|
分組:(), 後向引用, $1, $2, …
if (condition) { … }
條件判斷,引用新的配置上下文;
condition:
比較表示式:
==,!=
~:模式匹配,區分字元大小寫;
~* :模式匹配,不區分字元大小寫;
!~:模式不匹配,區分字元大小寫;
!~*: 模式不匹配,不區分字元大小寫;
檔案及目錄判斷:
-f, !-f:是否存在且為普通檔案;
-d, !-d: 是否存在且為目錄;
-e, !-e:是否存在;
-x, !-x:是否存在且可執行;
return code [text];
return code URL;
return URL;
立即停止對請求的uri的處理,並返回指定的狀態碼;
set $variable value;
變數賦值;
rewrite_log on | off;
是否將重寫日誌記入error log中,預設為關閉;
除錯方法:錯誤日誌debug;開啟rewrite_log;
(11)ngx_http_gzip_module模組配置
gzip on | off;
啟用或禁用gzip壓縮響應報文;
gzip_comp_level level;
壓縮比,1-9,預設為1;
gzip_disable regex ...;
regex是為用於匹配客戶端響應器型別的正則表示式;表示對何種瀏覽器禁止使用壓縮功能;
gzip_min_length length;
觸發壓縮功能的響應報文的最小長度;
gzip_http_version 1.0 | 1.1;
設定啟用壓縮功能時,協議的最小版本;
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
定義對客戶端請求的具有何種請求屬性的資源啟用壓縮功能;如expired則表示對由於使用了expire首部而無法快取的物件啟用壓縮功能;
gzip_types mime-type ...;
指明僅對哪些型別的資源執行壓縮操作;即壓縮過濾器;
示例:

gzip  on;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_disable msie6;
gzip_min_length 2;
gzip_types text/plain text/css text/xml application/x-javascript application/xml application/json application/java-script;				

(12)ngx_http_fastcgi_module模組配置(fastcgi協議代理)
LAMP:
httpd+php(module (libphp5.so),cgi,fastcgi(後端提供cgi server process))
Client:fastcgi client;
Server:fastcig Server;
LNMP:
nginx:ngx_http_fastcgi_module;
php-fpm:fastcgi;
php-mysql:mysql-server,mariadb-server;
編譯php工作為fpm機制時:
./configure ... --enable-fpm ...
php-fpm的工作方式:

listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic|static 
		pm.start_servers:啟動fpm程序時啟動的工作程序數量;
		pm.min_spare_servers:最少空閒程序數;
		pm.max_spare_servers:最大空閒程序數;
		pm.max_children:最大工作程序數;
user = USERNAME
group = GROUPNAME

fastcgi模組指令:
1)fastcgi_pass address;
address為fastcgi server監聽的地址;
示例:fastcgi_pass 127.0.0.1:9000;
2)fastcgi_index name;
定義fastcgi應用的預設主頁;
示例:fastcgi_index index.php;
3)fastcgi_param parameter value [if_not_empty];
設定傳遞給後端fastcgi server引數及其值;
示例:fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
/index.php --> /scripts/index.php
http://www.magedu.com/users.php?username=tom
4)fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size];
定義快取:快取空間等;可應用的上下文 :http;快取機制:
元資料:記憶體,即為keys_zone;
資料:磁碟,即為path;

levels=#[:#[:#]]
levels=2:1
keys_zone=name:size
name: cache的識別符號;
size:元資料cache大小;
max_size:快取空間上限;

5)fastcgi_cache zone | off;
呼叫定義過的快取;zone即為通過fastcgi_cache_path定義快取時其keys_zone引數中的name;
6)fastcgi_cache_key string;
定義如何使用快取鍵;
使用示例:fastcgi_cache_key $request_uri;
7)fastcgi_cache_methods GET | HEAD | POST ...;
為何請求方法對應的請求進行快取,預設為GET和HEAD;
8)fastcgi_cache_min_uses number;
快取項的最少使用次數;
9)fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | off ...;
是否可使用stale快取項響應使用者請求;
10)fastcgi_cache_valid [code ...] time;
對不同響應碼的響應設定其可快取時長;
示例:

fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404      1m;					

注意:呼叫快取時,至少應該指定三個引數

fastcgi_cache
fastcgi_cache_key
fastcgi_cache_valid 

(13)ngx_http_proxy_module模組配置(http或https協議代理)
1)proxy_pass URL;
應用上下文:location, if in location, limit_except;
proxy_pass後面的路徑不帶uri時,其會將location的uri傳遞給後端的主機;下面的示例會將/uri/傳遞給backend伺服器;

location  /uri/ {
		proxy_pass http://hostname;
}

proxy_pass後面的路徑是一個uri時,其會將location的uri替換為後端主機自己的uri;

location  /uri/ {
		proxy_pass http://hostname/new_uri/;
}

如果location定義其uri時使用的正則表示式模式匹配,則proxy_pass後的路徑不能夠使用uri;

location  ~*  \.(jpg|gif|jpeg)$  {
		proxy_pass  http://HOSTNAME;
}

此處的http://HOSTNAME後面不能有任何uri,哪怕只有/也不可以;
2)proxy_set_header field value;
用於proxy server向backend server發請求報文時,將某請求首部重新賦值,或在原有值後面新增一個新的值; 也可以新增自定義首部;
示例:

proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

原有請求報文中如果存在X-Forwared-For首部,則將remote_addr以逗號分隔補原有值後,否則則直接新增此首部;
快取相關的選項(快取要先定義,後呼叫):
3)proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size]
定義快取;可用上下文為http;
4)proxy_cache zone | off;
呼叫快取;可用上下文 為http, server和location;
5)proxy_cache_key string;
定義快取鍵;
proxy_cache_key $scheme$proxy_host$request_uri;
6)proxy_cache_valid [code ...] time;
對不同響應碼的響應設定其可快取時長;
示例:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404      1m;	

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
跟連線相關的選項:
7)proxy_connect_timeout time;
定義與後端伺服器建立連線的超時時長;預設為60s,不建議超出75s;
8)proxy_send_timeout time;
把請求傳送給後端伺服器的超時時長;預設為60s;
9)proxy_read_timeout time;
等待後端伺服器傳送響應報文的超時時長;
(14)ngx_http_headers_module模組配置
1)add_header name value [always];
向響應報文新增自定義首部,併為其賦值;
2)expires [modified] time;
expires epoch | max | off;
允許或禁止向響應報文的Cache-Control或Expires首部新增新值或修改其值;
(15)ngx_http_upstream_module模組配置
用於將多個伺服器定義成伺服器組,而由proxy_pass, fastcgi_pass等指令進行引用;
1)upstream name { ... }
定義一個後端伺服器組,name為組名稱;僅能用於http上下文 ;
2)server address [parameters];
在upstream中定義一個伺服器及其相關引數;僅能用於upstream上下文;
常用引數:
weight=number:定義伺服器權重,預設為1;
max_fails=number:最大失敗連線嘗試次數,失敗連線超時時長由fail_timeout引數指定;
fail_timeout=number:等待目標伺服器傳送響應的時長;
backup:備用伺服器,所有主伺服器均故障時才啟用此主機;
down:手動標記其不再處理任何使用者請求;
使用方法:
(a) 定義upstream伺服器組:

upstream websrvs {
		server 172.16.100.68 weight=2 max_fails=2 fail_timeout=6s;
		server 172.16.100.6  weight=1 max_fails=2 fail_timeout=6s;
}		

(b) 在反代場景中(proxy_pass, fastcgi_pass, …)進行呼叫:

location / {
		proxy_pass http://websrvs/;
}

3)ip_hash
源地址hash,把來自同一個ip地址的請求始終發往同一個backend server,除非此backend server不可用;
4)least_conn
最少連線;當各server權重不同時,即為加權最少連線;
5)health_check [parameters];
健康狀態檢測機制;只能用於location上下文;
常用引數:
interval=time檢測的頻率,預設為5秒;
fails=number:判定伺服器不可用的失敗檢測次數;預設為1次;
passes=number:判定伺服器可用的失敗檢測次數;預設為1次;
uri=uri:做健康狀態檢測測試的目標uri;預設為/;
match=NAME:健康狀態檢測的結果評估呼叫此處指定的match配置塊;
6)match name { ... }
對backend server做健康狀態檢測時,定義其結果判斷機制;只能用於http上下文;
常用的引數:
status code[ code …]: 期望的響應狀態碼;
header HEADER[operator value]:期望存在響應首部,也可對期望的響應首部的值基於比較操作符和值進行比較;
body:期望響應報文的主體部分應該有的內容;
7)hash key [consistent];
指明基於hash方式進行排程時,其hash key;
hash $remote_addr相當於ip_hash
常用的hash key:
$cookie_name:將一個使用者的請求始終發往同一個backend server,能實現會話繫結的功能;此處的name為cookie某些引數的名稱,此處常用的有cookie_username;
$request_uri: 將對同一個uri的請求始終發往同一個backend server,後端為cache server時特別有用;
8)session會話保持:
session sticky:基於ip,nginx還可基於請求報文首部中的多種資訊,例如cookie, uri;
session cluster:每個server均把建立和維護session同步叢集中的其它主機;僅適用於較小規模的環境;
session server:使用一個共享的儲存服務儲存session資訊;

location ~* \.php$ {
	proxy_pass
}
location / {
	proxy_pass
}