user nobody;javascript
worker_processes 4;css
error_log logs/error.log;html
events { # use epoll; # use:指定nginx的工做模式,能夠省略。 worker_connections 4096; # worker_connections:定義nginx每一個進程的最大鏈接數,默認1024。 }java
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
########web
######## 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; }算法
########後端
######## 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; }緩存
########
######## 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; # 表示該服務暫時不接受請求。 }
########
######## 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;
}