1. 程式人生 > >配置Nginx,完善Nginx啟動指令碼

配置Nginx,完善Nginx啟動指令碼

#!/bin/sh
#
### see http://www.muduo.net/index.php/uid-8974-action-viewspace-itemid-310023
#
### 指令碼2寫的比較完善,相比指令碼1增加了線上升級及配置語法檢測功能
#
# 指令碼3是根據指令碼1完善過來的。由於nginx本身不能通過pipe來傳遞日誌資料,如apache那樣直接。
# 所以,在這裡通過fifo(named pipe)來將日誌資料傳遞給cronolog,再通過cronolog將日誌按照指定的格式來寫日誌檔案。
# 指令碼通過檢索 nginx.conf 來查詢日誌檔案的位置,然後通過監測該日誌檔案是否為fifo(test -p file),
# 如果不是fifo檔案,則刪掉該檔案,並執行 mkfifo $fife生成fifo檔案。
# 通過cat $fifofile,寫入到cronolog的管道中,從而實現日誌的輪轉。基本實現了較好的功能。
# 有興趣的朋友可以把指令碼2和指令碼3進行整合,實現更加完美的功能 :)
#
# Modified:劉勝 <

[email protected]>
# 改進0:指令碼3無需依賴 start-stop-daemon 命令
# 改進1:增加 ps, test 選項
# 改進2:修改LOGDIR,日誌輪換格式 [/usr/local/nginx/logs/20071221/access.log]
# 改進3:修改LOGDIR,日誌輪換格式 [/usr/local/nginx/logs/access.log.20071221] 參考log4j日誌輪換格式
# 改進4:修復 restart時 日誌輪換失效(在d_start後執行d_cronologs命令;注意d_stop後不能執行d_killcronologs命令)
# 改進5:增加 upgrade 選項,支援線上升級
#
# chkconfig: 2345 08 99
# description: Starts, stops nginx
#
#dscription: Startup script for nginx webserver on Debian. Place in /etc/init.d and
# run 'sudo update-rc.d nginx defaults', or use the appropriate command on your
# distro.
#
# Author: Ryan Norbauer <
[email protected]
>
# Modified: Geoffrey Grosenbach http://topfunky.com
# Modified: chunshengster <[email protected]>

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Nginx/0.6.22"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
CONFIG=/usr/local/nginx/conf/nginx.conf
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
#CRONOLOG=/usr/local/sbin/cronolog
CRONOLOG=cronolog
#LOGDIR=/data1/nginxlogs/%Y-%m-%d/
#LOGDIR=/usr/local/nginx/logs/%Y%m%d/
LOGDIR=/usr/local/nginx/logs
LOGEND=.%Y%m%d

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

#functions
d_getlogs(){
LOGS=`grep -E "[access|error]_log" $CONFIG | grep -v "#" | awk '{print $2}' | cut -d/; -f 1`
echo "d_getlogs()...ok"
}
d_mkfifo(){
echo "d_mkfifo()..."
logs=$*
#echo $logs
for log in $logs;do
   #echo "mkfifo $log";
   if test ! -p $log; then
    echo "make fifo log $log..."
    rm -v $log;
    mkfifo $log
   fi
done;
echo "d_mkfifo()...ok"
}
d_mkfifolog(){
echo "d_mkfifolog()..."
LOGS=`grep -E "[access|error]_log" $CONFIG | grep -v "#" | awk '{print $2}' | cut -d/; -f 1`
d_mkfifo $LOGS;
echo "d_mkfifolog()...ok"
}
d_cronologs(){
echo "d_cronologs()..."
LOGS=`grep -E "[access|error]_log" $CONFIG | grep -v "#" | awk '{print $2}' | cut -d/; -f 1`
#echo $LOGS
d_mkfifo $LOGS;
for log in $LOGS; do
   logname=`basename $log`
   #echo "$logname"
   #cat $log | $CRONOLOG $LOGDIR/$logname &
   #cat $log | $CRONOLOG $LOGDIR/$logname.%Y%m%d &
   cat $log | $CRONOLOG $LOGDIR/$logname$LOGEND &
done
echo "d_cronologs()...ok"
}
d_killcronologs(){
echo "d_killcronologs()..."
LOGS=`grep -E "[access|error]_log" $CONFIG | grep -v "#" | awk '{print $2}' | cut -d/; -f 1`
pids_cat=`pidof cat`
pids_cronolog=`pidof cronolog`
for pid in pids_cronolog pids_cat; do
   kill -9 $pid
done
if test -z `pidof cat` -a test -z `pidof cronolog`; then
   echo "All depended pids are killed !"
else
   echo "Not all the pids are killed !"
fi
echo "d_killcronologs()...ok"
}
d_start() {
echo "### Starting $DESC: $NAME"
$DAEMON -c $CONFIG || echo " already running"
}

