研究這個東西好多天了...沒人教,難啊...什么都得一個一個搜索。Fuck
來源 v
http://blog.s135.com/tags/nginx/
中文文檔:http://wiki.nginx.org/NginxChs
#用戶 用戶組
user www www;
#工作進程,根據(jù)硬件調(diào)整,有人說幾核cpu,就配幾個,我覺得可以多一點
worker_processes 5;
#錯誤日志
error_log logs/error.log;
#pid文件位置
pid logs/nginx.pid;
worker_rlimit_nofile 8192;
events {
#工作進程的最大連接數(shù)量,根據(jù)硬件調(diào)整,和前面工作進程配合起來用,盡量大,但是別把cpu跑到100%就行
worker_connections 4096;
}
http {
include conf/mime.types;
#反向代理配置,可以打開proxy.conf看看
include /etc/nginx/proxy.conf;
#fastcgi配置,可以打開fastcgi.conf看看
include /etc/nginx/fastcgi.conf;
default_type application/octet-stream;
#日志的格式
log_format main ‘$remote_addr – $remote_user [$time_local] $status ‘
‘”$request” $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”’;
#訪問日志
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
#根據(jù)實際情況調(diào)整,如果server很多,就調(diào)大一點
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
#這個例子是fastcgi的例子,如果用fastcgi就要仔細看
server { # php/fastcgi
listen 80;
#域名,可以有多個
server_name domain1.com www.domain1.com;
#訪問日志,和上面的級別不一樣,應(yīng)該是下級的覆蓋上級的
access_log logs/domain1.access.log main;
root html;
location / {
index index.html index.htm index.php;
}
#所有php后綴的,都通過fastcgi發(fā)送到1025端口上
#上面include的fastcgi.conf在此應(yīng)該是有作用,如果你不include,那么就把fastcgi.conf的配置項放在這個下面。
location ~ .php$ {
fastcgi_pass 127.0.0.1:1025;
}
}
#這個是反向代理的例子
server { # simple reverse-proxy
listen 80;
server_name domain2.com www.domain2.com;
access_log logs/domain2.access.log main;
#靜態(tài)文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/big.server.com/htdocs;
#過期30天,靜態(tài)文件不怎么更新,過期可以設(shè)大一點,如果頻繁更新,則可以設(shè)置得小一點。
expires 30d;
}
#把請求轉(zhuǎn)發(fā)給后臺web服務(wù)器,反向代理和fastcgi的區(qū)別是,反向代理后面是web服務(wù)器,fastcgi后臺是fasstcgi監(jiān)聽進程,當(dāng)然,協(xié)議也不一樣。
location / {
proxy_pass http://127.0.0.1:8080;
}
}
#upstream的負載均衡,weight是權(quán)重,可以根據(jù)機器配置定義權(quán)重。據(jù)說nginx可以根據(jù)后臺響應(yīng)時間調(diào)整。后臺需要多個web服務(wù)器。
01 | upstream big_server_com { |
02 | server 127.0.0.3:8000 weight=5; |
03 | server 127.0.0.3:8001 weight=5; |
04 | server 192.168.0.1:8000; |
05 | server 192.168.0.1:8001; |
06 | } |
07 | |
08 | server { |
09 | listen 80; |
10 | server_name big.server.com; |
11 | access_log logs/big.server.access.log main; |
12 | |
13 | location / { |
14 | proxy_pass http: //big_server_com; |
15 | } |
16 | } |
17 | } |
—————————————–
Nginx 安置后只有一個法式文件,自己并不供給各類辦理法式,它是利用參數(shù)和體系旌旗燈號機制對 Nginx 歷程自己舉行節(jié)制的。 Nginx 的參數(shù)包羅有如下幾個:
-c :利用指定的設(shè)置裝備擺設(shè)文件而不是 conf 目次下的 nginx.conf 。
-t:測試設(shè)置裝備擺設(shè)文件是否準(zhǔn)確,在運行時必要從頭加載設(shè)置裝備擺設(shè)的時辰,此號令很是主要,用來檢測所點竄的設(shè)置裝備擺設(shè)文件是否有語法錯誤。
-v:表現(xiàn) nginx 版本號。
-V:表現(xiàn) nginx 的版本號以及編譯情況信息以及編譯時的參數(shù)。
比方我們要測試某個設(shè)置裝備擺設(shè)文件是否謄寫準(zhǔn)確,我們可以利用以下號令
sbin/nginx – t – c conf/nginx2.conf
經(jīng)由過程旌旗燈號對 Nginx 舉行節(jié)制
Nginx 撐持下表中的旌旗燈號:
旌旗燈號名
感化形貌
TERM, INT
快速封閉法式,中斷當(dāng)前正在處置的懇求
QUIT
處置完當(dāng)前懇求后,封閉法式
HUP
從頭加載設(shè)置裝備擺設(shè),并開啟新的事情歷程,封閉就的歷程,此操縱不會間斷懇求
USR1
從頭打開日記文件,用于切換日記,比方天天天生一個新的日記文件
USR2
光滑進級可實行法式
WINCH
自在封閉事情歷程
有兩種體例來經(jīng)由過程這些旌旗燈號去節(jié)制 Nginx,第一是經(jīng)由過程 logs 目次下的 nginx.pid 檢察當(dāng)前運行的 Nginx 的歷程 ID,經(jīng)由過程 kill – XXX
來節(jié)制 Nginx,此中 XXX 便是上表中列出的旌旗燈號名。若是您的體系中只有一個 Nginx 歷程,那您也可以經(jīng)由過程 killall
號令來完成,比方運行 killall – s HUP nginx
來讓 Nginx 從頭加載設(shè)置裝備擺設(shè)。
先來看一個現(xiàn)實的設(shè)置裝備擺設(shè)文件:
user nobody;# 事情歷程的屬主 worker_processes 4;# 事情歷程數(shù),一樣平常與 CPU 核數(shù)等同 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll;#Linux 下機能最好的 event 模式 worker_connections 2048;# 每個事情歷程許可最大的同時毗連數(shù) } http { include mime.types; default_type application/octet-stream; #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 off; access_log logs/access.log;# 日記文件名 sendfile on; #tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; include gzip.conf; # 集群中的全部背景辦事器的設(shè)置裝備擺設(shè)信息 upstream tomcats { server 192.168.0.11:8080 weight=10; server 192.168.0.11:8081 weight=10; server 192.168.0.12:8080 weight=10; server 192.168.0.12:8081 weight=10; server 192.168.0.13:8080 weight=10; server 192.168.0.13:8081 weight=10; } server { listen 80;#HTTP 的端口 server_name localhost; charset utf-8; #access_log logs/host.access.log main; location ~ ^/NginxStatus/ { stub_status on; #Nginx 狀況監(jiān)控設(shè)置裝備擺設(shè) access_log off; } location ~ ^/(WEB-INF)/ { deny all; } location ~ \.(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js| zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ { root /opt/webapp; expires 24h; } location / { proxy_pass http://tomcats;# 反向代辦署理 include proxy.conf; } error_page 404 /html/404.html; # redirect server error pages to the static page /50x.html # error_page 502 503 /html/502.html; error_page 500 504 /50x.html; location = /50x.html { root html; } } }
上 面是一個現(xiàn)實網(wǎng)站的設(shè)置裝備擺設(shè)實例,此中灰色筆墨為設(shè)置裝備擺設(shè)申明。上述設(shè)置裝備擺設(shè)中,起首我們界說了一個 location ~ ^/NginxStatus/,如許經(jīng)由過程 http://localhost/NginxStatus/ 就可以監(jiān)控到 Nginx 的運行信息,表現(xiàn)的內(nèi)容如下:
Active connections: 70server accepts handled requests 14553819 14553819 19239266Reading: 0 Writing: 3 Waiting: 67
NginxStatus 表現(xiàn)的內(nèi)容意思如下:
經(jīng)由過程正則表達式,我們可讓 Nginx 辨認出各類靜態(tài)文件,比方 images 路徑下的全部懇求可以寫為:
location ~ ^/images/ { root /opt/webapp/images;}
而下面的設(shè)置裝備擺設(shè)則界說了幾種文件范例的懇求處置體例。
location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ { root /opt/webapp; expires 24h;}
對付比方圖片、靜態(tài) HTML 文件、js 劇本文件和 css 樣式文件等,我們但愿 Nginx 直接處置并返回給欣賞器,如許可以大大的加速網(wǎng)頁欣賞時的速率。是以對付這類文件我們必要經(jīng)由過程 root 指令來指定文件的存放路徑,同時由于這類文件并不常點竄,經(jīng)由過程 expires
指令來節(jié)制其在欣賞器的緩存,以削減不需要的懇求。 expires
指令可以節(jié)制 HTTP 應(yīng)答中的“ Expires ”和“ Cache-Control ”的頭標(biāo)(起到節(jié)制頁面緩存的感化)。您可以利用比方以下的格局來謄寫 Expires:
expires 1 January, 1970, 00:00:01 GMT;expires 60s;expires 30m;expires 24h;expires 1d;expires max;expires off;
Nginx 自己并不撐持此刻風(fēng)行的 JSP、ASP、PHP、PERL 等動態(tài)頁面,可是它可以經(jīng)由過程反向代辦署理將懇求發(fā)送到后真?zhèn)€辦事器,比方 Tomcat、Apache、IIS 等來完成動態(tài)頁面的懇求處置。前面的設(shè)置裝備擺設(shè)示例中,我們起首界說了由 Nginx 直接處置的一些靜態(tài)文件懇求后,其他全部的懇求經(jīng)由過程 proxy_pass 指令傳送給后真?zhèn)€辦事器(在上述例子中是 Tomcat)。最簡略的 proxy_pass
用法如下:
location / { proxy_pass http://localhost:8080; proxy_set_header X-Real-IP $remote_addr;}
這里我們沒有利用到集群,而是將懇求直接送到運行在 8080 端口的 Tomcat 辦事上來完成近似 JSP 和 Servlet 的懇求處置。
當(dāng)頁面的拜候量很是大的時辰,每每必要多個應(yīng)用辦事器來配合負擔(dān)動態(tài)頁面的實行操縱,這時我們就必要利用集群的架構(gòu)。 Nginx 經(jīng)由過程 upstream
指令來界說一個辦事器的集群,最前面阿誰完備的例子中我們界說了一個名為 tomcats 的集群,這個集群中包羅了三臺辦事器共 6 個 Tomcat 辦事。而 proxy_pass 指令的寫法釀成了:
location / { proxy_pass http://tomcats; proxy_set_header X-Real-IP $remote_addr;}
在 Nginx 的集群設(shè)置裝備擺設(shè)中,Nginx 利用最簡略的均勻分派法則給集群中的每個節(jié)點分派懇求。一旦某個節(jié)點失效時,大概從頭起效時,Nginx 城市很是實時的處置狀況的轉(zhuǎn)變,以包管不會影響到用戶的拜候。
盡 管整個法式包只有五百多 K,但麻雀雖小、五臟俱全。 Nginx 官方供給的各類功效模塊包羅萬象,連系這些模塊可以完備各類百般的設(shè)置裝備擺設(shè)要求,比方:壓縮、防盜鏈、集群、FastCGI、流媒體辦事器、 Memcached 撐持、URL 重寫等等,更關(guān)頭的是 Nginx 擁有 Apache 和其他 HTTP 辦事器無法對比的高機能。您乃至可以在不轉(zhuǎn)變原有網(wǎng)站的架構(gòu)上,經(jīng)由過程在前端引入 Nginx 來晉升網(wǎng)站的拜候速率。
本文只是簡略先容了 Nginx 的安置以及常見的根基的設(shè)置裝備擺設(shè)和利用,更多關(guān)于 Nginx 的信息請閱讀文章背面的參考資本。在這里要很是感激我的伴侶——陳磊(chanix@msn.com),他一向在做 Nginx 的中文 WIKI(http://wiki.codemongers.com/NginxChs),同時也是他先容給我這么好的一款軟件。
若是您的網(wǎng)站是運行在 Linux 下,若是您并沒有利用一些很是龐大的并且確定 Nginx 無法完成的功效,那您應(yīng)該嘗嘗 Nginx 。