關於nginx的一些常用配置...

Nginx (engine x) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。

公共配置

1、併發連接配置

1.1 worker_processes

nginx運行工作進程個數,一般設置cpu的核心或者核心數x2。

nginx.conf配置文件中,設置:worker_processes 4。

worker_processes最多開啓8個,8個以上性能提升不會再提升了,而且穩定性變得更低,所以8個進程夠用了。

1.2 worker_cpu_affinity

nginx默認是沒有開啓利用多核cpu的配置的。需要通過增加worker_cpu_affinity配置參數來充分利用多核cpu,cpu是任務處理,當計算最費時的資源的時候,cpu核使用上的越多,性能就越好。

使用方法和範例:

2核cpu,開啓2個進程

worker_processes 2;

worker_cpu_affinity 01 10;

4cpu,開啓4個進程 worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;

1.3 worker_rlimit_nofile

這個指令是指當一個nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx 進程數相除,但是nginx 分配請求並不是那麼均勻,所以最好與ulimit -n (ulimit -n 65535可設置最大打開文件數爲65535)的值保持一致。

現在在Linux 2.6內核下開啓文件打開數爲65535,worker_rlimit_nofile就相應應該填寫65535。實際我們填入一個65535,足夠了,一個網站的並發達到這麼大的數量,也算一個大站了!

1.4 work_connections

work_connections是單個worker進程允許客戶端最大連接數,這個數值一般根據服務器性能和內存來制定.

nginx作爲http服務器的時候:max_clients = worker_processes * worker_connections

Web服務器

相比 Apache,Nginx 使用更少的資源,支持更多的併發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支持高達 50,000 個併發連接數的響應,感謝 Nginx 爲我們選擇了 epoll and kqueue 作爲開發模型.

 

listen:表示當前的代理服務器監聽的端口,默認的是監聽80端口。注意,如果我們配置了多個server,這個listen要配置不一樣,不然就不能確定轉到哪裏去了。

server_name:表示監聽到之後需要轉到哪裏去,這時我們直接轉到本地,這時是直接到nginx文件夾內。

location:表示匹配的路徑,這時配置了/表示所有請求都被匹配到這裏

root:裏面配置了root這時表示當匹配這個請求的路徑時,將會在這個文件夾內尋找相應的文件,這裏對我們之後的靜態文件伺服很有用。

index:當沒有指定主頁時,默認會選擇這個指定的文件,它可以有多個,並按順序來加載,如果第一個不存在,則找第二個,依此類推。

location:分爲普通匹配以及正則匹配。

普通匹配,包括:^~(把這個前綴用於一個常規字符串,如果路徑匹配那麼不測試正則表達式)、 = (精確匹配)、無前綴。

普通匹配,遵循最長匹配規則,假設一個請求匹配到了兩個普通規則,則選擇匹配長度大的那個,一般情況下普通匹配成功後,還是會繼續正則匹配,一旦正則匹配也匹配成功後,以正則匹配爲準。但是^~和=除外,即^~和=匹配成功後,不再繼續正則匹配。

正則 location:~ (區分大小寫)、~*(不區分大小寫) 。

location = / {

[ configuration A ]

}

location / {

[ configuration B ]

}

location /documents/ {

[ configuration C ]

}

location ^~ /images/ {

[ configuration D ]

}

location ~* .(gif|jpg|jpeg)$ {

[ configuration E ]

}

“/”請求會匹配到A,精確匹配。

“/index.html”會匹配到B,

“/documents/document.html”請求會匹配到C,

“/images/1.gif”會匹配到D,

“/documents/1.jpg”會匹配到E。

location裏還可添加try_files: $uri $uri/ /index.html。依次按照順序檢查文件是否存在.

反向代理和域名轉發

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。

user www www;

worker_processes 1;

error_log logs/error.log;

pid logs/nginx.pid;

worker_rlimit_nofile 65535;

#Nginx事件處理模型