d_stop() {
echo "### Stopping $DESC: $NAME"
test -f $PIDFILE && kill -QUIT `cat $PIDFILE`
}

d_reload() {
echo "### Reloading $DESC configuration ..."
kill -HUP `cat $PIDFILE` || echo " can't reload"
}
d_ps() {
ps -ef | egrep '(PID|nginx|cronolog)' | grep -v grep | grep -v ".sh"
#ps aux | egrep '(PID|nginx|cronolog)' | grep -v grep | grep -v ".sh"
}

configtest() {
#ebegin "Checking nginx' configuration"
#/usr/sbin/nginx -c /etc/nginx/nginx.conf -t
#eend $? "failed, please correct errors above"
echo "### Checking $DESC configuration..."
$DAEMON -c $CONFIG -t
}

upgrade() {
configtest || return 1
echo "### Upgrading $DESC: $NAME"
echo "### 1) Sending USR2 to old binary"
kill -USR2 `cat $PIDFILE` &>/dev/null
echo "### 2) Sleeping 3 seconds before pid-files checking"
sleep 3
if [ ! -f $PIDFILE.oldbin ]; then
   echo "### E File with old pid not found"
   return 1
fi
if [ ! -f $PIDFILE ]; then
   echo "### E New binary failed to start"
   return 1
fi
echo "### 3) Sleeping 3 seconds before WINCH"
sleep 3 ; kill -WINCH `cat $PIDFILE.oldbin`

echo "### 4) Sending QUIT to old binary"
   kill -QUIT `cat $PIDFILE.oldbin`
echo "### 5) Upgrade completed"
d_ps
sleep 3
#eend $? "Upgrade failed"
}

case "$1" in
start)
d_ps
d_start
d_cronologs
echo "."
;;
stop)
d_ps
d_stop
d_killcronologs
echo "."
;;
reload)
d_reload
echo "### Reloading $DESC: OK"
;;
restart)
echo "### Restarting $DESC: $NAME"
d_ps
d_stop;   #d_killcronologs #不能增加,否則異常退出
# One second might not be time enough for a daemon to stop,
# if this happens, d_start will fail (and dpkg will break if
# the package is being upgraded). Change the timeout if needed
# be, or change d_stop to have start-stop-daemon use --retry.
# Notice that using --retry slows down the shutdown process somewhat.
sleep 3
d_ps
d_start; d_cronologs
echo "### Restarting $DESC: OK"
        ;;
mklog)
d_mkfifolog
;;
test)
echo "### Checking $DESC configuration..."
$DAEMON -c $CONFIG -t
$DAEMON -v
;;
ps)
#d_ps
$DAEMON -v
;;
upgrade)
upgrade
echo "### Upgrade $DESC: OK"
;;
*)
echo "### Usage: $SCRIPTNAME {start|stop|restart|reload|test|ps|upgrade}" >&2
exit 3
;;
esac

d_ps

exit 1

---------

