天天看點

更換apache到nginx的操作過程全記錄

一個跑了3年多的組裝pc伺服器, 1.5G記憶體,p4 2.8G cpu,apache2.28+mod_php+mysql。95%的頁面是靜态頁,每天大約有各類http請求500-1000萬個(包括html,js,css,jpg,gif,php等)   啟用了gzip壓縮,大部分時間負載在1.0以下,但是偶爾會暴漲,導緻當機,嚴重情況一天down機N次。一直沒找到原因,可能是伺服器不行了。 正好想測試一下nginx + php-fastcgi 性能,也許能行。 說幹就幹,看了一些nginx文檔,開始實施了。過程如下:

安裝php最新版,直接用自帶的fastcgi模式:

./configure --prefix=/usr/local/php526cgi --with-mysql=/usr/local/mysql --with-zlib=/usr/local/src/zlib --with-gd --with-freetype-dir=/usr/local/src/freetype --with-jpeg-dir=/usr/local/src/jpeg/lib --enable-gd-native-ttf --with-png-dir=/usr/local/src/libpng --enable-exif --enable-ftp --with-curl --enable-mbstring=all --enable-force-cgi-redirect --enable-zip --enable-zend-multibyte  --enable-fastcgi

make 

make install

由于已經是有php環境了,zlib等元件早已安裝好。我隻需要--enable-fastcgi就ok了。 php搞定!

mysql不動它,繼續用。

執行php-fastcgi:

我們可以利用Lighttpd的spawn-fcgi來控制cgi程序的運作。獲得spawn-fcgi的方法如下:

wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.bz2 #擷取Lighttpd的源碼包

tar -xvjf lighttpd-1.4.18.tar.bz2

cd lighttpd-1.4.18

./configure --prefix=/usr/local/lighttpd

make

cp src/spawn-fcgi /usr/local/nginx/bin/spawn-fcgi #取出spawn-fcgi的程式

下面我們就可以使用 spawn-fcgi 來控制php-cgi的FastCGI程序了

/usr/local/nginx/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 32 -u nobody -g nobody -f /usr/local/php526cgi/bin/php-cgi

好了,搞定。繼續。

安裝nginx:

./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module

strip /usr/local/nginx/sbin/nginx 可以壓縮執行檔案,節約記憶體

制作nginx啟動腳本:

vi /usr/local/nginx/bin/mynginx

#!/bin/bash

case $1 in

start)

        /usr/local/nginx/sbin/nginx

;;

stop)

        killall -9 nginx

test)

        /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

restart)

        ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -HUP

show)

        ps -aux|grep nginx

esac

用法一看就知道了。

設定nginx的配置檔案,這個網上一大把,不重複了。有需要的可以上 http://nginx.myhbcms.cn/ 找找

将apache的httpd.conf裡面的虛拟主機配置轉到nginx裡去,由于有幾十個虛拟主機,這個花了我好幾個小時的時間。

額外插曲:由于使用了apache的mod_vhosts虛拟主機子產品,nginx沒找到對應的功能子產品,不得以,隻好繼續在8081端口開着apache,用nginx的proxy來反向代理。舉例:

        server { 

                listen 80; 

                server_name *.hbcms.com *.myhbcms.cn;

                location / {

                    proxy_pass http://127.0.0.1:8081/;  // 這是apache運作的端口

                    proxy_set_header   Host             $host;

                    proxy_set_header   X-Real-IP        $remote_addr;

                    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;