Nginx 常見應用技術指南[Nginx Tips] 第二版javascript
目 錄php
1、 Nginx 基礎知識
2、 Nginx 安裝及調試
3、 Nginx Rewrite
4、 Nginx Redirect
5、 Nginx 目錄自動加斜線:
6、 Nginx Location
7、 Nginx expires
8、 Nginx 防盜鏈
9、 Nginx 訪問控制
10、 Nginx日誌處理
11、 Nginx Cache
12、 Nginx 負載均衡
十3、 Nginx簡單優化
十4、 如何構建高性能的LEMP環境
十5、 Nginx服務監控
十6、 常見問題與錯誤處理.
十7、 相關資源下載css
【前言】:html
編寫此技術指南在於推廣普及NGINX在國內的使用,更方便的幫助你們瞭解和掌握NGINX
的一些使用技巧。本指南不少技巧來自於網絡和工做中或網絡上朋友們問個人問題.在此對
網絡上願意分享的朋友們表示感謝和致意!歡迎你們和我一塊兒豐富本技術指南提出更好的建
議!請朋友們關注: http://www.linuxtone.org 技術分享社區! 互想學習共同進步!java
1、 Nginx 基礎知識linux
一、簡介
Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服
務器。 Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,它已經在該站點運行超
過兩年半了。Igor 將源代碼以類BSD許可證的形式發佈。儘管仍是測試版,可是,Nginx 已經由於它的穩
定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名了。nginx
更多的請見官方wiki: http://wiki.codemongers.com/web
二、 Nginx的優勢
nginx作爲HTTP服務器,有如下幾項基本特性:
1) 處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝.
2) 無緩存的反向代理加速,簡單的負載均衡和容錯.
3) FastCGI,簡單的負載均衡和容錯.
4) 模塊化的結構。包括gzipping, byte ranges, chunked responses, 以及 SSI-filter等filter。
若是由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理能夠並行運行,而不
須要相互等待。
5) 支持SSL 和 TLS SNI.
Nginx專爲性能優化而開發,性能是其最重要的考量, 實現上很是注重效率 。它支持內核Poll模型,
能經受高負載的考驗, 有報告代表能支持高達 50,000 個併發鏈接數。正則表達式
Nginx具備很高的穩定性。其它HTTP服務器,當遇到訪問的峯值,或者有人惡意發起慢速鏈接時,
也極可能會致使服務器物理內存耗盡頻繁交換,失去響應,只能重啓服務器。例如當前apache一旦上到
200個以上進程,web響應速度就明顯很是緩慢了。而Nginx採起了分階段資源分配技術,使得它的CPU與
內存佔用率很是低。nginx官方表示保持10,000個沒有活動的鏈接,它只佔2.5M內存,因此相似DOS這
樣的攻擊對nginx來講基本上是毫無用處的。就穩定性而言, nginx比lighthttpd更勝一籌。express
Nginx支持熱部署。它的啓動特別容易, 而且幾乎能夠作到7*24不間斷運行,即便運行數個月也不
須要從新啓動。你還可以在不間斷服務的狀況下,對軟件版本進行進行升級。
Nginx採用master-slave模型, 可以充分利用SMP的優點,且可以減小工做進程在磁盤I/O的阻
塞延遲。當採用select()/poll()調用時,還能夠限制每一個進程的鏈接數。
Nginx代碼質量很是高,代碼很規範, 手法成熟, 模塊擴展也很容易。特別值得一提的是強大
的Upstream與Filter鏈。 Upstream爲諸如reverse proxy, 與其餘服務器通訊模塊的編寫奠基了很好的
基礎。而Filter鏈最酷的部分就是各個filter沒必要等待前一個filter執行完畢。它能夠把前一個filter
的輸出作爲當前filter的輸入,這有點像Unix的管線。這意味着,一個模塊能夠開始壓縮從後端服務器
發送過來的請求,且能夠在模塊接收完後端服務器的整個請求以前把壓縮流轉向客戶端。
Nginx採用了一些os提供的最新特性如對sendfile (Linux 2.2+),accept-filter (FreeBSD
4.1+),TCP_DEFER_ACCEPT (Linux 2.4+) 的支持,從而大大提升了性能
2、 Nginx 安裝及調試
一、Pcre 安裝
./configure
make && make install
cd ../
2. nginx 編譯安裝
/configure --user=www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module
--with-openssl=/usr/local/openssl
make && make install
更詳細的模塊定製與安裝請參照官方wiki.
三、Nginx 配置文件測試:
# /usr/local/nginx/sbin/nginx -t //Debug 配置文件的關鍵命令須要重點撐握.
2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf
syntax is ok
2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf was
tested successfully
三、 Nginx 啓動:
# /usr/local/nginx/sbin/nginx
四、 Nginx 配置文件修改從新加載:
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid `
3、 Nginx Rewrite
1. Nginx Rewrite 基本標記(flags)
last - 基本上都用這個Flag。
※至關於Apache裏的[L]標記,表示完成rewrite,再也不匹配後面的規則
break - 停止Rewirte,再也不繼續匹配
redirect - 返回臨時重定向的HTTP狀態302
permanent - 返回永久重定向的HTTP狀態301
※原有的url支持正則 重寫的url不支持正則
2. 正則表達式匹配,其中:
~ 爲區分大小寫匹配
~* 爲不區分大小寫匹配
!~ 和 !~* 分別爲區分大小寫不匹配及不區分大小寫不匹配
3. 文件及目錄匹配,其中:
-f 和 !-f 用來判斷是否存在文件
-d 和 !-d 用來判斷是否存在目錄
-e 和 !-e 用來判斷是否存在文件或目錄
-x 和 !-x 用來判斷文件是否可執行
3. Nginx 的一些可用的全局變量,可用作條件判斷:
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
4、 Nginx Redirect
將全部linuxtone.org與netseek.linuxtone.org域名所有自跳轉到http://www.linuxtone.org
server {
listen 80;
server_name linuxtone.org netseek.linuxtone.org;
index index.html index.php;
root /data/www/wwwroot;
if ($host !~ "^www\.linxtone\.org$") {
rewrite ^(.*) http://www.linuxtone.org$1 redirect;
}
.....................
}
5、 Nginx 目錄自動加斜線:
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
6、 Nginx Location
1.基本語法:[和上面rewrite正則匹配語法基本一致]
location [=|~|~*|^~] /uri/ { … }
~ 爲區分大小寫匹配
~* 爲不區分大小寫匹配
!~ 和 !~* 分別爲區分大小寫不匹配及不區分大小寫不匹配
示例1:
location = / {
# matches the query / only.
# 只匹配 / 查詢。
}
匹配任何查詢,由於全部請求都已 / 開頭。可是正則表達式規則和長的塊規則將被優先和查詢匹配
示例2:
location ^~ /images/ {
# matches any query beginning with /images/ and halts searching,
# so regular expressions will not be checked.
# 匹配任何以 /images/ 開頭的任何查詢而且中止搜索。任何正則表達式將不會被測試。
}
示例3:
location ~* \.(gif|jpg|jpeg)$ {
# matches any request ending in gif, jpg, or jpeg. However, all
# requests to the /images/ directory will be handled by
# 匹配任何以 gif、jpg 或 jpeg 結尾的請求。
}
7、 Nginx expires
1.根據文件類型判斷,添加expires
# Add expires header for static content
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
root /data/www/wwwroot/bbs;
expires 1d;
break;
}
}
二、根據某個目錄判斷,添加expires
# serve static files
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /data/www/wwwroot/down;
expires 30d;
}
8、 Nginx 防盜鏈
1. 針對不一樣的文件類型
#Preventing hot linking of images and other file types
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost baidu.com;
if ($invalid_referer) {
rewrite ^/ http://www.linuxtone.org/images/default/logo.gif;
# return 403;
}
}
2. 針對不一樣的目錄
location /img/ {
root /data/www/wwwroot/bbs/img/;
valid_referers none blocked server_names *.linuxtone.org http://localhost baidu.com;
if ($invalid_referer) {
rewrite ^/ http://www.linuxtone.org/images/default/logo.gif;
#return 403;
}
}
3. 同實現防盜鏈和expires的方法
#Preventing hot linking of images and other file types
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost ;
if ($invalid_referer) {
rewrite ^/ http://www.linuxtone.org/images/default/logo.gif;
}
access_log off;
root /data/www/wwwroot/bbs;
expires 1d;
break;
}
9、 Nginx 訪問控制
1. Nginx 身份證驗證
#cd /usr/local/nginx/conf
#mkdir htpasswd
/usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/htpasswd/tongji linuxtone
#添加用戶名爲linuxtone
New password: (此處輸入你的密碼)
Re-type new password: (再次輸入你的密碼)
Adding password for user
http://count.linuxtone.org/tongji/data/index.html(目錄存在/data/www/wwwroot/tongji/data/目錄
下)
將下段配置放到虛擬主機目錄,當訪問http://count.linuxtone/tongji/即提示要密驗證:
location ~ ^/(tongji)/ {
root /data/www/wwwroot/count;
auth_basic "LT-COUNT-TongJi";
auth_basic_user_file /usr/local/nginx/conf/htpasswd/tongji;
}
2. Nginx 禁止訪問某類型的文件.
如,Nginx下禁止訪問*.txt文件,配置方法以下.
location ~* \.(txt|doc)$ {
if (-f $request_filename) {
root /data/www/wwwroot/linuxtone/test;
#rewrite …..能夠重定向到某個URL
break;
}
}
方法2:
location ~* \.(txt|doc)${
root /data/www/wwwroot/linuxtone/test;
deny all;
}
實例:
禁止訪問某個目錄
location ~ ^/(WEB-INF)/ {
deny all;
}
3. 使用ngx_http_access_module限制ip訪問
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
deny all;
}
詳細參見wiki: http://wiki.codemongers.com/NginxHttpAccessModule#allow
4. Nginx 下載限制併發和速率
limit_zone linuxtone $binary_remote_addr 10m;
server {
listen 80;
server_name down.linuxotne.org;
index index.html index.htm index.php;
root /data/www/wwwroot/down;
#Zone limit
location / {
limit_conn linuxtone 1;
limit_rate 20k;
}
..........
}
只容許客房端一個線程,每一個線程20k.
【注】limit_zone linuxtone $binary_remote_addr 10m; 這個能夠定義在主的
5. Nginx 實現Apache同樣目錄列表
location / {
autoindex on;
}
6. 上文件大小限制
主配置文件里加入以下,具體大小根據你本身的業務作調整。
client_max_body_size 10m;
10、 Nginx 日誌處理
1.Nginx 日誌切割
#contab -e
59 23 * * * /usr/local/sbin/logcron.sh /dev/null 2>&1
# cat /usr/local/sbin/logcron.sh
#!/bin/bash
log_dir="/data/logs"
time=`date +%Y%m%d`
/bin/mv ${log_dir}/access_linuxtone.org.log ${log_dir}/access_count.linuxtone.org.$time.log
kill -USR1 `cat /var/run/nginx.pid`
更多的日誌分析與處理就關注(同時歡迎你參加討論):http://bbs.linuxtone.org/forum-8-1.html
2.利用AWSTATS分析NGINX日誌
設置好Nginx日誌格式,仍後利用awstats進行分析.
請參考: http://bbs.linuxtone.org/thread-56-1-1.html
3. Nginx 如何不記錄部分日誌
日誌太多,天天好幾個G,少記錄一些,下面的配置寫到server{}段中就能夠了
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
11、Nginx Cache服務配置
若是須要將文件緩存到本地,則須要增長以下幾個子參數:
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path 緩存目錄;
其中,
proxy_store on 用來啓用緩存到本地的功能,
proxy_temp_path 用來指定緩存在哪一個目錄下,如:proxy_temp_path html;
在通過上一步配置以後,雖然文件被緩存到了本地磁盤上,但每次請求仍會向遠端拉取
文件,爲了不去遠端拉取文件,必須修改proxy_pass:
if ( !-e $request_filename) {
proxy_pass http://mysvr;
}
即改爲有條件地去執行proxy_pass,這個條件就是當請求的文件在本地的
proxy_temp_path指定的目錄下不存在時,再向後端拉取。
更多更高級的應用能夠研究ncache,官方網站: http://code.google.com/p/ncache/
詳細安裝請參照http://bbs.linuxtone.org 應用加速版ncache相關的貼子.
12、Nginx 負載均衡
1. Nginx 負載均衡基礎知識
nginx的upstream目前支持4種方式的分配
1)、輪詢(默認)
每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。
2)、weight
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。
2)、ip_hash
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。
3)、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
4)、url_hash(第三方)
2. Nginx 負載均衡實例1
upstream bbs.linuxtone.org { #定義負載均衡設備的Ip及設備狀態
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在須要使用負載均衡的server中增長
proxy_pass http://bbs.linuxtone.org/;
每一個設備的狀態設置爲:
a) down 表示單前的server暫時不參與負載
b) weight 默認爲1.weight越大,負載的權重就越大。
c) max_fails :容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
d) fail_timeout:max_fails次失敗後,暫停的時間。
e) backup: 其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。
nginx支持同時設置多組的負載均衡,用來給不用的server來使用。
client_body_in_file_only 設置爲On 能夠講client post過來的數據記錄到文件中用來作debug
client_body_temp_path 設置記錄文件的目錄 能夠設置最多3層目錄
location 對URL進行匹配.能夠進行重定向或者進行新的代理 負載均衡
3. Nginx 負載均衡實例 2
按訪問url的hash結果來分配請求,使每一個url定向到同一個後端服務器,後端服務器爲緩
存時比較有效,也能夠用做提升Squid緩存命中率.
簡單的負載均等實例:
#vi nginx.conf //nginx主配置文件核心配置
.........
#loadblance my.linuxtone.org
upstream my.linuxtone.org {
ip_hash;
server 127.0.0.1:8080;
server 192.168.169.136:8080;
server 219.101.75.138:8080;
server 192.168.169.117;
server 192.168.169.118;
server 192.168.169.119;
}
.........
include vhosts/linuxtone_lb.conf;
.........
# vi proxy.conf
proxy_redirect off;
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 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
#nginx cache
#client_body_temp_path /data/nginx_cache/client_body 1 2;
proxy_temp_path /data/nginx_cache/proxy_temp 1 2;
#vi linuxtone_lb.conf
server {
listen 80;
server_name my.linuxtone.org;
index index.php;
root /data/www/wwwroot/mylinuxtone;
if (-f $request_filename) {
break;
}
if (-f $request_filename/index.php) {
rewrite (.*) $1/index.php break;
}
error_page 403 http://my.linuxtone.org/member.php?m=user&a=login;
location / {
if ( !-e $request_filename) {
proxy_pass http://my.linuxtone.org;
break;
}
include /usr/local/nginx/conf/proxy.conf;
}
}
十3、Nginx簡單優化
1. 減少nginx編譯後的文件大小 (Reduce file size of nginx)
默認的nginx編譯選項裏竟然是用debug模式(-g)的(debug模式會插入不少跟蹤和
ASSERT之類),編譯之後一個nginx有好幾兆。去掉nginx的debug模式編譯,編譯以
後只有幾百K
在 auto/cc/gcc,最後幾行有:
# debug
CFLAGS=」$CFLAGS -g」
註釋掉或刪掉這幾行,從新編譯便可。
2. 修改Nginx的header假裝服務器
1) 修改nginx.h
#vi nginx-0.7.30/src/core/nginx.h
#define NGINX_VERSION "1.8"
#define NGINX_VER "LTWS/" NGINX_VERSION
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
2) 修改nginx_http_header_filter_module
#vi nginx-0.7.30/src/http/ngx_http_header_filter_module.c
將以下
static char ngx_http_server_string[] = "Server: nginx" CRLF;
修改成
static char ngx_http_server_string[] = "Server: LTWS" CRLF;
a) 修改nginx_http_header_filter_module
#vi nginx-0.7.30/src/http/ngx_http_special_response.c
將以下:
static u_char ngx_http_error_full_tail[] =
"<hr><center>" NGINX_VER "</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;
static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;
修改成:
static u_char ngx_http_error_full_tail[] =
"<center> "NGINX_VER" </center>" CRLF
"<hr><center>http://www.linuxtone.org</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;
static u_char ngx_http_error_tail[] =
"<hr><center>LTWS</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;
修改後從新編譯一下環境,
404錯誤的時候顯示效果圖(若是沒有指定錯誤頁的話):
利用curl命令查看服務器header
3. 爲特定的CPU指定CPU類型編譯優化.
默認nginx使用的GCC編譯參數是-O
須要更加優化可使用如下兩個參數
--with-cc-opt='-O3' \
--with-cpu-opt=opteron \
使得編譯針對特定CPU以及增長GCC的優化.
此方法僅對性能有所改善並不會有很大的性能提高,供朋友們參考.
CPUD類型肯定:
# cat /proc/cpuinfo | grep "model name"
編譯優化參數參考:http://en.gentoo-wiki.com/wiki/Safe_Cflags
4. Tcmalloc優化Nginx 性能
# wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
# tar zxvf libunwind-0.99-alpha.tar.gz
# cd libunwind-0.99-alpha/
# CFLAGS=-fPIC ./configure
# make CFLAGS=-fPIC
# make CFLAGS=-fPIC install
# wget http://google-perftools.googlecode.com/files/google-perftools-0.98.tar.gz
# tar zxvf google-perftools-0.98.tar.gz
# cd google-perftools-0.98/
# ./configure
# make && make install
# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
# ldconfig
# lsof -n | grep tcmalloc
編譯nginx 加載google_perftools_module:
./configure --with-google_perftools_module
在主配置文件加入nginx.conf 添加:
google_perftools_profiles /path/to/profile;
5. 內核參數優化
# vi /etc/sysctl.conf
#在末尾增長如下內容:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
#使配置當即生效
/sbin/sysctl -p
十4、如何構建高性的LEMP
請參見: http://www.linuxtone.org/lemp/lemp.pdf
一、 提供完整的配置腳本下載:http://www.linuxtone.org/lemp/scripts.tar.gz
二、 提供NGINX常見配置範例含(虛擬主機,防盜鏈,Rewrite,訪問控制,負載均衡Discuz相關程序靜態化及等等),你只要稍稍修改便可線上應用。
三、將原版的xcache替換成EA,並提供相關簡單調優腳本及配置文件。
更多的及更新資料請關注: http://www.linuxtone.org
十5、Nginx監控
一、 RRDTOOL+Perl腳本畫圖監控
先安裝好rrdtool ,關於rrdtool本文不做介紹,具體安裝請參照linuxtone監控版塊.
#cd /usr/local/sbnin
#wget http://blog.kovyrin.net/files/mrtg/rrd_nginx.pl.txt
#mv rrd_nginx.pl.txt rrd_nginx.pl
#chmod a+x rrd_nginx.pl
#vi rrd_nginx.pl //配置腳本文件設置好路徑
#!/usr/bin/perl
use RRDs;
use LWP::UserAgent;
# define location of rrdtool databases
my $rrd = '/data/www/wwwroot/nginx/rrd';
# define location of images
my $img = '/data/www/wwwroot/nginx/html';
# define your nginx stats URL
my $URL = "http:// 219.32.205.13/nginx_status";
…………
【注】根據本身具體的情況修改相應的路徑.
#crontab –e //加入以下
* * * * * /usr/local/sbin/rrd_nginx.pl
重啓crond後,經過配置nginx虛擬主機指到/data/www/wwwroot/nginx/html目錄,經過crond
自動執行perl腳本會生成不少圖片.
http://xxx/connections-day.png便可看到服務器狀態圖。
二、 官方Nginx-rrd 監控服務(多虛擬主機)(推薦)
網址:http://www.nginx.eu/nginx-rrd.html
此解決方案實際上是基於上述監控方案的一個改進和加強,一樣先安裝好rrdtool這個畫圖工
具和相應的perl模塊再作以下操做:
先創建好生成的庫存和圖片存放錄
#mkdir -p /data/www/wwwroot/nginx/{rrd,html}
#cd /usr/local/sbin
#wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz
#tar zxvf nginx-rrd-0.1.4.tgz
#cd nginx-rrd-0.1.4
#cd etc/
#cp nginx-rrd.conf /etc
#cd etc/cron.d
#cp nginx-rrd.cron /etc/cron.d
#cd /usr/local/src/nginx-rrd-0.1.4/html
# cp index.php /data/www/wwwroot/nginx/html/
#cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin
#cp * /usr/sbin/
#vi /etc/nginx-rrd.conf
#####################################################
#
# dir where rrd databases are stored
RRD_DIR="/data/www/wwwroot/nginx/rrd";
# dir where png images are presented
WWW_DIR="/data/www/wwwroot/nginx/html";
# process nice level
NICE_LEVEL="-19";
# bin dir
BIN_DIR="/usr/sbin";
# servers to test
# server_utl;server_name
SERVERS_URL="http://219.32.205.13/nginx_status;219.32.205.13
http://www.linuxtone.org/nginx_status;www.linuxtone.org"" //根據你的具體狀況作調整.
SEVERS_URL 格式 http://domain1/nginx_status;domain1 http://domain2/nginx_status;domain2
這種格式監控多虛擬主機鏈接狀態:
重點啓crond服務,仍後經過http://219.32.205.13/nginx/html/ 便可訪問。配置過程很簡單!
三、 CACTI模板監控Nginx
利用Nginx_status狀態來畫圖實現CACTI監控
nginx編譯時容許http_stub_status_module
# vi /usr/local/nginx/conf/nginx.conf
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.37;
deny all;
}
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
# wget http://forums.cacti.net/download.php?id=12676
# tar xvfz cacti-nginx.tar.gz
# cp cacti-nginx/get_nginx_socket_status.pl /data/cacti/scripts/
# cp cacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/
# chmod 755 /data/cacti/scripts/get_nginx*
檢測插件
# /data/cacti/scripts/get_nginx_clients_status.pl http://192.168.1.37/nginx_status
在cacti管理面板導入
cacti_graph_template_nginx_clients_stat.xml
cacti_graph_template_nginx_sockets_stat.xml
十6、常見問題與錯誤處理
一、 400 bad request錯誤的緣由和解決辦法
配置nginx.conf相關設置以下.
client_header_buffer_size 16k;
large_client_header_buffers 4 64k;
根據具體狀況調整,通常適當調整值就能夠。
二、 Nginx 502 Bad Gateway錯誤
proxy_next_upstream error timeout invalid_header http_500 http_503;
或者嘗試設置:
large_client_header_buffers 4 32k;
三、 Nginx出現的413 Request Entity Too Large錯誤
這個錯誤通常在上傳文件的時候會出現,
編輯Nginx主配置文件Nginx.conf,找到http{}段,添加
client_max_body_size 10m; //設置多大根據本身的需求做調整.
若是運行php的話這個大小client_max_body_size要和php.ini中的以下值的最大值
一致或者稍大,這樣就不會由於提交數據大小不一致出現的錯誤。
post_max_size = 10M
upload_max_filesize = 2M
四、 解決504 Gateway Time-out(nginx)
遇到這個問題是在升級discuz論壇的時候遇到的
通常看來, 這種狀況多是因爲nginx默認的fastcgi進程響應的緩衝區過小形成的,
這將致使fastcgi進程被掛起, 若是你的fastcgi服務對這個掛起處理的很差, 那麼最後就
極有可能致使504 Gateway Time-out
如今的網站, 尤爲某些論壇有大量的回覆和不少內容的, 一個頁面甚至有幾百K。
默認的fastcgi進程響應的緩衝區是8K, 咱們能夠設置大點
在nginx.conf裏, 加入:
這表示設置fastcgi緩衝區爲8×128k
固然若是您在進行某一項即時的操做, 可能須要nginx的超時參數調大點,例如設置成60秒:
只是調整了這兩個參數, 結果就是沒有再顯示那個超時, 能夠說效果不錯, 可是也
多是因爲其餘的緣由, 目前關於nginx的資料不是不少, 不少事情都須要長期的經驗
累計纔有結果, 期待您的發現哈!
五、 如何使用Nginx Proxy
朋友一臺服務器運行tomcat 爲8080端口,IP:192.168.1.2:8080,另外一臺機器
IP:192.168.1.8. 朋友想經過訪問http://192.168.1.8便可訪問tomcat服務.配置以下:
在192.168.1.8的nginx.conf上配置以下:
server {
listen 80;
server_name java.linuxtone.org
location / {
proxy_pass http://192.168.1.2:8080;
include /usr/local/nginx/conf/proxy.conf;
}
}
六、 如何關閉Nginx的LOG
access_log /dev/null;
error_log /dev/null;
十7、相關資源下載
1. nginx配置示例及腳本下載:
# wget http://www.linuxtone.org/lemp/scripts.tar.gz #此腳本範例按期更新.
做者:NetSeek http://www.linuxtone.org (IT運維專家網|集羣架構|性能調優)
歡迎轉載,轉載時請務必以超連接形式標明文章原始出處和做者信息及本聲明.Source URL: http://www.21andy.com/blog/20100203/1609.html