Nginx,它的發音為“engine X”, 是一個高效能的HTTP和反向代理伺服器,同時也是一個IMAP/POP3/SMTP 代理伺服器.Nginx
是由 Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點開發的,它已經在該站點執行超過兩年半了。直到2007年4月,俄羅 斯大約有20%左右的虛擬主機是由nignx服務或代理的。Google線上安全部落格中統計nginx服務或代理了大約所有Internet虛擬主機的4%。而netcraft的統計顯示,nginx服務的主機在過去的一年裡以四倍的速度增長。短短的幾年裡,它的排名已躍進第9。(參見:http://survey.netcraft.com/Reports/200707/ )

現在,Igor 將原始碼以類BSD許可證的形式釋出。Nginx因為它的穩定性、豐富的模組庫、靈活的配置和低系統資源的消耗而聞名.業界一致認為它是Apache2.2+mod_proxy_balancer的輕量級代替者,不僅是因為響應靜態頁面的速度非常快,而且它的模組數量達到Apache的近2/3。對proxy 和 rewrite 模組的支援很徹底,還支援mod_fcgi、ssl 、vhosts ,適合用來做mongrel clusters的前端HTTP響應。

nginx做為HTTP伺服器,有以下幾項基本特性:
–>處理靜態檔案,索引檔案以及自動索引;開啟檔案描述符緩衝.
–>無快取的反向代理加速,簡單的負載均衡和容錯.
–>FastCGI,簡單的負載均衡和容錯.
–>模組化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理伺服器處理單頁中存在的多個SSI,則這項處理可以並行執行,而不需要相互等待。
–>支援SSL 和 TLS
SNI.

Nginx專為效能優化而開發,效能是其最重要的考量, 實現上非常注重效率 。它支援核心Poll模型,能經受高負載的考驗,
有報告表明能支援高達 50,000 個併發連線數。

Nginx具有很高的穩定性。其它HTTP伺服器,當遇到訪問的峰值,或者有人惡意發起慢速連線時,也很可能會導致伺服器實體記憶體耗盡頻繁交換,失去響應,只能重啟伺服器。例如當前apache一旦上到200個以上程序,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與記憶體佔用率非常低。nginx官方表示保持10,000個沒有活動的連線,它只佔2.5M記憶體,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言, nginx比lighthttpd更勝一籌。

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 (Linux2.2+),accept-filter (FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支援,從而大大提高了效能。

當然,nginx還很年輕,多多少少存在一些問題,比如:
–>Nginx是俄羅斯人建立,目前文件方面還不是很完善.因為文件大多是俄語,所以文件方面這也是個障礙.
–>儘管nignx的模組比較多,但它們還不夠完善。
–>對指令碼的支援力度不夠。

這些問題,nginx的作者和社群都在努力解決,我們有理由相信nginx將繼續以高速的增長率來分享輕量級HTTP伺服器市場,會有一個更美好的未來。

http://www.riceonfire.org/emiller/nginx-modules-guide.html#create_loc_conf 開發Nginx模組
High-Level Overview of Nginx's Module Delegation
Nginx modules have three roles we'll cover:
-handlers process a request and produce output
-filters manipulate the output produced by a handler
-load-balancers choose a backend server to send a request to, when more than one backend server is eligible

http://www.phpchina.com/bbs/redirect.php?tid=45848&goto=lastpost&sid=z0PPk5
由於現在的BT下載軟體越來越多了,我們如何限制下載的併發數和速率呢?apache需要三方模組,nginx就不用了:)
在nginx利用兩個指令即可實現:limit_zone(limit_conn) 來限制併發數,limit_rate來限制下載的速率,請看上面的配置例項.
               #Zone limit
               location / {
                   limit_conn   one 1;
                   limit_rate 20k;
               }

http://www.google.cn/trends?q=memcached%2C%2CJCS%2Coscache%2CJCache&ctab=0&hl=zh-CN&geo=all&date=all memcached,,JCS,oscache,JCache 的流行程度。
http://smallbizit.ctocio.com.cn/tips/336/7699336.shtml   大型網站架構之:Wikimedia的體系結構
關於wikimedia伺服器的文章
  平臺:Apache,Linux,MySQL,PHP,Squid,LVS,Lucene搜尋,分散式物件快取記憶體Memcached,Lighttpd影象伺服器
  統計資訊:
  8 百萬文章,覆蓋了超過100中語言
  世界前10最繁忙的站點
  指數增長:訪問者/流量/伺服器數量在每4-6個月翻倍;高峰期30000HTTP請求量;3 Gbit/s 資料流量;
  3個數據中心:坦帕[美國佛羅里達州西部港市]、阿姆斯特丹、漢城
  350個伺服器,從1x P4到2x Xeon Quad-Core排列,0.5 - 16 GB記憶體
  大約6個人員管理
  3個不同的州設有3個群集器

在192.168.0.82上安裝Nginx-0.6.17版
$ uname -a # Linux localhost.localdomain 2.6.9-22.EL #1 Mon Sep 19 18:20:28 EDT 2005 i686 i686 i386 GNU/Linux
//107 Linux ubuntu 2.6.22-14-server #1 SMP Sun Oct 14 23:34:23 GMT 2007 i686 GNU/Linux
//121 Linux mail.infothunder.com 2.6.9-22.ELsmp #1 SMP Mon Sep 19 18:32:14 EDT 2005 i686 i686 i386 GNU/Linux
$ cd /home/appusr/lius/src/
$ tar zxvf pcre-7.4.tar.gz
$ cd pcre-7.4
$ ./configure
$ make
# make install # root 許可權
$ tar nginx-0.6.17.tar.gz
$ cd nginx-0.6.17
$ ./configure --with-md5=/usr/lib --with-sha1=/usr/lib --with-openssl=/usr/include --with-http_stub_status_module
$ make
# make install
# cp nginx.sh /usr/local/nginx/conf
# cp start-stop-daemon /usr/local/nginx/conf
# cd /usr/local/nginx/conf
# chmod +x *.sh start-stop-daemon
# vi nginx.sh # 添加當前路徑 .

# ./nginx.sh start # 【失敗,無法使用start-stop-daemon啟動】
Starting nginx-0.6.17: start-stop-daemon: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by start-stop-daemon)
# ls -lt /lib/tls/libc*   # 版本過低,在Ubuntu中【/lib/libc.so.6 -> libc-2.6.1.so】
lrwxrwxrwx 1 root root      13 Mar 1 2007 /lib/tls/libc.so.6 -> libc-2.3.4.so
-rwxr-xr-x 1 root root 1454462 Aug 20 2005 /lib/tls/libc-2.3.4.so

