環境說明
192.168.1.208 Nginx負載伺服器
192.168.1.210 webA伺服器 PHP memcache xcache mysql
192.168.1.211 webB伺服器 PHP memcache xcache
webA/webB 伺服器PHP環境配置
# 注意:freetype在生成驗證碼圖片需要用,所以必須要安裝的
[root@iZ23g4snm6gZ soft]# yum install openssl-devel libxml2 libxml2-devel curl-devel libevent
[root@iZ23g4snm6gZ soft]# yum install libpng libpng-devel libjpeg libjpeg-devel freetype-devel gd gd-devel mysql-devel
# 原始碼包安裝libiconv
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14/
./configure --prefix=/usr/local/libiconv
make
make install
# 原始碼包安裝libiconv
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure --prefix=/usr/local/libmcrypt/
make
make install
# 開始編譯PHP
tar -zxvf php-5.6.3.tar.gz
cd php-5.6.3
./configure --prefix=/usr/local/php/
--with-config-file-path=/usr/local/php/etc/
--enable-fpm
--with-fpm-user=nginx
--with-fpm-group=nginx
--with-zlib
--with-libxml-dir
--enable-sockets
--with-curl
--with-jpeg-dir
--with-png-dir
--with-gd
--with-iconv-dir=/usr/local/libiconv
--with-freetype-dir=
--enable-gd-native-ttf
--with-xmlrpc
--with-openssl
--with-mhash
--with-mcrypt=/usr/local/libmcrypt/
--with-pear
--enable-mbstring
--enable-sysvshm
--enable-zip
--with-mysql
--with-mysqli
--with-mysql-sock
--with-pdo-mysql
--disable-fileinfo
# 安裝配置
make
make install
配置php-fpm.conf檔案
cp php.ini-production /usr/local/php/etc/php.ini
# 新增使用者和使用者組
[root@admin local]# groupadd www #新增www組
[root@admin local]# useradd -g www www -s /bin/false // 不允許www使用者直接登入系統
# 拷貝模板檔案為php-fpm配置檔案
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
vi /usr/local/php/etc/php-fpm.conf // 編輯
user = www // 設定php-fpm執行賬號為www 預設賬號為nginx
group = www // 設定php-fpm執行組為www
pid = run/php-fpm.pid // 取消前面的分號
listen = 127.0.0.1:9000 改 listen = 0.0.0.0:9000
# 開啟opcache快取
vim /usr/local/php/etc/php.ini
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=2018
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=10
opcache.fast_shutdown=1
opcache.optimization_level=1
;opcache.max_wasted_percentage=5
;opcache.use_cwd=1
;opcache.validate_timestamps=1
;opcache.revalidate_path=0
;opcache.save_comments=1
;opcache.load_comments=1
;opcache.enable_file_override=0
;opcache.inherited_hack=1
;opcache.dups_fix=0
;opcache.blacklist_filename=
;opcache.max_file_size=0
;opcache.consistency_checks=0
;opcache.force_restart_timeout=180
;opcache.error_log=
;opcache.log_verbosity_level=1
;opcache.preferred_memory_model=
;opcache.protect_memory=0
# 儲存退出
:wq!
php-fpm開機自啟動配置
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix=/usr/local/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
try=0
while test $try -lt 35 ; do
case "$1" in
`created`)
if [ -f "$2" ] ; then
try=``
break
fi
;;
`removed`)
if [ ! -f "$2" ] ; then
try=``
break
fi
;;
esac
echo -n .
try=`expr $try + 1`
sleep 1
done
}
case "$1" in
start)
echo -n "Starting php-fpm "
$php_fpm_BIN $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
stop)
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed. Use force-quit"
exit 1
else
echo " done"
fi
;;
force-quit)
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 `cat $php_fpm_PID`
echo " done"
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
exit 1
;;
esac
# 開機自啟動配置
mv php-fpm /etc/init.d/ // 移動php-fpm指令碼到init.d目錄下
chmod a+x /etc/init.d/php-fpm // 新增執行許可權
chkconfig --add php-fpm // 新增開機啟動配置
chkconfig --level 2345 php-fpm on // 配置開機啟動許可權級別
Nginx 伺服器配置安裝
# 擴充套件包安裝
yum install libcom_err pkgconfig -y
yum install libselinux krb5-libs libcom_err-devel libsepol-devel libselinux-devel e2fsprogs-libs libss keyutils-libs-devel krb5-devel e2fsprogs libselinux-utils -y
yum -y install zlib zlib-devel openssl openssl-devel make gcc gcc-c++ ncurses-devel pcre-devel
# 安裝Nginx# 安裝pcre (支援nginx偽靜態)
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
cd /usr/local/src
mkdir /usr/local/pcre // 建立安裝目錄
tar zxvf pcre-8.30.tar.gz
cd pcre-8.30
./configure --prefix=/usr/local/pcre // 配置
make
make install
# 安裝Nginx
[root@admin local]# groupadd www #新增www組
[root@admin local]# useradd -g www www -s /bin/false // 不允許www使用者直接登入系統
wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxf /data/soft/nginx/nginx-1.8.1.tar.gz
cd /data/soft/nginx/nginx-1.8.1
# 開始配置Nginx
./configure --prefix=/usr/local/nginx
--with-pcre
--with-http_ssl_module
--with-http_realip_module
--with-http_addition_module
--with-http_sub_module
--with-http_dav_module
--with-http_flv_module
--with-http_mp4_module
--with-http_gzip_static_module
--with-http_random_index_module
--with-http_secure_link_module
--with-http_degradation_module
--with-http_stub_status_module
--with-ipv6
--with-mail
--with-mail_ssl_module
--conf-path=/usr/local/nginx/conf/nginx.conf
--group=wwww
--user=www
--error-log-path=/usr/local/nginx/logs/error.log
--http-log-path=/usr/local/nginx/logs/access.log
--pid-path=/usr/local/nginx/logs/nginx.pid
--lock-path=/usr/local/nginx/logs/lock.txt
make
make install
# nginx安裝第三方擴充套件
tar -zxf /data/soft/nginx/ngx_http_accounting_module-master.tar.gz
cp -rf ngx_http_accounting_module-master /usr/local/
# 切換到nginx原始碼包目錄執行
./configure --prefix=/usr/local/nginx --add-module=/usr/local/ngx_http_accounting_module-master/
make
make install
配置nginx支援php
#user nobody;
user www www;
worker_processes auto;
# ginx要開啟的程式數 一般等於cpu的總核數,沒必要開那麼多,1個nginx記憶體消耗10兆左右
#worker_processes 4;
# 為每個程式分配cpu,上例中將4 個程式分配到4個cpu,當然可以寫多個,或者將一 個程式分配到多個cpu
#worker_cpu_affinity 00000001 00000010 00000100 00001000;
# 開啟nginx錯誤日誌
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
# 每個nginx程式開啟檔案描述符最大數目 配置要和系統的單程式開啟檔案數一
# 致,linux 2.6核心下開啟檔案開啟數為65535,worker_rlimit_nofile就相應,應該填寫65535
# nginx排程時分配請求到程式並不是那麼的均衡,假如超過會返回502錯誤。我這裡寫的大一點
worker_rlimit_nofile 819200;
events {
# 設定用於複用客戶端執行緒的輪詢方法。如果你使用Linux 2.6+,你應該使用epoll。
# 如果你使用*BSD,你應該使用kqueue。
# 值得注意的是如果你不知道Nginx該使用哪種輪詢方法的話,它會選擇一個最適合你作業系統的
use epoll;
# 每個工作程式允許最大的同時連線數(Maxclient = work_processes * worker_connections)
# 預設1024
worker_connections 40960;
}
http {
# 開啟accunting日誌分析
http_accounting on;
http_accounting_name "JGsrv";
http_accounting_time 30;
# 檔案頭資訊
include mime.types;
# 預設型別
default_type application/octet-stream;
# 限制連線模組
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
# 儲存伺服器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。
# 引數hash bucket size總是等於hash表的大小,並且是一路處理器快取大小的倍數
server_names_hash_bucket_size 128;
# 客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設定,
# 一般一個請求的頭部大小不會超過1k,不過由於一般系統分頁都要大於1k,
# 所以這裡設定為分頁大小。分頁大小可以用命令getconf PAGESIZE取得。
client_header_buffer_size 32k;
# 客戶請求頭緩衝大小
# nginx預設會用client_header_buffer_size這個buffer來讀取header值,如果
large_client_header_buffers 4 32k;
# 設定通過nginx上傳檔案的大小
client_max_body_size 64m;
# 磁碟和TCP socket之間互相拷貝資料(或任意兩個檔案描述符)。
# Pre-sendfile是傳送資料之前在使用者空間申請資料緩衝區
sendfile on;
# 告訴nginx在一個資料包裡傳送所有標頭檔案,而不一個接一個的傳送
tcp_nopush on;
# 告訴nginx不要快取資料,而是一段一段的傳送,
# 當需要及時傳送資料時,就應該給應用設定這個屬性,這樣傳送一小塊資料資訊時就不能立即得到返回值。
tcp_nodelay on;
# 並不會讓nginx執行的速度更快,但它可以關閉在錯誤頁面中的nginx版本數字,這樣對於安全性是有好處的
server_tokens off;
# keepalive超時時間
keepalive_timeout 65;
# 優化fastcgi
fastcgi_connect_timeout 120;
fastcgi_send_timeout 120;
fastcgi_read_timeout 120;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_intercept_errors on;
# 開啟gzip壓縮
gzip on;
# 預設值: 0 ,不管頁面多大都壓縮
gzip_min_length 1k;
# 設定系統獲取幾個單位的快取用於儲存gzip的壓縮結果資料流
# 例如 4 4k 代表以4k為單位,按照原始資料大小以4k為單位的4倍申請記憶體
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;
# 這個將為開啟檔案指定快取,預設是沒有啟用的,max 指定快取數量,建議和開啟檔案數一致,
# inactive 是指經過多長時間檔案沒被請求後刪除快取
# open_file_cache max=409600 inactive=10s;
# 這個是指多長時間檢查一次快取的有效資訊
# open_file_cache_valid 5s;
# open_file_cache 指令中的inactive 引數時間內檔案的最少使用次數,
# 如果超過這個數字,檔案描述符一直是在快取中開啟的,
# 如上例,如果有一個檔案在inactive 時間內一次沒被使用,它將被移除
# open_file_cache_min_uses 2;
log_format access_logs `$upstream_response_time $request_time $status $body_bytes_sent $remote_addr $time_local "$http_user_agent" "$request" "$http_referer" "$http_x_forwarded_for"`;
# Nginx負載均衡配置
upstream phpServer{
# 伺服器內網地址,weight:權重,負載越大 max_fails:允許請求失敗的次數 fail_timeout:次失敗後,暫停的時間
server 172.20.17.210:9000 weight=1 max_fails=2 fail_timeout=3;
server 172.20.17.211:9000 weight=1 max_fails=2 fail_timeout=3;
}
# 配置虛擬主機,過個server就複製多個
include vhost/*.conf;
}
Vhost目錄下的虛擬機器配置檔案
server {
listen 80;
server_name jt018.com www.jt018.com;
root /data/www/jt018.com/;
#access_log logs/host.access.log main;
# 配置域名重定向
#if ($host != `www.jt018.com` ) {
# rewrite ^/(.*)$ http://www.yphp.cn/$1 permanent;
#}
location / {
# 配置rewrite
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?$1 last;
break;
}
# include /usr/local/nginx/html/yphp/.htaccess;
# rewrite ^/(.+)/(.+)[/]?$ /index.php?m=$1&a=$2 last;
# 配置預設訪問檔案
index index.php index.html index.htm;
}
# 靜態檔案快取30天
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
# access_log off;
}
# js,css檔案快取15個小時
location ~ .*.(js|css)?$
{
expires 15d;
# access_log off;
}
#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;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_pass phpServer; # 修改為upstream定義的名稱
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Nginx 開機啟動配置
#!/bin/bash
# nginx This shell script takes care of starting and stopping
# nginx
#
# chkconfig: - 13 68
# description: nginx is a web server
### BEGIN INIT INFO
# Provides: $named
# Short-Description: start|stop|status|restart|configtest
### END INIT INFO
#variables
NGINX_BIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
NETSTAT="/bin/netstat"
alter=$1
prog=nginx
#load system function
. /etc/rc.d/init.d/functions
#function:echo ok or error
function if_no {
if [ $2 == 0 ]; then
echo -n $"$1 ${prog}:" && success && echo
else
echo -n $"$1 ${prog}:" && failure && echo
fi
}
#start nginx
function start {
rm -f ${NGINX_PID} 2>/dev/null
if [ -s ${NGINX_PID} ]; then
echo "nginx already running"
else
if [ `${NETSTAT} -tnpl | grep nginx | wc -l` -eq 0 ]; then
rm -f ${NGINX_PID} 2>/dev/null
${NGINX_BIN} -c ${NGINX_CONF}
if_no start $?
else
${NETSTAT} -tnpl | grep nginx | awk `{ print $7}` | cut -d `/` -f 1 > ${NGINX_PID}
if_no start $?
fi
fi
}
#stp nginx
function stop {
if [ -s ${NGINX_PID} ]; then
cat ${NGINX_PID} | xargs kill -QUIT
if_no stop $?
else
if [ `${NETSTAT} -tnpl | grep nginx | wc -l` -eq 0 ]; then
rm -f ${NGINX_PID} 2>/dev/null
if_no stop 0
else
rm -f ${NGINX_PID} 2>/dev/null
kill `${NETSTAT} -tnpl | grep nginx | awk `{ print $7}` | cut -d `/` -f 1`
if_no stop $?
fi
fi
}
function restart {
if [ -s ${NGINX_PID} ]; then
cat ${NGINX_PID} | xargs kill -HUP
if_no restart $?
else
stop
sleep 1
start
fi
}
function status {
${NETSTAT} -tnpl | grep nginx | grep LISTEN
[ $? == 0 ] && echo "nginx is running" || echo "nginx is not running"
}
function configtest {
${NGINX_BIN} -t
}
case $alter in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
configtest)
configtest
;;
*)
echo "use:${NGINX} {start|stop|restart|status|configtest}"
;;
esac
# 配置Nginx自啟動指令碼
chmod +x /etc/init.d/nginx
/etc/init.d/nginx start 或 service nginx start // 啟動nginx
/etc/init.d/nginx stop 或 service nginx stop // 關閉nginx
/etc/init.d/nginx restart 或 service nginx restart // 重啟nginx
chkconfig --add nginx
chkconfig --level 2345 nginx on
# 重啟伺服器
/etc/init.d/nginx stop # 停止nginx 服務
/etc/init.d/nginx start # 啟動nginx 服務
以下擴充套件配置自行安裝使用
AB測試與centos系統優化
ab測試與centos優化地址
配置Memcache快取
Memcache配置地址
配置Xcache程式碼快取
xcache快取配置地址