nginx.conf

=========================================================================== nginx.conf

user nobody;javascript

指定nginx worker進程運行用戶以及用戶組。

worker_processes 4;css

指定nginx要開啓的進程數。

每一個nginx進程平均消耗10MB-12MB內存,根據經驗,通常指定一個進程足夠了,若是是多核CPU,建議指定和CPU的數量同樣多的進程數便可。

error_log logs/error.log;html

定義全局錯誤日誌文件,日誌的級別分爲:debug、info、notice、warn、error、crit,默認爲crit。

定義全局錯誤日誌的級別:eg:error_log logs/error.log error;

event用來指定nginx的工做模式及鏈接數上限

events { # use epoll; # use:指定nginx的工做模式,能夠省略。 worker_connections 4096; # worker_connections:定義nginx每一個進程的最大鏈接數,默認1024。 }java

定義http服務器(即nginx),利用它的反向代理功能來提供負載均衡

http { include mime.types; default_type application/octet-stream;node

# 設置日誌的格式
# $remote_addr 與 $http_x_forwarded_for 記錄客戶端的ip地址
# $remote_user:客戶端用戶名稱
# $request:請求的url
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

# 啓動高效傳輸文件的模式
# 開啓sendfile後,nginx在傳輸文件時直接在磁盤和tcp socket之間傳輸數據,整個過程都是在內核中完成。
# nginx中的sendfile相似於javaNIO中的直接緩衝區。
sendfile        on;   

# 設置http鏈接的超時時間,默認爲75s
# 超過該值後,nginx會斷掉當前的http鏈接
# 若該值設置的太小,則在上傳大文件時可能會由於鏈接超時而致使上傳失敗
# 若該值設置的過大,則在接口訪問完成後http鏈接沒法被及時釋放掉,從而致使鏈接數愈來愈大,最終致使nginx奔潰。
keepalive_timeout  120;

limit_rate_after 3m;
# 鏈接下載了3m後,再進行限速。

limit_rate 512k;
# 對每一個鏈接限速512k

# 開啓gzip壓縮,以減小帶寬,提升頁面加載速度。
gzip on;
gzip_min_length 1k; 		# 大於1k的數據纔會去壓縮
gzip_buffers 4 16k;			# 設置用於處理請求壓縮的緩衝區數量和大小
gzip_http_version 1.0;		# 指定gzip支持的http協議的版本。1.0表示支持1.0以上(包括1.0)的版本。注:經過proxy_pass進行反向代理時,nginx和後端的upstream server之間默認是用HTTP/1.0協議進行通訊的
gzip_comp_level 2;			# 壓縮率,取值爲1-9,壓縮率越大則壓縮的越完全,可是須要消耗更多的cpu
gzip_types       text/plain application/x-javascript application/javascript text/javascript text/css application/xml; # 須要進行壓縮的數據類型
gzip_vary on;				# 告訴客戶端nginx在傳送數據時使用了gzip壓縮,即response中的Vary: Accept-Encoding。


#######	分佈式限流 #######
limit_req_zone $binary_remote_addr zone=per_ip_req:10m rate=10r/s;
# 概念:limit_req_zone是採用漏桶算法來限制單位時間內的請求數,即速率限制。
# 第一個參數:$binary_remote_addr	表示經過remote_addr這個標識來作限制,即限制同一客戶端ip的請求("binary_"的目的是爲了縮寫內存佔用量)。
# 第二個參數:zone=per_ip_req:10m	表示生成一個大小爲10M,名字爲per_ip_req的內存區域,用來存儲訪問的頻次信息。
# 第三個參數:rate=10r/s			表示同一客戶端ip的最大訪問頻次。(r/s 即 request/second)

limit_conn_zone $binary_remote_addr zone=perip_conn:10m;
# 概念:limit_req_conn是用來限制同一時間內的鏈接數,即併發限制。
# 用來限制同一ip在同一時間內的鏈接數。

limit_conn_zone $server_name zone=perserver_conn:10m;
# 用來限制同一server在同一時間內的鏈接數。
###########################

# 定義web服務器
server {
	listen       80;
	server_name  localhost;

	location / {
		return 403;
	}
	location /status {
		stub_status on;
		access_log  off;
	}
}

include /usr/local/nginx/conf/vhost/*.conf; }nginx

============================================================ /usr/local/nginx/conf/vhost/advertise.conf

########web

ip_hash:

概念:對請求的ip作hash運算,根據ip的hash值將請求分配到指定的服務器上。

說明:

1>若ip的hash值對應的服務器不能提供服務,則nginx就會根據當前的哈希值再哈希出一個新哈希值,而後將請求分配到另外一個服務器上,若另外一個服務也不可用,則nginx會再進行一次hash運算,直到找到可用的服務。

2>若server的數量n小於20,則nginx在找到可用服務前最多會嘗試n次; 若server的數量大於20,且nginx在嘗試了20次後仍然沒有找到可用的服務,那麼nginx就會以RR(輪詢)的策略來選擇新的server。

3>使用ip_hash沒法保證服務器的負載均衡,可能有些服務器收到的請求多,有些服務器收到的請求少,且在ip_hash下設置weight不起做用。

4>若想讓某臺服務器暫時中止提供服務一段時間,那麼咱們最好是將這臺服務器標記爲down,而不是直接在upstream中將這個服務器的配置刪除。

5>直接刪除某臺服務的配置,會致使hash函數發生變化(hash函數和server的數量有關),進而致使同一ip下的請求可能被打到不一樣的服務器上。

配置:

1>max_fails fail_timeout 表示:請求失敗max_fails次後,服務在fail_timeout時間內不對外提供服務。

2>weight表示權重:weight和服務被請求的比率成正比,在ip_hash下weight會失效。

######## upstream advertise.conf { ip_hash; # 對請求的ip作hash運算,根據ip的hash值將請求分配到指定的服務器上。 server 192.168.0.1:8080 max_fails=3 fail_timeout=3s; # ip_hash下weight會失效。 server 192.168.0.2:8080 max_fails=3 fail_timeout=3s; }算法

########後端

RR(輪詢)

概念:將請求按時間順序逐一分配到不一樣的服務器上,若某一臺服務器down掉,nginx會自動將其剔除。

說明:RR是nginx默認的方式。

配置:

1>weight表示權重:weight和服務被請求的比率成正比,。

######## upstream landpage.conf { server 192.168.1.1:8080 max_fails=3 fail_timeout=3s; server 192.168.1.2:8080 max_fails=3 fail_timeout=3s; }緩存

########

fair

概念:按後端服務器的響應時間來分配請求,響應時間短的優先分配。

說明:fair是第三方提供的一種策略。

######## upstream seckill.conf { fair; server 192.168.2.1:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.2.2:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.2.3:8080 weight=1 max_fails=2 fail_timeout=30s backup; # 備用服務,當其它服務都down或者忙時,請求會打到備用服務。 server 192.168.2.4:8080 weight=1 max_fails=2 fail_timeout=30s down; # 表示該服務暫時不接受請求。 }

########

url_hash

概念:對請求的url作hash運算,根據url的hash值將請求分配到指定的服務器上。

說明:同一url老是被打到同一臺服務器上,故當服務器爲緩存服務器時url_hash的效果比較好。url_hash是第三方提供的一種策略。

######## upstream cache.conf { server 192.168.3.1:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.4.2:8080 weight=1 max_fails=2 fail_timeout=30s; hash $request_uri; hash_method crc32; }

秒殺服務

server { listen 80; server_name seckill.jxn.com; index index.html index.htm index.jsp ;

# 對URL進行匹配,能夠進行重定向或者進行新的代理
location / {

	proxy_pass      http://seckill;

	######## 對該server進行限流 ########
	limit_req zone=per_ip_req burst=5 nodelay;	
	# 該server上對請求進行限流,burst表示漏桶(緩存區)的大小,默認是0;
	# 當請求的速率超過限制的速率(rate)時,nginx會將超過速率限制的請求放到漏桶中(超時)等待,若是漏桶滿了,則nginx直接返回503,即客戶端獲得一個服務器忙的響應。
	# nodelay表示漏桶已滿時直接返回503。注意:若是不設置nodelay,則咱們必須設置rate,若兩者都沒設置,那麼全部的請求都會排隊等待。

	limit_conn perip_conn 2;				# 該server容許同一個ip同時發起的最大鏈接數
	limit_conn perserver_conn 1000;			# 該server在同一時間容許的最大鏈接數
	limit_rate 100k;						# 每一個鏈接(下載)限速100k
}

}

主服務

server { listen 80; server_name speed.jxn.com; index index.html index.htm index.jsp ;

# root /data/tomcat/tomcat-speed/webapps/;
location ~ ^/WEB-INF/* {
	deny all;
}

error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
error_page   500 502 503 504  /50x.html;

location / {
	index index.jsp;
	proxy_pass http://advertise.conf;
	proxy_redirect off;
	
	# 將代理服務器收到的用戶的信息傳到真實服務器上
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For  $http_x_forwarded_for;
	proxy_set_header Host $host;
	0
	client_max_body_size 10m;
	client_body_buffer_size 128k;
	proxy_buffers           32 4k;
	proxy_connect_timeout   600;
	proxy_send_timeout      600;
	proxy_read_timeout      600;

}


location /landpage/ {
	index index.jsp;
	proxy_pass http://landpage.conf;
	proxy_redirect off;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For  $http_x_forwarded_for;
	proxy_set_header Host $host;
	# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	client_max_body_size 10m;
	client_body_buffer_size 128k;
	proxy_buffers           32 4k;
	proxy_connect_timeout   600;
	proxy_send_timeout      600;
	proxy_read_timeout      600;

}
# expires 1h;

access_log /usr/local/nginx/logs/advertise.access.log;
error_log  /usr/local/nginx/logs/advertise-error.log;

}

相關文章
相關標籤/搜索