events {

use epoll; #nginx採用epoll事件模型,處理效率高

worker_connections 65535;

multi_accept on;#默認是on,設置爲on後,多個worker按串行方式來處理連接,也就是一個連接只有一個worker被喚醒,其他的處於休眠狀態,設置爲off後,多個worker按並行方式來處理連接,也就是一個連接會喚醒所有的worker,直到連接分配完畢,沒有取得連接的繼續休眠。當你的服務器連接數不多時,開啓這個參數會讓負載有一定的降低,但是當服務器的吞吐量很大時,爲了效率,可以關閉這個參數。

}

http {

include mime.types;

default_type application/octet-stream;

include /usr/local/nginx/conf/reverse-proxy.conf;

sendfile on;#//開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。

keepalive_timeout 65;#客戶端連接保持會話超時時間,超過這個時間,服務器斷開這個鏈接

gzip on;

client_max_body_size 50m; #緩衝區代理緩衝用戶端請求的最大字節數,可以理解爲保存到本地再傳給用戶

client_body_buffer_size 256k;

client_header_timeout 3m;

client_body_timeout 3m;

send_timeout 3m;

proxy_connect_timeout 300s; #nginx跟後端服務器連接超時時間(代理連接超時)

proxy_read_timeout 300s; #連接成功後,後端服務器響應時間(代理接收超時)

proxy_send_timeout 300s;

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; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳遞請求,而不緩衝到磁盤

proxy_ignore_client_abort on; #不允許代理端主動關閉連接

server {

listen 80;

server_name localhost;

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

 

內利用反向代理做負載均衡

upstream www.lcapi.com{

server localhost:8080;

server localhost:9080;

}

server{

listen 80;

autoindex on;

server_name www.lcapi.com;

access_log /usr/local/nginx/logs/access.log combined;

index index.html index.htm index.jsp index.php;

#error_page 404 /404.html;

if ( $query_string ~* ".*[;'<>].*" ){

return 404;

}

location / {

proxy_pass http://www.lcapi.com;

add_header Access-Control-Allow-Origin *;

}

}

我們在server外添加了一個upstream,而直接在proxy_pass裏面直接用http://+upstream的名稱來使用。upstream中的server元素必須要注意,不能加http://,但proxy_pass中必須加。

1)輪詢(默認)

默認選項,當weight不指定時,各服務器weight相同, 每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

upstream www.lcapi.com{

server localhost:8080;

server localhost:9080;

}

2)weight

指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。如果後端服務器down掉,能自動剔除。 比如下面配置,則1.11服務器的訪問量爲1.10服務器的兩倍(後端節點中配置高的服務器可以適當將weight設置大點)。

upstream www.lcapi.com{

server 192.168.1.10 weight=1;

server 192.168.1.11 weight=2;

}

3)ip_hash

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session不能跨服務器的問題,實現session共享。如果後端服務器down掉,要手工處理。

upstream resinserver {

ip_hash;

server 192.168.1.10:8080;

server 192.168.1.11:8080;

}

4)url_hash

5)fair(第三方)

 

 


實戰應用

  使用Nginx本地搭建自己的本地圖片服務器,上傳到相應目錄,用於開發過程中啓動tomcat圖片丟失的問題,後期上傳到服務器,要改用ftp上傳。

  注意:此處要在D盤目錄下創建 D:\\olife\\uploadfiles夾,上傳到此處,不然會訪問不到的。

  訪問路徑http://127.0.0.1:30000/uploadfiles/+文件名

   nginx.conf配置

location ^~ /uploadfiles/ { 		
			expires 24h;    
            root D:\\olife\\;#指定圖片存放路徑    
            access_log D:\\logs\\images.log;#日誌存放路徑    
            proxy_store on;    
            proxy_store_access user:rw group:rw all:rw;    
            proxy_temp_path         D:\\olife\\;#圖片訪問路徑    
            proxy_redirect          off;    
            proxy_set_header        Host 127.0.0.1;    
            client_max_body_size    10m;    
            client_body_buffer_size 1280k;    
            proxy_connect_timeout   900;    
            proxy_send_timeout      900;    
            proxy_read_timeout      900;    
            proxy_buffer_size       40k;    
            proxy_buffers           40 320k;    
            proxy_busy_buffers_size 640k;    
            proxy_temp_file_write_size 640k;    
            if ( !-e $request_filename)    
            {    
                 proxy_pass  http://127.0.0.1:8091;#默認80端口    
            }    
		}  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章