nginx的學習

nginx的學習

1、工做方式

    1.1 學習網址

        阿里團隊的tengin-x出的nginx文檔:http://tengine.taobao.org/book/chapter_02.html javascript

    1.2 工做流程

    運行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。
後端

        

2、配置

    2.1 總體結構

########main##########
    鏈接數、進程數、用戶及用戶組、
########http##########
http{
     http參數設置
    server{
        服務器設置
    }
}
########mail##########
mail{
    ..........
}

   2.二、主要配置

    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;
	##}
	
}
相關文章
相關標籤/搜索