nginx詳解_第1頁
已閱讀1頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Nginx詳解,——介紹、模塊、運維,薛長俊 2013.8,目 錄,目 錄,基本HTTP特性,處理靜態(tài)文件,索引文件以及自動索引;打開文件描述符緩存; 使用緩存加速反向代理;簡單負載均衡以及容錯; 遠程FastCGI,uwsgi,SCGI,和memcached服務的緩存加速支持; 模塊化的架構。過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT,SSI以及圖像縮放。在SSI 過濾器中,一

2、個包含多個SSI的頁面,如果經由FastCGI或反向代理處理,可被并行處理; 支持SSL,TLS SNI。,其他HTTP特性,基于名字和IP的虛擬主機; Keep-alive和pipelined連接支持; 靈活的配置; 重新加載配置以及在線升級時,不需要中斷正在處理的請求; 自定義訪問日志格式,帶緩存的日志寫操作以及快速日志輪轉; 3xx-5xx錯誤代碼重定向; 重寫(rewrite)模塊:使用正則表達式改變URI; 根

3、據客戶端地址執(zhí)行不同的功能; 基于客戶端IP地址和HTTP基本認證機制的訪問控制; 支持驗證HTTP referer; 支持PUT、DELETE、MKCOL、COPY以及MOVE方法; 支持FLV流和MP4流; 速度限制; 來自同一地址的同時連接數或請求數限制; 嵌入Perl語言。,郵件代理服務器特性,使用外部HTTP認證服務器重定向用戶到IMAP/POP3后端;使用外部HTTP認證服務器認證用戶后重定向連接到內部SMT

4、P后端;支持的認證方式:POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;SSL支持;STARTTLS和STLS支持。,架構和可擴展性,一個主進程和多個工作進程,工作進程以非特權用戶運行; 支持的事件機制:kqueue(FreeBSD

5、4.1+)、epoll(Linux 2.6+)、rt signals(Linux 2.2.19+)、/dev/poll(Solaris 7 11/99+)、event ports(Solaris 10)、select以及poll; 眾多支持的kqueue特性包括EV_CLEAR、EV_DISABLE(臨時禁止事件)、NOTE_LOWAT、EV_EOF,可用數據的數量,錯誤代碼; 支持sendfile(FreeBSD 3.1+, Li

6、nux 2.2+, Mac OS X 10.5+)、sendfile64(Linux 2.4.21+)和sendfilev(Solaris 8 7/01+); 文件AIO(FreeBSD 4.3+, Linux 2.6.22+); DIRECTIO (FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, Mac OS X); 支持Accept-filters(FreeBSD 4.1+, NetBSD 5.

7、0+)和 TCP_DEFER_ACCEPT(Linux 2.4+); 10000個非活躍的HTTP keep-alive連接僅占用約2.5M內存; 盡可能避免數據拷貝操作。,測試過的系統和平臺,FreeBSD 3 — 10 / i386; FreeBSD 5 — 10 / amd64;Linux 2.2 — 3 / i386; Linux 2.6 — 3 / amd64;Solaris 9 / i386, sun4u;

8、Solaris 10 / i386, amd64, sun4v;AIX 7.1 / powerpc;HP-UX 11.31 / ia64;MacOS X / ppc, i386;Windows XP, Windows Server 2003.,目 錄,內核模塊,配置示例user nobody;worker_processes 4;#error_log /opt/nginx_logs/error.log;#

9、error_log /opt/nginx_logs/error.log notice;#error_log /opt/nginx_logs/error.log info;pid logs/nginx.pid;worker_rlimit_nofile 65535;,內核模塊,設置工作的進程數(可設置為可用cpu的數量)。 語法:worker_processes number默認值:1上下文:main指

10、定錯誤日志的文件和錯誤級別。 語法:error_log file [ debug | info | notice | warn | error | crit ]默認值:${prefix}/logs/error.log上下文:http,server,location定義一個worker進程可以同時處理的文件數量。 語法:worker_rlimit_nofile limit默認值:OS默認上下文:m