http://man.chinaunix.net/linux/debian/debian_faq.html 7.2 如何升級一個執行中的程式
Debian GNU/Linux 系統的核心支援執行中替換檔案.—— 我們另外提供可一個稱作start-stop-daemon 程式用於啟動時驅動程序或核心執行級別發生變化時停掉程序(如,由多使用者到單使用者模式或到關機模式).包含某個程序的軟體包安裝時,安裝指令碼停止和重起程序呼叫用的也是這個程式.

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
2007/12/06 14:44:53 [emerg] 21836#0: getpwnam("www-data") failed in /usr/local/nginx/conf/nginx.conf:3
2007/12/06 14:44:53 [emerg] 21836#0: the configuration file /usr/local/nginx/conf/nginx.conf test failed
# vi nginx.conf # 將第二行 usr www-data 修改為 user nobody nobody;
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
2007/12/06 14:49:29 [info] 21850#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2007/12/06 14:49:29 [info] 21850#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

http://blog.chinaunix.net/u/26862/showart_384362.html web負載均衡與反向代理之/RHEL AS4/nginx-0.5.17
# 定義啟動指令碼
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 啟動81埠
# ps aux|grep nginx|grep -v grep   # 檢查ngins程序是否啟動:
# netstat -ln # 檢視埠81是否存在
tcp        0      0 0.0.0.0:81                  0.0.0.0:*                   LISTEN     
# http://192.168.0.82:81/status/ # 無法訪問,修改nginx.conf 的 localtion /status部分對IP的限制;
# kill -9 nginx 《slave process的pid》
# killall -9 nginx

# 給nginxstatus做身份驗證:
# htpasswd -c htpasswd lius

