LNMP 表明的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。javascript
本次測試需求:php
**實踐centos6.5編譯安裝 LNMP生產環境 架構 web生產環境 使用 ngx_pagespeed 優化前端 xcache 優化php 用 google_perftools 優化nginx 和 php內存分配 **css
做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,體現更高的效率。html
做爲負載均衡服務器:Nginx 既能夠在內部直接支持Rails和PHP,也能夠支持做爲 HTTP代理服務器對外進行服務。Nginx 用C編寫,不管是系統資源開銷仍是CPU使用效率都比Perlbal要好的多。前端
做爲郵件代理服務器:Nginx同時也是一個很是優秀的郵件代理服務器(最先開發這個產品的目的之一也是做爲郵件代理服務器),Last/fm 描述了成功而且美妙的使用經驗。java
Nginx安裝很是的簡單,配置文件很是簡潔(還可以支持perl語法)。Nginx支持平滑加載新的配置,還可以在不間斷服務的狀況下進行軟件版本的升級。node
LNMP 這種架構所以也就很是流行,尤爲VPS和雲主機的出現,更加推進了,LNMP 的架構發展融合,從php5.4開始就已經原生的支持了php-fpm的方式。PHP-FPM是一個PHP FastCGI管理器,再也不是第三方的包了, PHP-FPM 提供了更好的PHP進程管理方式,能夠有效控制內存和進程、能夠平滑重載PHP配置,比spawn-fcgi具備更多優勢。mysql
準備工做:linux
最小化安裝centos6.5nginx
創建一個軟件包目錄存放
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
按照標準須要給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 root@c65mini.localdomain; 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/目錄
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
五、使用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 ..
六、修改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