實踐centos6.5編譯安裝LNMP架構web環境

LNMP 代表的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。

本次測試需求:

**實踐centos6.5編譯安裝 LNMP生產環境 架構 web生產環境 使用 ngx_pagespeed 優化前端 xcache 優化php 用 google_perftools 優化nginx 和 php內存分配 **

作爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發連接,體現更高的效率。

作爲負載均衡服務器:Nginx 既可以在內部直接支持Rails和PHP,也可以支持作爲 HTTP代理服務器對外進行服務。Nginx 用C編寫,不論是系統資源開銷還是CPU使用效率都比Perlbal要好的多。

作爲郵件代理服務器:Nginx同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作爲郵件代理服務器),Last/fm 描述了成功並且美妙的使用經驗。

Nginx安裝非常的簡單,配置文件非常簡潔(還能夠支持perl語法)。Nginx支持平滑加載新的配置,還能夠在不間斷服務的情況下進行軟件版本的升級。

LNMP 這種架構因此也就非常流行,尤其VPS和雲主機的出現,更加推動了,LNMP 的架構發展融合,從php5.4開始就已經原生的支持了php-fpm的方式。PHP-FPM是一個PHP FastCGI管理器,不再是第三方的包了, PHP-FPM 提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多優點。

準備工作:

最小化安裝centos6.5

建立一個軟件包目錄存放

mkdir -p /usr/local/src/

清理已經安裝包

rpm -e httpd
rpm -e mysql
rpm -e php
yum -y remove httpd
yum -y remove mysql
yum -y remove php

#搜索apache包
rpm -qa http*

#強制卸載apache包
rpm -e --nodeps 查詢出來的文件名

#檢查是否卸載乾淨
rpm -qa|grep http*

selinux可能會致使編譯安裝失敗,我們先禁用它。永久禁用,需要重啓生效

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

臨時禁用,不需要重啓 setenforce 0

安裝必備工具

yum -y install make gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap lsof

安裝mysql5.6.17

按照標準需要給mysql創建所屬用戶和用戶組

創建羣組
groupadd mysql
創建一個用戶,不允許登陸和不創主目錄 
useradd -s /sbin/nologin -g mysql -M mysql
檢查創建用戶
tail -1 /etc/passwd

centos最小化安裝後,會有mysql的庫因此先卸載!

檢查安裝與否
rpm -qa|grep mysql 
強制卸載 
rpm -e mysql-libs-5.1.73-3.el6_5.x86_64 --nodeps

MySQL從5.5版本開始,通過./configure進行編譯配置方式已經被取消,取而代之的是cmake工具。 因此,我們首先要在系統中源碼編譯安裝cmake工具。

wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz 
tar zxvf cmake-2.8.12.2.tar.gz 
cd cmake-2.8.12.2 
./configure 
make && make install

使用cmake來編譯安裝mysql5.6.17

wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.17.tar.gz
tar zxvf mysql-5.6.17.tar.gz
cd mysql-5.6.17
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0 \
-DWITH_SSL=system
make && make install

修改/usr/local/mysql權限

chmod +w /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql

關於my.cnf配置文件:

在啓動MySQL服務時,會按照一定次序搜索my.cnf,先在/etc目錄下找,找不到則會搜索”$basedir/my.cnf” 就是安裝目錄下 /usr/local/mysql/my.cnf,這是新版MySQL的配置文件的默認位置! 注意:在CentOS 6.x版操作系統的最小安裝完成後,在/etc目錄下會存在一個my.cnf,需要將此文件更名爲其他的名字。 如:/etc/my.cnf.bak,否則,該文件會干擾源碼安裝的MySQL的正確配置,造成無法啓動。 由於我們已經卸載了最小安裝完成後的mysq庫所以,就沒必要操作了。

進入support-files目錄

cd support-files/
如果還有my.cnf請備份
mv /etc/my.cnf /etc/my.cnf.bak
如果願意也可以複製配置文件到etc下
cp my-default.cnf /etc/my.cnf