檢視nginxstatus:
http://192.168.0.82/nginxstatus/,輸入驗證帳號密碼,即可看到類似如下內容:
Active connections: 328
server accepts handled requests
9309 8982 28890
Reading: 1 Writing: 3 Waiting: 324
第一行表示目前活躍的連線數
第三行的第三個數字表示Nginx執行到當前時間接受到的總請求數,如果快達到了上限,就需要加大上限值了。

檢視日誌:
#cd /usr/local/nginx
#tail -f logs/access.logs(檢視訪問情況)


驗證Nginx功能:
-負載均衡,是否能自動恢復。。。pass http://192.168.2.107:81/test2/
-負載均衡,是否能根據特殊HTTP頭資訊(如手機號),指向特點伺服器。。。第三方補丁,根據url的hash來定向;
-日誌格式,是否能儲存特殊HTTP頭資訊。。。參考 http://blogger.org.cn/blog/more.asp?name=lhwork&id=21841
-裝置配置,是否能配置/dev/shm的大小(預設128M記憶體虛擬路徑)。。。手工修改方式成功,自動方式未實際測試;
-測試檔案,設定從定向到php/jsp等,生成檔案,通過X-Accel-Redirect返回給Nginx,使用sendfile傳送。
-支援PHP指令碼,通過FastCGI/spawn-fcgi
-支援Ruby指令碼,通過FastCGI或者moral

http://blog.s135.com/read.php?314 Nginx 0.5.33 + PHP 5.2.5(FastCGI)搭建勝過Apache 10倍的Web伺服器(第2版)

應用程式如果遵循POSIX或者使用GLIBC(2.2和更高版本),通常使用/dev/shm作共享記憶體(shm_open,shm_unlink)。/dev/shm是一個臨時檔案系統(tmpfs),可以從/etc/fstab中mount。因此,支援標準的引數例如"size",可以用來增加或者減少在/dev/shm上的tmpfs大小.(預設的,它的大小是系統RAM的一半)。

[email protected]:/usr/local/nginx/conf$ df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              3889892   1348528   2343768 37% /
varrun                  127952       208    127744   1% /var/run
varlock                 127952         0    127952   0% /var/lock
udev                    127952        36    127916   1% /dev
devshm                  127952         0    127952   0% /dev/shm

http://blogger.org.cn/blog/more.asp?name=lhwork&id=21841 #設定日誌格式
        log_format main         '$remote_addr - $remote_user [$time_local] '
                                                '"$request" $status $bytes_sent '
                                                '"$http_referer" "$http_user_agent" '
                                                '"$gzip_ratio"';

        log_format download '$remote_addr - $remote_user [$time_local] '
                                                '"$request" $status $bytes_sent '
                                                '"$http_referer" "$http_user_agent" '
                                                '"$http_range" "$sent_http_content_range"';

日誌問題:1,記錄特殊http頭資訊;2;自動切換,每天一個日誌檔案。

如果你想自己寫的話,這樣的方法也許能夠參考一下(我使用的Nginx沒有apache的rotatelogs,所以自己寫個指令碼,你可以參考一下):

1、crontab中設定如下
# root crontab entry:
59 23 * * *   /opt/nginx/bin/nginx-aaa.rotatelog 2>&1 > /dev/null

2、截斷指令碼
## nginx-aaa.rotatelog
cd /var/log/nginx/aaa
/bin/mv aaa_access_log aaa_access_log-`/bin/date +"%y%m%d"`
/bin/kill -USR1 `/bin/cat /var/run/nginx/nginx.pid`

http://wiki.codemongers.com/NginxChsHttpUpstreamRequestHashModule 根據URL進行hash選擇的負載均衡(需要第三方補丁)
本模組由第三方提供,不包含在 Nginx 的原始碼釋出版中。安裝介紹等請看 這裡.
The upstream_hash module provides simple upstream load distribution by hashing a configurable variable (e.g., the request URI, incoming HTTP headers, or some combination). Example usage:
upstream backend {
    server server1;
    server server2;
    hash   $request_uri;
}
Here, Nginx will choose server1 or server2 by hashing the request URI ($request_uri).

