深入理解Nginx
一、Nginx是什么?
二、為什么選擇Linux ?
三、Nginx生成的文件有哪些?
四、Nginx的配置詳解?
五、模塊功能詳解
六、虛擬主機配置詳解?
一、Nginx是什么?
Nginx(engine X)是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由lgor Sysoev為Rambler.ru(該站點為俄羅斯第二大站點)研發,第一個公開版0.1.0發布于2004年10月4日。其源代碼以類似BSD許可證的形式發布,因為它的穩定性,功能擴展性,示例配置文件和低系統資源的消耗而聞名。
二、為什么選擇Nginx?
1、更快~
u 單次請求會得到更快的響應
u 在高峰期(數以萬計的并發請求時)比其他web服務器更快的響應;
2、高擴展性~
u 它完全是由多個不同功能、不同層次、不同類型且耦合度低的模塊組成;
3、高可靠性~
u 官方提供的常用模塊穩定性高,master進程在worker進程出錯時可 以快速“拉起”新的worker子進程提供服務;
4、低內存消耗~
u 高并發
5、單機可支持10萬以上的并發連接~
6、熱部署~
u Master管理進程與worker工作進程分離設計,使得Nginx能夠提供熱部署功能,即可在7×24小時不間斷服務的前提下,進行Nginx的可執行文件的升級;
7、最自由的BSD許可協議~
u 免費,支持二次開發;
三、Nginx的安裝和啟動
1、安裝Nginx
配置Nginx的yum源
[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、配置文件的組成
u 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 為0號cpu
//0000 0010 為1號cpu ……
//參數可謂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
u Event
? 事件驅動的相關配置
worker_connections number; //每個worker進程所能打開的最大并發連接數;
//服務器承載的最大并發為
//worker_processes * worker_connections
use method //指明并發連接請求的處理方法
//一般為 use epoll;
accept_mutex on|off //處理新的連接請求的方法
//on意味著由各worker輪流處理新請求,
//off意味著每個心情求到達都會通知worker進程
u 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 { …. }
在一個server中location配置段可存在多個,用于實現從uri到文件系統弄的路徑映射;nginx會根據用戶請求的URI來檢查定義的所有location,并找出一個最佳匹配,而后應用其配置;
=:對URI做精確匹配;例如
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;
是否緩存查找時發生錯誤的文件一類的信息;
u 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時,其會將location的uri傳遞給后端主機;
server {
…
server_name HOSTNAME;
location /uri/ {
proxy http://hos[:port];
}
…
}
http://HOSTNAME/uri –> http://host/uri
proxy_pass后面的路徑是一個uri時,其會將location的uri替換為proxy_pass的uri;
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; //fastcgi的server地址;
作用域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;
適用域:http,server,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>414(uri太大請求)信息被返回。一個請求頭部域也不能超過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_module和ngx_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];
基于指定的key的hash表實現請求調度,此處的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,udp和Unix域套接字代理的數據流;
proxy_pass adress;
設置代理服務器的地址。地址可以指定為域名或IP地址和端口;
作用域:server;
示例:
proxy_pass localhost:12345;
或作為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、MAIL、FTP服務或同時為多個站點進行服務。
2、虛擬主機的類別
u 基于IP的虛擬主機
u 基于端口的虛擬主機
u 基于域名的虛擬主機
該種虛擬主機為最常用的虛擬主機形式;
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