執行初始化配置腳本,創建系統自帶的數據庫和表,注意配置文件的路徑

/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

拷貝mysql安裝目錄下support-files服務腳本到init.d目錄

#拷貝腳本
cp support-files/mysql.server /etc/init.d/mysqld
#賦予權限
chmod +x /etc/init.d/mysqld

設置開機啓動

chkconfig mysqld on
啓動MySQL
service mysqld start
或者
/etc/init.d/mysql start

MySQL5.6.x啓動成功後,root默認沒有密碼,我們需要設置root密碼。 設置之前,我們需要先設置PATH,要不,不能直接調用mysql

修改/etc/profile文件
vi /etc/profile
在文件末尾添加
PATH=/usr/local/mysql/bin:$PATH
export PATH

讓配置立即生效

source /etc/profile

登陸測試,默認是沒有密碼,直接回車就可進入

mysql -uroot -p

設置mysql密碼

/usr/local/mysql/bin/mysqladmin -uroot -p password '你的密碼'

登陸進命令行模式

mysql -uroot -p

查看用戶

select user,host from mysql.user;

刪除不必要的用戶

drop user ""@localhost;
drop user ""@c65mini.localdomain; 
drop user [email protected]; 
drop user root@'::1';

賦予賬號遠程訪問的權限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '你的密碼' WITH GRANT OPTION; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '你的密碼' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'c65mini.localdomain' IDENTIFIED BY '你的密碼' WITH GRANT OPTION;

關於刪除MySQL的默認root用戶參考:http://blog.chinaunix.net/uid-16844903-id-3377690.html

其它一些信息查詢: 檢查mysql版本

mysql -uroot -p"密碼" -e "select version();"

驗證mysql安裝路徑

ls -ld /usr/local/mysql/

安裝PHP5.5.12

安裝依賴關係

libiconv庫爲需要做轉換的應用提供了一個iconv()的函數,以實現一個字符編碼到另一個字符編碼的轉換。 錯誤提示:configure: error: Please reinstall the iconv library.

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make && make install
cd ..

libmcrypt是加密算法擴展庫。 錯誤提示:configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

wget http://iweb.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make && make install
cd ..

Mhash是基於離散數學原理的不可逆向的php加密方式擴展庫,其在默認情況下不開啓。 mhash的可以用於創建校驗數值,消息摘要,消息認證碼,以及無需原文的關鍵信息保存 錯誤提示:configure: error: “You need at least libmhash 0.8.15 to compile this program. http://mhash.sf.net/”

wget http://hivelocity.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2
tar jxvf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9
./configure
make && make install
cd ..

mcrypt 是 php 裏面重要的加密支持擴展庫,Mcrypt擴展庫可以實現加密解密功能,就是既能將明文加密,也可以密文還原。

wget http://iweb.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
./configure
make && make install
cd ..

編譯mcrypt可能會報錯:configure: error: *** libmcrypt was not found

vi  /etc/ld.so.conf
最後一行添加
/usr/local/lib/
載入
ldconfig