http://wiki.codemongers.com/NginxHttpGeoModule 通過geo定義變數
geo $geo {
    default          0;
    127.0.0.1/32     2;
    192.168.1.0/24   1;
    10.1.0.0/16      1;
}

http://wiki.codemongers.com/NginxChsHttpProxyModule 反向代理,加快取(參考)
location /images/ {
    root                 /data/www;
    error_page           404 = /fetch$uri;
}
location /fetch {
    internal;
    proxy_pass           http://backend;
    proxy_store          on;
    proxy_store_access   user:rw group:rw all:r;
    proxy_temp_path      /data/temp;
    alias                /data/www;
}


http://hi.baidu.com/xilihwala/blog/item/2130b8128ccdebccc3fd7837.html 如何在反向代理中加快大檔案處理
Serving Big Files with PHP/Rails faster
(1 Apache - mod_xsendfile 2 nginx - X-Accel-Redirect 3 lighttpd(lighty) - x-sendfile)
http://wiki.codemongers.com/NginxXSendfile 通過X-SendFile加速
Lighttpd has this feature and there is a mod_xsendfile for Apache2.
location /protected/ {
    internal;
    root   /some/path;
}
add_header("X-Accel-Redirect: /protected/iso.img");
X-Accel-Limit-Rate: 1024
X-Accel-Buffering: yes|no
X-Accel-Charset: utf-8
http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/ Using X-Accel-Redirect Header With Nginx to Implement Controlled Downloads (with rails and php examples)

http://bianbian.lilydoc.net/index.php/technology/linux/156.html 設定多少個Nginx工作程序才合適?
搜尋到原作者的話:
一般一個程序足夠了,你可以把連線數設得很大。如果有SSL、gzip這些比較消耗CPU的工作,而且是多核CPU的話,可以設為和CPU的數量一樣。或者要處理很多很多的小檔案,而且檔案總大小比記憶體大很多的時候,也可以把程序數增加,以充分利用IO頻寬(主要似乎是IO操作有block)。
As a general rule you need the only worker with large number of worker_connections, say 10,000 or 20,000.
However, if nginx does CPU-intensive work as SSL or gzipping and you have 2 or more CPU, then you may set worker_processes to be equal to CPU number.
Besides, if you serve many static files and the total size of the files is bigger than memory, then you may increase worker_processes to utilize a full disk bandwidth.
——Igor Sysoev
經我實踐配置,多cpu+gzip+N多小檔案+檔案總大小大大超過記憶體 的環境(BBS啦~),設定為cpu的兩倍較好。(不過一個nginx是4.3M噢)

2 Responses to “[譯]nginx的worker_processes設為多少才合適?”

輕 Says: October 21st, 2007 at 06:25:04
在我的實際使用中(nginx+php-cgi),還是覺得CPU*1為好
一個CPU開啟多個worker_processes的話,會導致負載瞬間狂升至20+
相反一個CPU只開一個的話,會很穩!

bianbian Says:
October 22nd, 2007 at 01:03:05
嗯,這個要根據環境調節的。我的是8個CPU的伺服器。。。另外,可以修改nginx的cc make引數,把gcc的-g(debug)引數去掉。可以大大減小編譯後的bin大小。
-----------------
# nginx.conf.hh 支援根據手機號分發

user nobody nobody;
worker_processes 4;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid        logs/nginx.pid;