11、ain,事件模塊,配置示例。events { use epoll; worker_connections 65535;}指定事件響應模式。語法:use type默認值:在編譯時指定上下文:events設置每個worker進程所能處理的連接數。語法:worker_connections number默認值:1024上下文:events,HTTP內核模塊,配置范例http

12、 {includemime.types;default_typeapplication/octet-stream;sendfileon;keepalive_timeout65;gzipoff;upstream backup {server127.0.0.1:8010;server127.0.0.1:8011;keepalive10;},HTTP內核模塊,server {

13、listen192.168.1.1:80;server_nameexample.comwww.example.com;if ($http_user_agent ~ MSIE) {rewrite ^(.*)$ /msie/$1 break;}location / {[configurationA]},HTTP內核模塊,location ^~ /images/ {if ($

14、request_method = POST) {proxy_pass http://backup;}[configurationB]}location ~ /purge(/.*) {allow127.0.0.1;denyall;}}},HTTP內核模塊,為HTTP服務器提供配置上下文。 語法:http { ... }默認值: —上下文:main

15、開始設置虛擬主機。 語法:server { ... }默認值: —上下文:http為某個請求URI(路徑)建立配置。語法:location [ = | ~ | ~* | ^~ ] uri { ... }location @name { ... }默認值: —上下文:server, location,HTTP內核模塊,計算指定的condition的值。語法:if (condition)

16、{ ... }默認值:—上下文:server, location 停止處理當前這一輪的rewrite指令集。語法:break;默認值:—上下文:server, location, if停止處理并返回指定code給客戶端。語法:return code [text]; return code URL; return URL;默認值: —上下文:server, location, if,HT

17、TP內核模塊,匹配條件變量名;如果變量值為空或者是以“0”開始的字符串,則條件為假;使用“=”和“!=”運算符比較變量和字符串;使用“~”(大小寫敏感)和“~*”(大小寫不敏感)運算符匹配變量和正則表達式。正則表達式可以包含匹配組,匹配結果后續(xù)可以使用變量$1..$9引用。如果正則表達式中包含字符“}”或者“;”,整個表達式應該被包含在單引號或雙引號的引用中。使用“-f”和“!-f”運算符檢查文件是否存在;使用“-d”和“!

18、-d”運算符檢查目錄是否存在;使用“-e”和“!-e”運算符檢查文件、目錄或符號鏈接是否存在;使用“-x”和“!-x”運算符檢查可執(zhí)行文件; 正則正則匹配.xlsx,HTTP內核模塊,定義將要被作為默認頁的文件。語法:index file ...;默認值: index index.html; 上下文: http, server, location為請求設置根目錄 。語法: root path;默

19、認值: root html; 上下文: http, server, location, if in location 定義指定路徑的替換路徑。語法: alias path;默認值: — 上下文: location,HTTP內核模塊,設置虛擬主機名。語法:server_name name ...;默認值:server_name "";上下文:ser

20、ver設置客戶端的長連接在服務器端保持的最長時間。語法:keepalive_timeout timeout [header_timeout];默認值:keepalive_timeout 75s;上下文:http, server, location 為指令錯誤定義顯示的URI 。語法:error_page code ... [=[response]] uri;默認

21、值: —上下文:http, server, location, if in location,HTTP內核模塊,內嵌變量$arg_name,請求行中的name參數。$args,請求行中參數字符串。$binary_remote_addr,客戶端IP地址的二進制形式,長度總是4字節(jié)。$body_bytes_sent,nginx返回給客戶端的字節(jié)數,不含響應頭。$bytes_sent,nginx返回給客戶端的字節(jié)數(1.3.

22、8, 1.2.5)。$connection,連接的序列號(1.3.8, 1.2.5)。$content_length,“Content-Length”請求頭的值。$content_type,“Content-Type”請求頭的值。$cookie_name,名為name的cookie。$document_root,當前請求的root指令或alias指令的配置值。$document_uri,與$uri相同。$host,“Hos

23、t”請求頭的值,如果沒有該請求頭,則為與請求對應的虛擬主機的首要主機名。,HTTP內核模塊,$hostname,機器名稱。$http_name,任意請求頭的值;變量名的后半部為轉化為小寫并且用下劃線替代橫線后的請求頭名稱。$https,如果連接是SSL模塊,返回“on”,否則返回空字符串。$is_args,如果請求行帶有參數,返回“?”,否則返回空字符串。$limit_rate,允許設置此值來限制連接的傳輸速率。$msec,當

24、前時間,單位是秒,精度是毫秒。(1.3.9, 1.2.6)$nginx_version,nginx版本號。$pid,worker進程的PID。$query_string,與$args相同。$realpath_root,按root指令或alias指令算出的當前請求的絕對路徑。其中的符號鏈接都會解析成真是文件路徑。$remote_addr,客戶端IP地址。$remote_port,客戶端端口。$remote_user,為基本用

25、戶認證提供的用戶名。,HTTP內核模塊,$request,完整的原始請求行。$request_body,請求正文。在由proxy_pass指令和 fastcgi_pass指令處理的路徑中, 這個變量值可用。$request_body_file,請求正文的臨時文件名。處理完成時,臨時文件將被刪除。 如果希望總是將請求正文寫入文件,需要開啟client_body_in_file_only。 如果在被代理的請求或FastCGI請求中傳遞臨

26、時文件名,就應該禁止傳遞請求正文本身。 使用proxy_pass_request_body off指令 和fastcgi_pass_request_body off指令 分別禁止在代理和FastCGI中傳遞請求正文。$request_completion,請求完成時返回“OK”,否則返回空字符串。$request_filename,基于root指令或alias指令,以及請求URI,得到的當前請求的文件路徑。$request_met

27、hod,HTTP方法,通常為“GET”或者“POST”。$request_time,請求處理的時間,單位為秒,精度是毫秒(1.3.9, 1.2.6);請求處理時間從由客戶端接收到第一個字節(jié)開始計算。$request_uri,完整的原始請求行(帶參數)。,HTTP內核模塊,$scheme,請求協議類型,為“http”或“https”。$sent_http_name,任意的響應頭字段的值。 變量名的后半部為轉化為小寫并且用下劃線替代橫

28、線后的響應頭名稱。$server_addr,接受請求的服務器地址。為計算這個值,通常需要進行一次系統調用。為了避免系統調用,必須指定listen指令 的地址,并且使用bind參數。$server_name,接受請求的虛擬主機的首要主機名。$server_port,接受請求的虛擬主機的端口。$server_protocol,請求協議,通常為“HTTP/1.0”或“HTTP/1.1”。$status,響應狀態(tài)碼。$tcpinfo

29、_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space,客戶端TCP連接的信息,在支持套接字選項TCP_INFO的系統中可用。$uri,當前請求規(guī)范化以后的URI。變量$uri的值可能隨請求的處理過程而改變。 比如,當進行內部跳轉時,或者使用默認頁文件。,Log模塊,配置實例log_format main '$remote_addr - $remote_us

30、er [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"';access_log /spool/logs/

31、nginx-access.log main buffer=32k;為訪問日志設置路徑,格式和緩沖區(qū)大小。語法: access_log path [format [buffer=size]]; access_log off;默認值: access_log logs/access.log combined; 上下文: http, server, location, if in location, limit_excep

32、t 指定日志的格式。語法: log_format name string ...;默認值: log_format combined "..."; 上下文: http,Proxy模塊,配置范例proxy_temp_path /date/nginx/proxy_temp 1 2;proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=ng

33、_cache:400m inactive=1d max_size=60g;location / {proxy_set_headerHost$host;proxy_set_headerConnection“”;proxy_http_version1.1;proxy_cache_valid302 5m;proxy_cache_valid200 20d; proxy_cache

34、_key"$scheme$host$request_uri";proxy_cacheng_cache;proxy_passhttp://localhost:8000;},重新定義或者添加發(fā)往后端服務器的請求頭。語法: proxy_set_header field value;默認值: proxy_set_header Host $proxy_host;proxy_set_header

35、Connection close; 上下文: http, server, location設置代理使用的HTTP協議版本。語法: proxy_http_version 1.0 | 1.1;默認值: proxy_http_version 1.0; 上下文: http, server, location設置后端服務器的協議和地址。語法: proxy_pass URL;默認值: — 上下文:

36、location, if in location, limit_except,Proxy模塊,設置緩存的路徑和其他參數。語法:proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_thresho

37、ld=time];默認值: — 上下文: http指定用于頁面緩存的共享內存。語法: proxy_cache zone | off;默認值: proxy_cache off; 上下文: http, server, location,Proxy模塊,為不同的響應狀態(tài)碼設置不同的緩存時間。語法:proxy_cache_valid [code ...] time;默認值:—上下文:http,

38、server, location定義如何生成緩存的鍵。語法:proxy_cache_key string;默認值:proxy_cache_key $scheme$proxy_host$request_uri;上下文:http, server, location設置響應被緩存的最小請求次數。語法:proxy_cache_min_uses number;默認值:proxy_cache_min_uses 1

39、;上下文:http, server, location,Proxy模塊,Rewrite模塊,配置范例//多目錄轉成參數if ($host ~* (.*)/.domain/.com) { set $sub_name $1; rewrite ^/sort//(/d+)//?$ /index.php?act=sort&cid=$sub_name&id=$1 last; }//目錄對換rewrit

40、e ^/(/d+)/(.+)/ /$2?id=$1 last; //在用戶使用ie的使用重定向到/nginx-ie目錄下。if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /nginx-ie/$1 break; },Rewrite模塊,如果指定的正則表達式能匹配URI,此URI將被replacement參數定義的字符串改寫。rewrite指令按其在配置文件中出現的順序執(zhí)行。語法:

41、rewrite regex replacement [flag];默認值: —上下文:server, location, if可選的flag參數可以是其中之一:last:停止執(zhí)行當前這一輪的ngx_http_rewrite_module指令集,然后查找匹配改變后URI的新location;break:停止執(zhí)行當前這一輪的ngx_http_rewrite_module指令集;redirect:在replacemen

42、t字符串未以“http://”或“https://”開頭時,使用返回狀態(tài)碼為302的臨時重定向;permanent:返回狀態(tài)碼為301的永久重定向。,Map模塊,配置范例map $uri $new {defaulthttp://www.domain.com/home/;/aahttp://aa.domain.com/;/bbhttp://bb.domain.com/;^/cc/(?P.*)$

43、http://cc.domain.com/$suffix;/johnhttp://my.domain.com/users/john/;}map $uri $myvalue {/aa/mapped_aa;~^/aa/(?.*)$/mapped_bb/$suffix;},Map模塊,變量設置的映射表。映射表由兩列組成,匹配模式和對應的值。語法:map string $variable { ...

44、}默認值: —上下文:http這個指令也支持三個特殊參數。default value:如果源變量值沒有匹配到任何變量,則設置一個默認值作為結果。 當沒有設置 default,將會用一個空的字符串作為默認的結果。hostnames:允許用前綴或者后綴掩碼指定域名作為源變量值。include file:包含一個或者多個存有映射值的文件。,Upstream模塊,配置范例upstream backend { ser

45、ver backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; server backup1.example.com:8080 backup; keepalive 16;}定義一組服務器語法:upstr

46、eam name { ... }默認值: —上下文:http,Upstream模塊,定義服務器的地址address和其他參數parameters。語法:server address [parameters];默認值:—上下文:upstream可定義參數:weight=number。設定服務器的權重,默認是1。max_fails=number。設定Nginx與服務器通信的嘗試失敗的次數。fail_timeo

47、ut=time。設定統計失敗嘗試次數的時間段,默認是10秒。backup。標記為備用服務器。down。標記服務器永久不可用,可以跟ip_hash指令一起使用。激活對上游服務器的連接進行緩存。語法:keepalive connections;默認值: —上下文:upstream,Access模塊,配置范例location / {deny 192.168.1.1;allow 192.168.1.0/24

48、;allow 10.1.1.0/16;allow 2001:0db8::/32;deny all;},Access模塊,允許指定的網絡地址訪問語法:allow address | CIDR | all;默認值: —上下文:http, server, location, limit_except拒絕指定的網絡地址訪問語法:deny address | CIDR | all;默認值: —上下

49、文:http, server, location, limit_except,FastCGI模塊,配置范例upstream _fcgi {server127.0.0.1:9000 weight=8;server127.0.0.1:9001 weight=8;}location ~ .*.php?$ {#fastcgi_pass unix:/dev/shm/fcgi.sock;#fastcgi_pass 12

50、7.0.0.1:9000;fastcgi_pass _fcgi;include fastcgi.conf;fastcgi_buffer_size 128k;fastcgi_buffers 4 128k;fastcgi_connect_timeout 1800;},FastCGI模塊,指定FastCGI服務器監(jiān)聽端口與地址。語法:fastcgi_pass fastcgi-server 默認值:none

51、上下文:http, server, location 指定一些傳遞到FastCGI服務器的參數。語法:fastcgi_param parameter value默認值: —上下文:http, server, locationfastcgi.conf指定同FastCGI服務器的連接超時時間,這個值不能超過75秒。語法:fastcgi_connect_timeout time 默認值:fastcgi

52、_connect_timeout 60 上下文:http, server, location,目 錄,Php-fpm配置,配置范例。[www];listen = /dev/shm/fcgi.socklisten = 9000user = nobodygroup = nobodypm = dynamicpm.max_children = 512pm.start_servers = 32pm.min_spar

53、e_servers = 8pm.max_spare_servers = 64pm.max_requests = 4096php-fpm.conf.in,系統優(yōu)化-nginx,worker數目設置worker_processes 可用cpu核數;使用epolluse epoll;關閉訪問日志access_log off;其它配置優(yōu)化worker_connections 65535;//每個進程允許的最多

54、連接數worker_rlimit_nofile 65535;//打開最多的文件描述符keepalive_timeout 75s;//keepalive 超時時間client_header_buffer_size 4k;//客戶端請求頭部的緩沖區(qū)大小,系統優(yōu)化-內核參數,優(yōu)化資源限制#ulimit -n1024#ulimit –u1024修改open files 和 max user processes:1,在

55、/etc/rc.local 中增加一行 ulimit -SHn 655352,在/etc/profile 中增加一行 ulimit -SHn 655353,在/etc/security/limits.conf 最后增加:* soft nofile 65535* hard nofile 65535* soft nproc 65535* hard nproc 65535,系統優(yōu)化-內核參數,優(yōu)化內核參數net.ipv4.tc

56、p_max_tw_buckets = 6000 //timewait數量,默認180000。net.ipv4.ip_local_port_range = 1024 65000 //允許系統打開的端口范圍。net.ipv4.tcp_tw_recycle = 1 //啟用timewait 快速回收。net.ipv4.tcp_tw_reuse = 1 //允許TIME-WAIT sockets重用于新TCP 連接。net.ipv4.t

57、cp_syncookies = 1 //出現SYN 等待隊列溢出時啟用cookies處理。net.core.somaxconn = 262144 //web 應用中l(wèi)isten 函數的backlog 默認會給我們內核參數的net.core.somaxconn 限制到128,而nginx 定義的NGX_LISTEN_BACKLOG 默認為511,所以有必要調整這個值。net.core.netdev_max_backlog = 2621

58、44 //每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。net.ipv4.tcp_max_orphans = 262144 //系統中最多有多少個TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位并打印出警告信息。這個限制僅僅是為了防止簡單的DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值(如果增加了內存之后)。,系統優(yōu)化-內核參數,net

59、.ipv4.tcp_max_syn_backlog = 262144 //記錄的那些尚未收到客戶端確認信息的連接請求的最大值。net.ipv4.tcp_timestamps = 0 //時間戳可以避免序列號的卷繞。net.ipv4.tcp_synack_retries = 1 //為了打開對端的連接,內核需要發(fā)送一個SYN 并附帶一個回應前面一個SYN 的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發(fā)送

60、SYN+ACK 包的數量。net.ipv4.tcp_syn_retries = 1 //在內核放棄建立連接之前發(fā)送SYN 包的數量。net.ipv4.tcp_fin_timeout = 1 //如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2 狀態(tài)的時間。對端可以出錯并永遠不關閉連接,甚至意外當機。缺省值是60 秒。2.2 內核的通常值是180 秒,3你可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論