構建高性能Web環境(linux-nginx-mysql-php-fastcgi)
構建高性能Web環境(linux-nginx-mysql-php-fastcgi)
2012年01月01日
本文主要是撰寫Linux系統中PHP Web環境的配置,介紹在CentOS系統下安裝:Nginx、MySQL、php-FastCGI,文中用的軟件都是截至2011/6/22最新穩定版。網絡上關於這種配置很多,配置過程相差不大,但是參數有所不同。開始之前先介紹一下nginx:
Nginx(engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx。
下面開始敘述詳細配置過程:
一、Centos系統安裝完畢之後,關閉不需要的服務優化系統,安裝系統更新和所需軟件支持。
關閉不需要的服務
chkconfig --level 3 acpid off
chkconfig --level 3 anacron off
chkconfig --level 3 apmd off
chkconfig --level 3 mdmonitor off
chkconfig --level 3 xinetd off
chkconfig --level 3 Sendmail off
chkconfig --level 3 rpcgssd off
chkconfig --level 3 rawdevices off
chkconfig --level 3 messagebus off
chkconfig --level 3 atd off
chkconfig --level 3 gpm off
chkconfig --level 3 autofs off
chkconfig --level 3 cpuspeed off
chkconfig --level 3 haldaemon off
chkconfig --level 3 nfslock off
chkconfig --level 3 portmap off
chkconfig --level 3 xfs off
chkconfig --level 3 netfs off
chkconfig --level 3 smartd off
chkconfig --level 3 ip6tables off
chkconfig --level 3 isdn off
chkconfig --level 3 rpcidmapd off
chkconfig --level 3 microcode_ctl off
service acpid stop
service anacron stop
service apmd stop
service mdmonitor stop
service xinetd stop
service sendmail stop
service rpcgssd stop
service rawdevices stop
service messagebus stop
service atd stop
service gpm stop
service autofs stop
service cpuspeed stop
service haldaemon stop
service nfslock stop
service portmap stop
service xfs stop
service netfs stop
service smartd stop
service ip6tables stop
service isdn stop
service rpcidmapd stop
service microcode_ctl stop
安裝系統更新和所需軟件支持
yum -y update
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel OpenSSL openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers NTP rar
下載需要用到的軟件包(以下地址都是官方下載、也可以自己查找)
【下載PHP需要的庫】
wget http://FTP.GNU.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
wget http://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
wget http://ncu.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
wget http://ncu.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
【下載mysql、php、nginx】
wget http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/mysql-5.1.57.tar.gz
wget http://us.php.net/distributions/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
wget http://www.nginx.org/download/nginx-1.0.2.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.gz
【下載php擴展】
wget http://pecl.php.net/get/Memcache-2.2.6.tgz
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget http://bart.eAccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.0-8.tar.gz
wget http://pecl.php.net/get/imagick-3.0.0.tgz
二、安裝PHP需要的庫程序
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/ && ./configure --prefix=/usr/local
make && make install && cd ..
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/ && ./configure
make && make install
/sbin/ldconfig && cd libltdl/ && ./configure --enable-ltdl-install
make && make install && cd ../..
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/ && ./configure
make && make install && cd ..
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/ && /sbin/ldconfig
./configure && make && make install && cd ..
三、編譯安裝 MySQL
tar zxvf mysql-5.1.57.tar.gz && cd mysql-5.1.57
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-SSL --with-embedded-server --enable-local-infile
make && make install && cd ..
創建mysql用戶組,創建數據庫、日誌等存儲目錄並賦予權限
mkdir -p /data/mysqldata
mkdir -p /data/mysqldata/database
mkdir -p /data/mysqldata/log
mkdir -p /data/mysqldata/pid
groupadd mysql
useradd -g mysql -d /data/mysqldata/database -s /sbin/nologin mysql
chgrp -R mysql /usr/local/webserver/mysql/.
chown -R root:mysql /usr/local/webserver/mysql/*
chown -R mysql:mysql /data/mysqldata/*
修改my.cnf文件參數(參數適用於大於2G內存服務器)
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data/mysqldata/database
log-error = /data/mysqldata/log/mysql_error.log
pid-file = /data/mysqldata/pid/mysql.pid
skip-external-locking
skip-name-resolve
back_log = 500
key_buffer_size = 256M
max_allowed_packet = 32M
thread_stack = 192K
table_cache = 256
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache = 128
thread_cache_size = 10
query_cache_size = 32M
tmp_table_size = 128M
max_connections = 5000
wait_timeout = 60
max_connect_errors = 6000
expire_logs_days = 30
server-id = 1
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash初始化MySQL服務
/usr/local/webserver/mysql/bin/mysql_install_db \
--basedir=/usr/local/webserver/mysql \
--datadir=/data/mysqldata/database \
--user=mysql
啓動MySQL服務
/usr/local/webserver/mysql/bin/mysqld_safe --user=mysql & //啓動服務
/usr/local/webserver/mysql/bin/mysqladmin -u root -p shutdown //停止服務
修改root密碼
/usr/local/webserver/mysql/bin/mysqladmin -u root password ‘yourpassword’
四、編譯安裝PHP(FastCGI模式)
tar zxvf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
cd php-5.2.17/
./buildconf --force
./configure --prefix=/usr/local/webserver/php \
--with-config-file-path=/usr/local/webserver/php/etc \
--with-mysql=/usr/local/webserver/mysql \
--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config \
--with-gd \
--with-jpeg-dir \
--with-iconv-dir=/usr/local \
--with-libxml-dir=/usr \
--with-zlib \
--with-png-dir \
--with-curl \
--with-LDAP \
--with-xmlrpc \
--with-openssl \
--with-mhash \
--with-mcrypt \
--with-freetype-dir \
--with-ldap-sasl \
--with-curlwrappers \
--enable-xml \
--enable-shared \
--enable-discard-path \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-fastcgi \
--enable-fpm \
--enable-force-cgi-redirect \
--enable-mbstring=all \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--enable-zip \
--enable-soap
make ZEND_EXTRA_LIBS='-liconv'
make install && cd ..
五、安裝PHP擴展模塊
tar zxvf memcache-2.2.6.tgz
cd memcache-2.2.6/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install && cd ..
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/usr/local/webserver/php/bin/phpize
./configure \
--with-php-config=/usr/local/webserver/php/bin/php-config \
--with-pdo-mysql=/usr/local/webserver/mysql
make && make install && cd ..
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared \
--with-php-config=/usr/local/webserver/php/bin/php-config
make && make install && cd ..
tar zxvf ImageMagick-6.7.0-8.tar.gz
cd ImageMagick-6.7.0-8/
./configure && make && make install && cd ..
tar zxvf imagick-3.0.0.tgz
cd imagick-3.0.0/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install && cd ..
修改php.ini文件
vim /usr/local/webserver/php/etc/php.ini
查找:
extension_dir = "./"
修改爲:
extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
並在此行後增加以下幾行,然後保存:
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
再查找:output_buffering = Off
修改爲:output_buffering = On
創建緩存目錄,配置eAccelerator加速PHP:
mkdir -p /usr/local/webserver/eaccelerator_cache
將以下參數添加到php.ini文件末尾
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"修改php-fpm.conf配置文件
vim /usr/local/webserver/php/etc/php-fpm.conf
如果安裝 Nginx + PHP 用於程序調試,請將以下的
0
改爲
1
以便顯示PHP錯誤信息,否則,Nginx 會報狀態爲500的空白錯誤頁
啓動php-cgi進程,監聽127.0.0.1的9000端口,進程數爲128(如果服務器內存小於3GB,可以只開啓64個進程),用戶爲:www
Ulimit -SHn 65535
/usr/local/webserver/php/sbin/php-fpm start //在www用戶創建之後在開啓。
注:/usr/local/webserver/php/sbin/php-fpm 還有其他參數,包括:start|stop|quit|restart|reload|logrotate,修改php.ini後不重啓php-cgi,重新加載配置文件使用reload。
六、編譯安裝nginx
創建www用戶和組,以及網站目錄,日誌目錄
groupadd www
useradd -g www -s /sbin/nologin www
mkdir -p /data/wsdata/wwwroot
mkdir -p /data/wsdata/wwwroot/error
echo "404" > /data/wsdata/wwwroot/error/404.html
echo "server is too busy" > /data/wsdata/wwwroot/error/50x.html
chmod +w /data/wsdata/wwwroot
mkdir -p /data/wslogs/wwwroot
chmod 777 /data/wslogs/wwwroot
chown -R www:www /data/wsdata/wwwroot
tar zxvf pcre-8.12.tar.gz && cd pcre-8.12/
./configure && make && make install && cd ..
tar zxvf nginx-1.0.2.tar.gz && cd nginx-1.0.2/
./configure \
--user=www \
--group=www \
--prefix=/usr/local/webserver/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-CC-opt='-O3' \
--with-cpu-opt=opteron \
--with-http_gzip_static_module
make && make install && cd ..
創建或修改nginx配置文件
cat nginx.conf
#user options
user www www;
#CPU Core options
worker_processes 4;
#nginx Process options
pid /usr/local/webserver/nginx/nginx.pid;
# [ debug | info | notice | warn | error | crit ]
error_log /wslogs/nginx_error.log crit;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events {
use epoll;
#maxclient = worker_processes * worker_connections / cpu_number
worker_connections 51200;
}
http {
include mime.types;
default_type application/octet-stream;
#charset gb2312;
#General options
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
ignore_invalid_headers on;
recursive_error_pages on;
server_name_in_redirect off;
sendfile on;
#timeouts
keepalive_timeout 60;
#TCP options
tcp_nopush on;
tcp_nodelay on;
#fastcgi options
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 128k;
fastcgi_intercept_errors on;
#size limits
client_max_body_size 300m;
client_body_buffer_size 256k;
#gzip compression
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain text/css application/x-javascript application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
#virtual hosts options
include vhosts.conf;
} cat vhosts.conf
server {
listen 80;
server_name www.linuxde.net linuxde.net;
access_log /data/wslogs/linuxde_www_access.log combined;
index index.html index.htm index.php;
root /data/wsdata/wwwroot/linuxde/www;
#error_page 404 = ./error/404.html;
#error_page 500 502 503 504 = ./error/50x.html;
#linuxde.net 重定向到 www.linuxde.net
if ($host !~ "^www\.linuxde\.net$") {
rewrite ^(.*) http://www.linuxde.net$1 permanent;
}
location ~ .*\.(php|php5)?$ {
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include enable_fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
access_log off;
expires 30d;
}
location ~ .*\.(js|css)$ {
access_log off;
expires 1d;
}
#wordpress僞靜態
location / {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
}cat enable_fcgi.conf
#PHP PATH_INFO bugs
if ($request_filename ~* (.*)\.php) {
set $php_url $1;
}
if (!-e $php_url.php) {
return 403;
}
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
#for test
fastcgi_param HTTP_ACCEPT_ENCODING gzip,deflate;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;啓動nginx服務
/usr/local/webserver/nginx/sbin/nginx -t //檢測配置文件是否正確
/usr/local/webserver/nginx/sbin/nginx //啓動nginx
2012年01月01日
本文主要是撰寫Linux系統中PHP Web環境的配置,介紹在CentOS系統下安裝:Nginx、MySQL、php-FastCGI,文中用的軟件都是截至2011/6/22最新穩定版。網絡上關於這種配置很多,配置過程相差不大,但是參數有所不同。開始之前先介紹一下nginx:
Nginx(engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx。
下面開始敘述詳細配置過程:
一、Centos系統安裝完畢之後,關閉不需要的服務優化系統,安裝系統更新和所需軟件支持。
關閉不需要的服務
chkconfig --level 3 acpid off
chkconfig --level 3 anacron off
chkconfig --level 3 apmd off
chkconfig --level 3 mdmonitor off
chkconfig --level 3 xinetd off
chkconfig --level 3 Sendmail off
chkconfig --level 3 rpcgssd off
chkconfig --level 3 rawdevices off
chkconfig --level 3 messagebus off
chkconfig --level 3 atd off
chkconfig --level 3 gpm off
chkconfig --level 3 autofs off
chkconfig --level 3 cpuspeed off
chkconfig --level 3 haldaemon off
chkconfig --level 3 nfslock off
chkconfig --level 3 portmap off
chkconfig --level 3 xfs off
chkconfig --level 3 netfs off
chkconfig --level 3 smartd off
chkconfig --level 3 ip6tables off
chkconfig --level 3 isdn off
chkconfig --level 3 rpcidmapd off
chkconfig --level 3 microcode_ctl off
service acpid stop
service anacron stop
service apmd stop
service mdmonitor stop
service xinetd stop
service sendmail stop
service rpcgssd stop
service rawdevices stop
service messagebus stop
service atd stop
service gpm stop
service autofs stop
service cpuspeed stop
service haldaemon stop
service nfslock stop
service portmap stop
service xfs stop
service netfs stop
service smartd stop
service ip6tables stop
service isdn stop
service rpcidmapd stop
service microcode_ctl stop
安裝系統更新和所需軟件支持
yum -y update
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel OpenSSL openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers NTP rar
下載需要用到的軟件包(以下地址都是官方下載、也可以自己查找)
【下載PHP需要的庫】
wget http://FTP.GNU.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
wget http://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
wget http://ncu.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
wget http://ncu.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
【下載mysql、php、nginx】
wget http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/mysql-5.1.57.tar.gz
wget http://us.php.net/distributions/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
wget http://www.nginx.org/download/nginx-1.0.2.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.gz
【下載php擴展】
wget http://pecl.php.net/get/Memcache-2.2.6.tgz
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget http://bart.eAccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.0-8.tar.gz
wget http://pecl.php.net/get/imagick-3.0.0.tgz
二、安裝PHP需要的庫程序
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/ && ./configure --prefix=/usr/local
make && make install && cd ..
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/ && ./configure
make && make install
/sbin/ldconfig && cd libltdl/ && ./configure --enable-ltdl-install
make && make install && cd ../..
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/ && ./configure
make && make install && cd ..
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/ && /sbin/ldconfig
./configure && make && make install && cd ..
三、編譯安裝 MySQL
tar zxvf mysql-5.1.57.tar.gz && cd mysql-5.1.57
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-SSL --with-embedded-server --enable-local-infile
make && make install && cd ..
創建mysql用戶組,創建數據庫、日誌等存儲目錄並賦予權限
mkdir -p /data/mysqldata
mkdir -p /data/mysqldata/database
mkdir -p /data/mysqldata/log
mkdir -p /data/mysqldata/pid
groupadd mysql
useradd -g mysql -d /data/mysqldata/database -s /sbin/nologin mysql
chgrp -R mysql /usr/local/webserver/mysql/.
chown -R root:mysql /usr/local/webserver/mysql/*
chown -R mysql:mysql /data/mysqldata/*
修改my.cnf文件參數(參數適用於大於2G內存服務器)
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data/mysqldata/database
log-error = /data/mysqldata/log/mysql_error.log
pid-file = /data/mysqldata/pid/mysql.pid
skip-external-locking
skip-name-resolve
back_log = 500
key_buffer_size = 256M
max_allowed_packet = 32M
thread_stack = 192K
table_cache = 256
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache = 128
thread_cache_size = 10
query_cache_size = 32M
tmp_table_size = 128M
max_connections = 5000
wait_timeout = 60
max_connect_errors = 6000
expire_logs_days = 30
server-id = 1
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash初始化MySQL服務
/usr/local/webserver/mysql/bin/mysql_install_db \
--basedir=/usr/local/webserver/mysql \
--datadir=/data/mysqldata/database \
--user=mysql
啓動MySQL服務
/usr/local/webserver/mysql/bin/mysqld_safe --user=mysql & //啓動服務
/usr/local/webserver/mysql/bin/mysqladmin -u root -p shutdown //停止服務
修改root密碼
/usr/local/webserver/mysql/bin/mysqladmin -u root password ‘yourpassword’
四、編譯安裝PHP(FastCGI模式)
tar zxvf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
cd php-5.2.17/
./buildconf --force
./configure --prefix=/usr/local/webserver/php \
--with-config-file-path=/usr/local/webserver/php/etc \
--with-mysql=/usr/local/webserver/mysql \
--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config \
--with-gd \
--with-jpeg-dir \
--with-iconv-dir=/usr/local \
--with-libxml-dir=/usr \
--with-zlib \
--with-png-dir \
--with-curl \
--with-LDAP \
--with-xmlrpc \
--with-openssl \
--with-mhash \
--with-mcrypt \
--with-freetype-dir \
--with-ldap-sasl \
--with-curlwrappers \
--enable-xml \
--enable-shared \
--enable-discard-path \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-fastcgi \
--enable-fpm \
--enable-force-cgi-redirect \
--enable-mbstring=all \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--enable-zip \
--enable-soap
make ZEND_EXTRA_LIBS='-liconv'
make install && cd ..
五、安裝PHP擴展模塊
tar zxvf memcache-2.2.6.tgz
cd memcache-2.2.6/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install && cd ..
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/usr/local/webserver/php/bin/phpize
./configure \
--with-php-config=/usr/local/webserver/php/bin/php-config \
--with-pdo-mysql=/usr/local/webserver/mysql
make && make install && cd ..
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared \
--with-php-config=/usr/local/webserver/php/bin/php-config
make && make install && cd ..
tar zxvf ImageMagick-6.7.0-8.tar.gz
cd ImageMagick-6.7.0-8/
./configure && make && make install && cd ..
tar zxvf imagick-3.0.0.tgz
cd imagick-3.0.0/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install && cd ..
修改php.ini文件
vim /usr/local/webserver/php/etc/php.ini
查找:
extension_dir = "./"
修改爲:
extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
並在此行後增加以下幾行,然後保存:
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
再查找:output_buffering = Off
修改爲:output_buffering = On
創建緩存目錄,配置eAccelerator加速PHP:
mkdir -p /usr/local/webserver/eaccelerator_cache
將以下參數添加到php.ini文件末尾
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"修改php-fpm.conf配置文件
vim /usr/local/webserver/php/etc/php-fpm.conf
如果安裝 Nginx + PHP 用於程序調試,請將以下的
0
改爲
1
以便顯示PHP錯誤信息,否則,Nginx 會報狀態爲500的空白錯誤頁
啓動php-cgi進程,監聽127.0.0.1的9000端口,進程數爲128(如果服務器內存小於3GB,可以只開啓64個進程),用戶爲:www
Ulimit -SHn 65535
/usr/local/webserver/php/sbin/php-fpm start //在www用戶創建之後在開啓。
注:/usr/local/webserver/php/sbin/php-fpm 還有其他參數,包括:start|stop|quit|restart|reload|logrotate,修改php.ini後不重啓php-cgi,重新加載配置文件使用reload。
六、編譯安裝nginx
創建www用戶和組,以及網站目錄,日誌目錄
groupadd www
useradd -g www -s /sbin/nologin www
mkdir -p /data/wsdata/wwwroot
mkdir -p /data/wsdata/wwwroot/error
echo "404" > /data/wsdata/wwwroot/error/404.html
echo "server is too busy" > /data/wsdata/wwwroot/error/50x.html
chmod +w /data/wsdata/wwwroot
mkdir -p /data/wslogs/wwwroot
chmod 777 /data/wslogs/wwwroot
chown -R www:www /data/wsdata/wwwroot
tar zxvf pcre-8.12.tar.gz && cd pcre-8.12/
./configure && make && make install && cd ..
tar zxvf nginx-1.0.2.tar.gz && cd nginx-1.0.2/
./configure \
--user=www \
--group=www \
--prefix=/usr/local/webserver/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-CC-opt='-O3' \
--with-cpu-opt=opteron \
--with-http_gzip_static_module
make && make install && cd ..
創建或修改nginx配置文件
cat nginx.conf
#user options
user www www;
#CPU Core options
worker_processes 4;
#nginx Process options
pid /usr/local/webserver/nginx/nginx.pid;
# [ debug | info | notice | warn | error | crit ]
error_log /wslogs/nginx_error.log crit;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events {
use epoll;
#maxclient = worker_processes * worker_connections / cpu_number
worker_connections 51200;
}
http {
include mime.types;
default_type application/octet-stream;
#charset gb2312;
#General options
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
ignore_invalid_headers on;
recursive_error_pages on;
server_name_in_redirect off;
sendfile on;
#timeouts
keepalive_timeout 60;
#TCP options
tcp_nopush on;
tcp_nodelay on;
#fastcgi options
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 128k;
fastcgi_intercept_errors on;
#size limits
client_max_body_size 300m;
client_body_buffer_size 256k;
#gzip compression
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain text/css application/x-javascript application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
#virtual hosts options
include vhosts.conf;
} cat vhosts.conf
server {
listen 80;
server_name www.linuxde.net linuxde.net;
access_log /data/wslogs/linuxde_www_access.log combined;
index index.html index.htm index.php;
root /data/wsdata/wwwroot/linuxde/www;
#error_page 404 = ./error/404.html;
#error_page 500 502 503 504 = ./error/50x.html;
#linuxde.net 重定向到 www.linuxde.net
if ($host !~ "^www\.linuxde\.net$") {
rewrite ^(.*) http://www.linuxde.net$1 permanent;
}
location ~ .*\.(php|php5)?$ {
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include enable_fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
access_log off;
expires 30d;
}
location ~ .*\.(js|css)$ {
access_log off;
expires 1d;
}
#wordpress僞靜態
location / {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
}cat enable_fcgi.conf
#PHP PATH_INFO bugs
if ($request_filename ~* (.*)\.php) {
set $php_url $1;
}
if (!-e $php_url.php) {
return 403;
}
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
#for test
fastcgi_param HTTP_ACCEPT_ENCODING gzip,deflate;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;啓動nginx服務
/usr/local/webserver/nginx/sbin/nginx -t //檢測配置文件是否正確
/usr/local/webserver/nginx/sbin/nginx //啓動nginx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.