events {
    use epoll;
    worker_connections 2048;
}


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"
   "$http_x_up_calling_line_id"
   "$upstream_addr"
   $upstream_response_time '
   ;

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

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout 0;
    keepalive_timeout 65;

    gzip on;

    #設定負載均衡的伺服器列表
    upstream resin0 {
        server 10.28.1.35:8080 weight=5;
        server 10.28.1.37:8080 weight=1;
    }
    upstream resin1 {
        server 10.28.1.35:8080 weight=1;
        server 10.28.1.37:8080 weight=5;
    }
    upstream resin2 {
        server 10.28.1.38:8080 weight=5;
    }
    upstream resin3 {
        server 10.28.1.3:8080 weight=2;
    }

    server {
        listen       80;
        server_name localhost;

        #charset koi8-r;

        #access_log logs/host.access.log main;

        location / {
            root   /home/www/html;
            index index.html index.htm;
        }

        location /NginxStatus {
            stub_status             on;
            access_log              /usr/local/nginx/logs/NginxStatus.log;
            auth_basic              "NginxStatus";
            auth_basic_user_file    htpasswd;
        }

        #對 "/store" 啟用負載均衡
        location /store {
            if ( $http_x_up_calling_line_id ~ ^86139 ) {
                rewrite ^(/store/)(.*)$ /store139/$2 last;
            }
            if ( $http_x_up_calling_line_id ~ ^86136 ) {
                rewrite ^(/store/)(.*)$ /store136/$2 last;
            }
            rewrite ^(/store/)(.*)$ /store135/$2 last;
        }
        location /store139 {
            proxy_pass      http://resin3/store;
            include         proxy.conf;
        }
        location /store136 {
            proxy_pass      http://resin2/store;
            include         proxy.conf;
        }
        location /store135 {
            proxy_pass      http://resin1/store;
            include         proxy.conf;
        }
        location /drminf {
            proxy_pass      http://resin0/drminf;
            include         proxy.conf;
        }

        #error_page 404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
            root   html;
        }

      }

相關推薦

配置Nginx完善Nginx啟動指令碼

#!/bin/sh#### see http://www.muduo.net/index.php/uid-8974-action-viewspace-itemid-310023 #### 指令碼2寫的比較完善,相比指令碼1增加了線上升級及配置語法檢測功能## 指令碼3是根據指令碼1完善過來的。由於nginx

二進制編譯nginx完成服務啟動腳本

netstat status term enter 編譯 ash 內容 完成 eas 一丶環境準備關閉防火墻,安裝軟件包,上傳nginx壓縮包並解壓,配置yum源二丶創建用戶nginx三丶進入解壓路徑,並安裝服務到指定路徑四丶安裝服務五丶編寫腳本PS:腳本內容如下#!/bi

tomcat叢集配置session並用nginx做反向代理和負載均衡

一、tomcat伺服器配置session共享 tomcat配置session共享,有兩種方式 ①通過修改配置檔案,讓tomcat不停的廣播自己的session給其他的tomcat,建議使用5臺以下的伺服器,5臺及以上,建議使用方式二 ②將使用者資訊存入redis,每臺

gradle配置沒錯但是就是啟動有錯誤的解決辦法

FAILURE: Build failed with an exception. * What went wrong: org.slf4j.impl.SimpleLoggerFactory cannot be cast to org.gradle.internal.logg

nginx功能之一可以啟動一個本地伺服器通過配置server_name和root目錄等來訪問目標檔案

  一. 下載 http://nginx.org/   下載後解壓   二. 修改配置檔案 nginx配置檔案在 nginx-1.8.0\conf\nginx.conf http { #壓縮html