編譯mcrypt可能會報錯:/bin/rm: cannot remove `libtoolT': No such file or directory

修改 configure 文件,把RM='$RM'改爲RM='$RM -f' 這裏的$RM後面一定有一個空格。 如果後面沒有空格,直接連接減號,就依然會報錯。

正式開始編譯php!

wget http://mirrors.sohu.com/php/php-5.5.12.tar.gz
tar zxvf php-5.5.12.tar.gz
cd php-5.5.12
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-magic-quotes --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
make && make install

修改fpm配置php-fpm.conf.default文件名稱

mv /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

複製php.ini配置文件

cp php.ini-production /usr/local/php/etc/php.ini

複製php-fpm啓動腳本到init.d

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

賦予執行權限

chmod +x /etc/init.d/php-fpm

添加爲啓動項

chkconfig --add php-fpm

設置開機啓動

chkconfig php-fpm on

按照標準,給php-fpm創建一個指定的用戶和組

創建羣組
groupadd www
創建一個用戶,不允許登陸和不創主目錄 
useradd -s /sbin/nologin -g www -M www

立即啓動php-fpm

service php-fpm start
#或者
/etc/init.d/php-fpm start

回到/usr/local/src/目錄

安裝nginx1.7

nginx所需的依賴關係,一般我們都需要先裝pcre, zlib,前者爲了重寫rewrite,後者爲了gzip壓縮。如果系統已經yum 安裝了這些庫也沒關係,無需卸載。直接編譯安裝最新的就可以了。爲了一次性完成編譯,先準備編譯下面的依賴關係!

1.安裝PCRE庫

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz 
tar -zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make && make install

2.安裝zlib庫

wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make && make install

3.安裝ssl

自由選擇是否需要編譯
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
tar -zxvf openssl-1.0.1g.tar.gz

4.安裝ngx_pagespeed庫 ngx_pagespeed 是一個 Nginx 的擴展模塊,可以加速你的網站,減少頁面加載時間,它會自動將一些提升web性能的實踐應用到網頁和相關的資源(CSS、JS和圖片)上,無需你修改內容和流程。

按照Google的說法,ngx_pagespeed模塊已經被一些客戶用於生產環境之中了,包括CDN提供商MaxCDN,按照它的報告該模塊使得“頁面平均加載時間降低了1.57秒、跳出率降低了1%並且退出百分比下降了2.5%”。WordPress主機服務商ZippyKid說,在使用NGINX的PageSpeed之後,“頁面大小降低了75%並且頁面的渲染時間提高了50%”。

wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.8.31.2-beta.zip
unzip v1.8.31.2-beta.zip
cd ngx_pagespeed-1.8.31.2-beta/
wget https://dl.google.com/dl/page-speed/psol/1.8.31.2.tar.gz
tar -xzvf 1.8.31.2.tar.gz

5、使用google-perftools提供的TCMalloc工具優化nginx和mysql

TCMalloc (google-perftools) 是用於優化C++寫的多線程應用,比glibc 2.3的malloc快。這個模塊可以用來讓MySQL在高併發下內存佔用更加穩定.

TCMalloc是google-perftools的其中一個工具,用於優化內存分配的效率和速度,幫助在高併發的情況下很好的控制內存的使用。

在mysql 和nginx 性能優化方案中,大多數教程都是使用google-perftools提供的TCMalloc工具,TCMalloc在內存的分配上效率和速度要比malloc高得多。

錯誤提示:configure: error: No frame pointers and no libunwind. The compilation will fail 是因爲你沒安裝libunwind庫就開始編譯gperftools了,因此必須先libunwind

wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz 
tar zxvf libunwind-1.1.tar.gz 
cd libunwind-1.1 
CFLAGS=-fPIC ./configure 
make CFLAGS=-fPIC 
make CFLAGS=-fPIC install

按照官方的說明,必然選擇最新版本。

wget https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/gperftools-2.2.tar.gz 
tar zxvf gperftools-2.2.tar.gz 
cd gperftools-2.2 
./configure 
make && make install

準備工作完成,現在開始安裝nginx!,這裏添加了前面準備的庫關係,注意路徑!

wget http://nginx.org/download/nginx-1.7.0.tar.gz
tar zxvf nginx-1.7.0.tar.gz
cd nginx-1.7.0
./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre=/usr/local/src/pcre-8.35 \
--with-zlib=/usr/local/src/zlib-1.2.8 \
--with-openssl=/usr/local/src/openssl-1.0.1g \
--add-module=/usr/local/src/ngx_pagespeed-1.8.31.2-beta \
--with-google_perftools_module
cd ..

6、修改nginx.conf 配置文件

在server塊裏面 開啓 ngx_pagespeed 模塊

pagespeed on; 
pagespeed FileCachePath /var/ngx_pagespeed_cache;

location ~ ".pagespeed.([a-z].)?[a-z]{2}.[^.]{10}.[^.]+" { add_header "" ""; } 
location ~ "^/ngx_pagespeed_static/" { } 
location ~ "^/ngx_pagespeed_beacon$" { } 
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; } 
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; } 
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; } 
location /pagespeed_console { allow 127.0.0.1; deny all; }

開啓 google_perftools 調優支持

#先在tmp創建tcmalloc
mkdir /tmp/tcmalloc
#賦予權限
chmod 0777 /tmp/tcmalloc/
#一般我們在pid下面添加
google_perftools_profiles /tmp/tcmalloc;
#必須是重啓,及時載入配置不會生效,nginx啓動重啓腳本下面有。
service nginx restart

驗證tcmalloc運行狀態,這是僅開啓了一個worker_processes的效果

[root@bin2aliyun ~]# lsof -n|grep tcmalloc
nginx     24471   www   16w      REG              202,1         0     821485 /tmp/tcmalloc/.24471

使用TCMalloc (google-perftools) 可以用來讓MySQL在高併發下內存佔用更加穩定。

在mysqld_safe腳本文件開始加入
vi /usr/local/mysql/bin/mysqld_safe
LD_PRELOAD="/usr/local/lib/libtcmalloc.so"
service mysql restart

使用xcache優化php性能。

wget http://xcache.lighttpd.net/pub/Releases/3.1.0/xcache-3.1.0.tar.gz
tar zxvf xcache-3.1.0.tar.gz
cd xcache-3.1.0
/usr/local/php/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install

複製xcache查看器到網站目錄
cp htdocs/ /home/wwwroot/htdocs/xcache -rf

cat >>/usr/local/php/etc/php.ini<<EOF
[xcache-common]
;注意路徑
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so

[xcache.admin]
xcache.admin.enable_auth = on
xcache.admin.user = "admin"
xcache.admin.pass = "e10adc3949ba59abbe56e057f20f883e"
;運行: echo -n "password" |md5sum |awk '{print $1}' 計算出MD5加密過的密碼
;替換xcache.admin.pass=的值

[xcache]
xcache.shm_scheme = "mmap"
xcache.size = 64M
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 3600
xcache.gc_interval = 60
xcache.var_size = 16M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 3600
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.readonly_protection = Off
xcache.mmap_path = "/dev/zero"
xcache.coredump_directory = "/tmp/phpcore"
xcache.coredump_type = 0
xcache.disable_on_crash = Off
xcache.experimental = Off
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off

[xcache.coverager]
xcache.coverager = Off
xcache.coverager_autostart =  On
xcache.coveragedump_directory = "/tmp/pcov"
EOF

安裝phpmyadmin

wget http://iweb.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.2.2/phpMyAdmin-4.2.2-all-languages.tar.gz
tar zxvf phpMyAdmin-4.2.2-all-languages.tar.gz
mv phpMyAdmin-4.2.2-all-languages phpmyadmin
cd phpMyAdmin
mkdir config 
chmod o+rw config
mv config/config.inc.php config.inc.php
chmod o-rw config.inc.php
rm -rf config

nginx 重啓,啓動,載入腳本

vi /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

sysconfig="/etc/sysconfig/$prog"
lockfile="/var/lock/subsys/nginx"
pidfile="/usr/local/nginx/logs/nginx.pid"

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f $sysconfig ] && . $sysconfig


start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest_q || return 6
    stop
    start
}

reload() {
    configtest_q || return 6
    echo -n $"Reloading $prog: "
    killproc -p $pidfile $prog -HUP
    echo
}

configtest() {
    $nginx -t -c $NGINX_CONF_FILE
}

configtest_q() {
    $nginx -t -q -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

# Upgrade the binary with no downtime.
upgrade() {
    local oldbin_pidfile="${pidfile}.oldbin"

    configtest_q || return 6
    echo -n $"Upgrading $prog: "
    killproc -p $pidfile $prog -USR2
    retval=$?
    sleep 1
    if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then
        killproc -p $oldbin_pidfile $prog -QUIT
        success $"$prog online upgrade"
        echo 
        return 0
    else
        failure $"$prog online upgrade"
        echo
        return 1
    fi
}

# Tell nginx to reopen logs
reopen_logs() {
    configtest_q || return 6
    echo -n $"Reopening $prog logs: "
    killproc -p $pidfile $prog -USR1
    retval=$?
    echo
    return $retval
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest|reopen_logs)
        $1
        ;;
    force-reload|upgrade) 
        rh_status_q || exit 7
        upgrade
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    status|status_q)
        rh_$1
        ;;
    condrestart|try-restart)
        rh_status_q || exit 7
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart|reopen_logs}"
        exit 2
esac

注意需要賦予執行的權限:chmod +x /etc/init.d/nginx

經過優化的nginx.cnf配置文件

user  www www;

worker_processes 1;

error_log  /home/wwwlogs/nginx_error.log  crit;

pid        /usr/local/nginx/logs/nginx.pid;

google_perftools_profiles /tmp/tcmalloc;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
    }

http
    {
        include       mime.types;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile on;
        tcp_nopush     on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied        expired no-cache no-store private auth;
        gzip_disable        "MSIE [1-6]\.";

        #limit_zone  crawler  $binary_remote_addr  10m;

        server_tokens off;
        #log format
        log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';

server
    {
        listen       80;
        server_name www.cnhzz.com;
        index index.html index.htm index.php;
        root  /home/wwwroot/htdocs;

            location ~ \.php$ {
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include        fastcgi_params;
            }

        location /status {
            stub_status on;
            access_log   off;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }

        location ~ .*\.(js|css)?$
            {
                expires      12h;
            }

        access_log  /home/wwwlogs/access.log  access;
    }
include vhost/*.conf;
}

根據需要爲虛擬主機增加了ngx_pagespeed google_perftools

log_format  www.cnhzz.com  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
server
        {
                listen       80;
                server_name www.cnhzz.com cnhzz.com;
                if ($host != 'www.cnhzz.com' )
                        {
                        rewrite ^/(.*)$ http://www.cnhzz.com/$1 permanent;
                        }
                index index.php index.html index.htm;
                root  /home/wwwroot/www.cnhzz.com;
                pagespeed on;
                pagespeed FileCachePath /var/ngx_pagespeed_cache;
log_format  www.cnhzz.com  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
server
        {
                listen       80;
                server_name www.cnhzz.com cnhzz.com;
                if ($host != 'www.cnhzz.com' )
                        {
                        rewrite ^/(.*)$ http://www.cnhzz.com/$1 permanent;
                        }
                index index.php index.html index.htm;
                root  /home/wwwroot/www.cnhzz.com;
                pagespeed on;
                pagespeed FileCachePath /var/ngx_pagespeed_cache;

                location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
                location ~ "^/ngx_pagespeed_static/" { }
                location ~ "^/ngx_pagespeed_beacon$" { }
                location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
                location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
                location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
                location /pagespeed_console { allow 127.0.0.1; deny all; }

                location ~ \.php$ {
                        fastcgi_pass   127.0.0.1:9000;
                        fastcgi_index  index.php;
                        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        include        fastcgi_params;
                }

                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                        {
                                expires      30d;
                        }

                location ~ .*\.(js|css)?$
                        {
                                expires      12h;
                        }

                access_log  /home/wwwlogs/www.cnhzz.com.log  www.cnhzz.com;
        }

php-fpm優化,注意一個fpm進程大約20M,我這個機器是小內存的雲主機,因此開啓2個就可以。大內存的話,根據情況換算。

vi php-fpm.conf
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章