阿里團隊的tengin-x出的nginx文檔:http://tengine.taobao.org/book/chapter_02.html javascript
運行css
a、首先啓動了一個master進程,而後阻塞端口(默認80)的信號。
html
b、接受信號,加載配置文件,啓動worker來處理請求。
java
c、worker處理完成request的全部的數據處理,並response個client。node
重啓
linux
a、當使用nginx -s reload的時候,已經有的worker不會當即中止工做。可是,也不會在去搶request請求。
nginx
b、新的master在處理請求的時候,會從新fork新的worker。
web
worker
json
a、worker是fork的master,所用共享文件描述符。當request信號來的時候,全部的worker都會去搶sock的互斥鎖,搶到的處理request。
後端
########main########## 鏈接數、進程數、用戶及用戶組、 ########http########## http{ http參數設置 server{ 服務器設置 } } ########mail########## mail{ .......... }
a、main模塊
################### main模塊:配置用戶或用戶組,worker數量、錯誤日誌、文件描述符、事件設置(這部分都是配置鏈接數、進程(至關於java中的線程數)) #################### #用戶及用戶組 user nobady; #工做進程,根據硬件調整,大於等於cpu核數 worker_processes 8; #錯誤日誌(將不一樣的日誌等級、記錄到不一樣的文件中) error_log logs/error.log error; #error_log logs/notice.log notice; #error_log logs/info.log info; #error_log logs/debug.log debug; #error_log logs/warn.log warn; #pid放置的位置 pid logs/nginx.pid; worker_rlimit_nofile 204800; #指定進程能夠打開的最大描述符 #這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,可是nginx分配請求並非那麼均勻,因此最好與ulimit -n 的值保持一致。 #如今在linux 2.6內核下開啓文件打開數爲65535,worker_rlimit_nofile就相應應該填寫65535。這是由於nginx調度時分配請求到進程並非那麼的均衡,因此假如填寫10240,總併發量達到3-4萬時就有進程可能超過10240了,這時會返回502錯誤。 events{ use epoll; #linux的epoll是同步非阻塞I/O,有很高的可複用性。 worker_connections 204800; #每個worker的鏈接數 #工做進程的最大鏈接數量,根據硬件調整,和前面工做進程配合起來用,儘可能大,可是別把cpu跑到100%就行 #每一個進程容許的最多鏈接數, 理論上每臺nginx服務器的最大鏈接數爲 #總共能夠接受的鏈接數:worker_processes*worker_connections }
b、http
#############################3 http區域中主要http相關的參數:文件類型、字符集、root/index、http的log(主要是access.log)、鏈接時間、壓縮、系統文件設置、動態代理、以及server 等等 #################################### http { ########### 所用server 都會生效下面的配置################### include mime.types; #include 用戶加載另外的配置文件,例如其它配置內容 default_type application/octet-stream; server_tokens off; #關閉在錯誤頁面中的nginx版本數字 charset UTF-8; limit_conn addr 100; #每一個IP鏈接100個鏈接 root D:\website index index.html index.htm; # 命名爲main的日誌格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 訪問的日誌 access_log logs/access.log main; #【文件模塊:主要是一些靜態文件的傳送設置】 sendfile on; #開啓文件從硬盤到網絡的傳輸,不須要經過緩存(減小IO,平緩硬盤和網絡的處理速度) #tcp_nopush on; #此選項容許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用 #tcp_nodelay on; #【響應設置,緩存和響應】 client_max_body_size 50m; #客戶端請求的請求體大小 client_header_buffer_size 4k; #客戶端請求頭部的緩衝區大小 client_body_buffer_size 256k; #客服端請求體緩存大小 large_client_header_buffers 8 128k; #客戶請求頭的最大緩衝大小 client_header_timeout 3m; #請求頭超時 client_boddy_timeout 3m; #請求體超時 reset_timeout_connection #關閉不響應的客戶端鏈接。這將會釋放那個客戶端所佔有的內存空間 send_timeout 3m; #客服端響應超時 keepalive_timeout 65; #nginx和client的鏈接超時 #【壓縮】 gzip on; gzip_disable "msie6"; #ie6一下不壓縮 gzip_proxied any; #容許或者禁止壓縮基於請求和響應的響應流 gzip_min_length 1000; #最小的壓縮文件,小於這個不壓縮 gzip_comp_level 4; #壓縮等級(1-9) gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; #壓縮類型 #【反向代理】 ########## 響應時間 ###################### proxy_connect_timeout 75s; #nginx跟後端服務器請求時間 proxy_rend_timeout 75s; #鏈接後,等候後端服務器響應時間處理時間。 proxy_send_timeout 75s; #鏈接成功後,發送數據到後端服務器的時間 ########## 響應緩存 ###################### proxy_buffer_size 64k; #代理服務器(nginx)保存用戶頭的緩衝區 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件大小,大於這個值,將從後端服務器傳送,不用經過nginx緩存 proxy_ignore_client_abort on; #若是客戶端斷開請求,也保持與後端服務器的鏈接,防止服務器出現BUG ################設置傳送給後臺服務器的請求頭(主要是爲了session) ##### proxy_set_header Host $host; #表示客戶端請求頭部中的Host字段 proxy_set_header X-Real-IP $remote_addr; #客戶端IP地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #設置頭轉發 upstream tomcat{ server 192.168.217.1:8080 weight=4; server 192.168.217.2:8080 weight=4; } ######【服務器】######## server{ listen 80; server_name localhost; #默認 localhost /{ } #錯誤 error_page 500 502 503 504 /50x.html; localhost =/50x.html{ } #靜態文件 localhost ~*.*\.(js|css)?${ expires 7d; #保存7天 access_log off; #關閉訪問日誌 } localhost ~*.*\(png|jpg|gif|jpeg|bmp|ico)?${ expires 7d; access_log off; } location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm)?${ deny all; //禁止這些文件下載,你們能夠根據本身的環境來配置 } } server{ listen 80; server_name tomcat.com; #動態代理 localhost =/{ proxy_redirect off; proxy_pass http://tomcat; } #錯誤 error_page 500 502 503 504 /50x.html; localhost =/50x.html{ } #靜態文件 localhost ~*.*\.(js|css)?${ expires 7d; #保存7天 access_log off; #關閉訪問日誌 } localhost ~*.*\(png|jpg|gif|jpeg|bmp|ico)?${ expires 7d; access_log off; } location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm)?${ deny all; //禁止這些文件下載,你們能夠根據本身的環境來配置 } ######################訪問控制##################300s ##location / { ## : deny 192.168.1.1; ## : allow 192.168.1.0/24; ## : allow 10.1.1.0/16; ## : deny all; ##} }