linux下【centos】nginx自動原始碼編譯安裝指令碼以及通過service 啟動/停止/過載 nginx的服務指令碼

 第一:指令碼為nginx原始碼編譯安裝的指令碼,可以幫助使用者自動建立系統使用者“nginx”;可以使用者自己指定安裝路徑,配置檔案路徑,執行檔案路徑等; 第二:可以配置第二個指令碼使用,通過service服務來管理nginx。 [[email protect

linux 下 nginx 服務安裝及配置開機自動啟動

最近經常需要安裝linux伺服器,經過網上查詢整理資料,以備後用。 模組依賴性Nginx需要依賴下面3個包 1. gzip 模組需要 zlib 庫 ( 下載: http://www.zlib.net/ ) 2

nginx在windows下的安裝以及編寫啟動關閉nginx等操作的指令碼

Nginx ("engine x") 是一款高效能的,輕量級的HTTP Web 伺服器 和反向代理伺服器及電子郵件 IMAP/POP3/SMTP 代理伺服器。 Nginx 是由俄羅斯的程式設計師 Igor Sysoev 所開發,為俄羅斯訪問量第二的 Rambler.ru

Nginx配置使用啟動、重啟、關閉以及路徑配置

2、然後將其下載下來,壓解開,放在自己想放的路徑下,我的是E:\nginx 3、開啟cmd,進入上面的路徑下 start nginx 然後先進行下面的步驟nginx -s reload  、nginx -t  接下來你就可以訪問localhost出現welcome ng

mac下安裝配置nginxphp環境

服務 端口 通過 etc 安裝 set cnblogs fast ocr 1、安裝nginx 在mac系統下我們使用brew來安裝nginx,使用brew來安裝,它會自動安裝相應的依賴庫。 brew install nginx 在安裝完畢後,終端會輸出配置信息: Doc

用shell編寫nginx腳本的啟動關閉重加載

shell bash case #!/bin/bash ----默認執行shell方式 #chkconfig: 2345 10 80 ----加入到開機執行的方式 path="/usr/local/nginx/sbin/nginx" --

淺談Nginx服務器的安裝升級、配置、LNMP平臺搭建、nginx+fastcgi、nginx高級技術-地址重寫及優化

perl 新的 大文件 文件的 add 並發連接數 文件配置 redirect ntp Nginx服務器:是俄羅斯人編寫的十分輕量級的HTTP服務器,是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP代理服務器 一、安裝Nginx軟件: 準備工

certbot在Centos7上配置合法簽名證書實現nginx的https訪問

certbot合法簽名證書 nginx配置https 咖菲貓-李常明筆記 公司因之前使用的openssh創建的自簽名證書,有一個弊端,就是在某些客戶端上不能使用此證書,無法使用https連接,所以,研究了一下certbot 做簽名證書! certbot的官網地址: https://certbot.

LNMP(Nginx負載均衡SSL原理Nginx配置SSL生產SSL密鑰對)

orm mage 解碼 web服務 bind 先來 mkdir padding ddr 一、Nginx負載均衡負載均衡:單從字面上的意思來理解就可以解釋N臺服務器平均分擔負載,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。那麽負載均衡的前提就是要有多臺服務器才能實現,

配置nginxupstream服務器

gcc 失敗 進行 rep timeout 圖片 重要 ora 火狐瀏覽器 搭建Nginx服務器 1.1 問題 在IP地址為192.168.4.5的主機上安裝部署Nginx服務,並可以將Nginx服務器,要求編譯時啟用如下功能: SSL加密功能 設置Nginx賬戶及組名稱

搭建lnmp環境nginx配置文件/etc/nginx/nginx.conf

ati ces sse keep eve out http ali nec #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #e

MySQLnginxtomcat檢查進程是否存在以及啟動

返回 date usr local 測試 mysql tmp 過濾 日誌輸出 vi mysql_mon.sh#!/bin/bashif [ netstat -tlunp|grep mysql|wc -l -gt 0 ] #過濾進程名為mysql,轉成數字 thenec

Win7下nginx默認80端口被System占用造成nginx啟動報錯

運行 eight ros start () ims ping -s 窗口 在win7 32位旗艦版下,啟動1.0.8版本nginx,顯示如下錯誤:2012/04/02 13:55:59 [emerg] 7864#2376: bind() to 0.0.0.0:80 fai

Nginx 配置SSL實現 https 訪問

之前因為蘋果強制使用 HTTPS,在Apache上配置過SSL了,今天把 Apache換成了Nginx,記錄下Nginx配置SSL過程。   1、在Nginx conf目錄下新建一個 sslkey目錄(nginx-1.12.2\conf\sslkey),並將申請的證書(for

在centeros7中配置nginxtomcate

上一篇已經安裝好了nginx 前提你有域名,伺服器有外網IP,不然就是扯蛋 配置tomcate和繫結域名 找到nginx/conf/nginx.conf,做如下關鍵配置: upstream www{ #配置upstream節點,這裡節點名為“www”   ser