user www-data; 運行用戶javascript
worker_processes 4; 啓動進程,一般設置成和cpu的數量相等php
阻塞和非阻塞網絡模型;同步阻塞模型,一請求一進(線)程,當進(線)程增長到必定程度後css
更多CPU時間浪費到切換一,性能急劇降低,因此負載率不高html
nginx基於時間的非阻塞多路複用(epoll或kquene)模型java
一個進程在短期內能夠相應大量的請求node
建議值 <=cpu核心數量,通常高於cpu數量有好處,也許還有進程切換開銷的負面影響linux
將work process綁定到特定的cpu上,避免進程在cpu間切換的開銷nginx
worker_rlimit_nofile 655350 每進程最大可打開文件描述符數量(Linux上文件描述符比較廣義,網絡端口、設備、磁盤文件都是)算法
文件描述符用完了,新的連接會被拒絕,產生502類錯誤。linux最大可打開文件數可經過ulimit -n FILECNT或 /etc/security/limit.conf配置json
理論值 系統最大數量/進程數。但進程間工做量並非平均分配的,因此可設置的大一些
error_log /var/log/nginx/error.log; 全局錯誤日誌及PID文件
pid /var/run/nginx.pid;
events {
worker_connections 200000; 併發響應能力的關鍵配置值
每一個進程容許的最大同時鏈接數,work_connectins * work_processes =maxConnection; 要注意maxconnections不等同於可相應的用戶數量 由於通常一個瀏覽器會同時開兩條連接,若是反向代理,nginx到後端連服務器的連接數也要佔用鏈接數 因此,作靜態服務器時,通常maxClient = work_connectins * work_processes / 2 作反向代理服務器時 maxClient = work_connectins * work_processes / 4 這個值理論上越大越好,但最多可承受多少請求與配件和網絡相關,也可最大可打開文件,最大可用socket數量 指明使用epoll 或 kquene(*BSD)
use epoll; epoll是多路複用IO(I/O Multiplexing)中的一種方式,可是僅用於linux2.6以上內核,能夠大大提升nginx的性能
worker_connections 1024; 單個後臺worker process進程的最大併發連接數
multi_accept on;
}
設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
include /etc/nginx/mime.types; 設定mime類型,類型由mime.type文件定義
default_type application/octet-stream;
access_log /var/log/nginx/access.log; 設定日誌格式
error_log logs/error_log crit;
access_log logs/access_log main;
只記錄更爲嚴重的錯誤日誌,可減小IO壓力
endfile on; sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲 off,以平衡磁盤與網絡I/O處理速度,下降系統的uptime.
cp_nopush on; 啓用內核複製模式,應用保持開啓達到最快的IO效率
cp_nodelay on|off; on禁用Nagle算法
keepalive_timeout 0; HTTP1.1支持持久鏈接alive
* 下降每一個連接的alive時間可在必定程度上提升可響應鏈接數量,因此通常可適當下降此值
keepalive_timeout 30s; 鏈接超時時間
gzip on; 開啓gzip壓縮,有效下降網絡流量
gzip_min_length 1000; 太短的內容壓縮效果不佳,壓縮過程還會浪費系統資源
gzip_comp_level 4; 可選值1~9研所級別越高壓縮效率越高,但對系統性能要求越高。
gzip_types text/plain text/css application/json application/x-javascript text/xml 壓縮內容類別
open_file_cache max=655350 inactive=20s; 靜態文件緩存
* 最大緩存數量 * 文件未使用存活期
open_file_cache_valid 30s; 驗證緩存有效期時間間隔
open_file_cache_min_uses 2; 有效期內文件最少使用次數
設定請求緩衝
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
設定負載均衡的服務器列表
upstream mysvr { server 192.168.8.1:3128 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } weigth參數表示權值,權值越高被分配到的概率越大(本機上的Squid開啓3128端口)
location表達式
syntax:location [=|~|~*|^~|@] /uri/ {...}分別兩種配置模式,普通字符串匹配,正則匹配
無開頭引導字符或以=開頭表示普通字符串匹配
以~或~*開頭表示正則匹配,~*表示不區分大小寫
多個location時匹配規則
整體是先普通後正則,只識別URI部分,例如請求爲/test/1/abc.do? arg=xxx
1.先查找是否有=開頭的精確匹配,及location =/test/1/abc.do {...}
2.再查找普通匹配,以最大前綴爲規則,以下有兩個location
location /test/ {...}
location /test/1 {...}
則匹配後一項
3.匹配到一個普通格式後,搜索並未結束,而是暫存當前結果,並繼續在搜索正則模式
4.在全部正則模式location中找到第一個匹配向後,以此屁配項爲最終結果,因此正則匹配項匹配規則受定義先後順序影響,但普通匹配不會
5.若是未找到正則匹配項,則以3中緩存的結果爲最終結果
6.若是一個匹配都沒有,返回404
location =/ {...} 與 location / {...}的差異
前一個是精確匹配,只響應/請求,全部/xxx類請求不會之前綴匹配形式匹配到它 ,然後一個正相反,全部請求必然都是以/開頭,因此沒有其餘匹配結果時必定會執行到它
location ^~ / {...} ^~意思是非正則,表示匹配到此模式後再也不繼續正則搜索,全部若是這樣配置,至關於關閉了正則匹配功能 ,由於一個請求在普通匹配規則下沒獲得其餘普通匹配時,最終匹配到這裏
默認請求
location / { root /root; #定義服務器的默認網站根目錄位置 index index.php index.html index.htm; #定義首頁索引文件的名稱 fastcgi_pass www.xx.com; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; include /etc/nginx/fastcgi_params; }
定義錯誤提示頁面
error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; }
靜態文件,nginx本身處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/htdocs; #過時30天,靜態文件不怎麼更新,過時能夠設大一點,若是頻繁更新,則能夠設置得小一點。 expires 30d; }
PHP 腳本請求所有轉發到 FastCGI處理. 使用FastCGI默認配置.
location ~ \.php$ { root /root; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name; include fastcgi_params; }
設定查看Nginx狀態的地址
location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } #禁止訪問 .htxxx 文件 location ~ /\.ht { deny all; } } }
以上是一些基本的配置,使用Nginx最大的好處就是負載均衡
若是要使用負載均衡的話,能夠修改配置http節點以下:
設定http服務器,利用它的反向代理功能提供負載均衡支持
http { include /etc/nginx/mime.types; #設定mime類型,類型由mime.type文件定義 default_type application/octet-stream; #設定日誌格式 access_log /var/log/nginx/access.log; #省略 #設定負載均衡的服務器列表 upstream mysvr { #weigth參數表示權值,權值越高被分配到的概率越大 server 192.168.8.1x:3128 weight=5;#本機上的Squid開啓3128端口 server 192.168.8.2x:80 weight=1; server 192.168.8.3x:80 weight=6; upstream mysvr2 { #weigth參數表示權值,權值越高被分配到的概率越大 server 192.168.8.x:80 weight=1; server 192.168.8.x:80 weight=6; }
第一個虛擬服務器
server { #偵聽192.168.8.x的80端口 listen 80; server_name 192.168.8.x; #對aspx後綴的進行負載均衡請求 location ~ .\*\.aspx$ { root /root; #定義服務器的默認網站根目錄位置 index index.php index.html index.htm; #定義首頁索引文件的名稱。 proxy_pass http://mysvr ;#請求轉向mysvr 定義的服務器列表
如下是一些反向代理的配置可刪除.
proxy_redirect off; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #容許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數, proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時) proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的話,這樣設置 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers\*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 } } }
下載Nginx地址:http://nginx.org/download/ngi...
nginx版本:1.8.0
nginx升級版本:1.12.1
nginx -v #查看當前Nginx版本
nginx -V #查看當前Nginx編譯參數
在執行編譯時會報錯沒有--with-http_spdy_module選項(nginx 1.9.5 已經沒有了 --with-http_spdy_module ,取代的是 --with-http_v2_module),查看官方模塊地址:http://nginx.org/en/docs/
開始部署
[root@localhost src]#tar xvf nginx-1.12.1.tar.gz [root@localhost nginx-1.12.1]# cd nginx-1.12.1 [root@localhost nginx-1.12.1]# ./configure --user=tdoa --group=tdoa --prefix=/usr/local/tdoa/nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-pcre=/root/linux-2015/down/pcre-8.32 --with-pcre-jit --with-http_v2_module [root@localhost nginx-1.12.1]# make
執行make後,make install無需執行,將現有nginx重命名
[root@localhost objs]# mv /usr/local/tdoa/nginx/sbin/nginx /usr/local/tdoa/nginx/sbin/nginx.old [root@localhost objs]# pwd /usr/local/src/nginx-1.12.1/objs [root@localhost objs]# cp nginx nginx nginx.8 [root@localhost objs]# cp nginx /usr/local/tdoa/nginx/sbin/ [root@localhost objs]# /usr/local/tdoa/nginx/sbin/nginx -v nginx version: nginx/1.12.1 [root@localhost objs]# /usr/local/tdoa/nginx/sbin/nginx -t nginx: the configuration file /usr/local/tdoa/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/tdoa/nginx/conf/nginx.conf test is successful [root@localhost objs]# /usr/local/tdoa/nginx/sbin/nginx -s reload [root@localhost objs]# netstat -tnlp |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 98457/nginx tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1680/cupsd tcp 0 0 ::1:631 :::* LISTEN 1680/cupsd