nginx+phpfastcgi
linux nginx php fastcgi fpm 編譯安裝
軟體列表
eaccelerator-0.9.6.1.tar.bz2
fontconfig-2.6.0.tar.gz
freetype-2.3.7.tar.gz
gd-2.0.33.tar.gz
gettext-0.17.tar.gz
jpegsrc.v6b.tar.gz
libevent-1.4.14b-stable.tar.gz
libmcrypt-2.5.6.tar.gz
libpng-1.2.35.tar.gz
libxml2-2.6.30.tar.gz
mcrypt-2.6.4.tar.gz
memcache-2.2.5.tgz
memcached-1.4.5.tar.gz
mhash-0.9.8.tar.gz
mysql-5.1.32.tar.gz
nginx-0.8.43.tar.gz
pcre-8.10.zip
PDO_MYSQL-1.0.2.tgz
php-5.2.6-fpm-0.5.9.diff.gz
php-5.2.6.tar.gz
ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
zlib-1.2.3.tar.gz
##############################################install##################################################
tar zxvf libmcrypt-2.5.6.tar.gz
cd libmcrypt-2.5.6/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure –enable-ltdl-install
make
make install
cd ../../
tar zxvf mhash-0.9.8tar.gz
cd mhash-0.9.8/
./configure
make
make install
cd ../
echo “/usr/local/lib/” >> /etc/ld.so.conf
/sbin/ldconfig
安裝mcrypt的時候需要mhash和libmcrypt的lib庫,所以在這裡共享一下
tar zxvf mcrypt-2.6.4.tar.gz
cd mcrypt-2.6.4/
/sbin/ldconfig
./configure
make
make install
cd ../
groupadd mysql //建立組
useradd -g mysql -s /sbin/nologin -M mysql //新建使用者並新增到mysql組中,拒絕作為本地使用者登陸shell
tar zxf mysql-5.1.32.tar.gz
cd mysql-5.1.32
./configure –prefix=/app/mysql –with-charset=utf8 –with-extra-charsets=all –with-tcp-port=3306 –with-plugins=all –with-unix-socket-path=/tmp/mysql.sock –with-mysqld-user=mysql –enable-local-infile –with-big-tables
–prefix=/app/mysql //mysql的安裝路徑
–with-charset=utf8 //資料庫字符集使用utf-8
–with-extra-charsets=all //支援多言語
–with-tcp-port=3306 //mysql的通訊埠
–with-plugins=all //新增所有資料引擎的支援
–with-unix-socket-path=/tmp/mysql.sock //mysql的套接字路徑
–with-mysqld-user=mysql //指定資料使用者為mysql
–enable-local-infile //啟用資料庫的本地負載資訊
–with-big-tables //支援4G的表
make
make install
cp mysql-5.1.30/support-files/my-medium.cnf /etc/my.cnf
//拷貝mysql的模板配置檔案
/app/mysql/bin/mysql_install_db –user=mysql
//使用mysql使用者初始化mysql資料庫
cd /app/mysql
chown -R root . //更改mysql目錄下所有目錄的屬主為root使用者
chgrp -R mysql . //更改mysql目錄下所有目錄的屬組為mysql使用者
cd /app/mysql/var
chown -R mysql.mysql .
//更改mysql資料庫資料夾的屬主和屬組為mysql使用者
cp /app/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
//複製mysql的啟動指令碼檔案到init下面
chkconfig –add mysqld
//新增mysqld為系統服務
chkconfig –level 3 mysqld on
//配置mysqld在系統的執行級別3下開機自動啟動
service mysqld start
//啟動mysql服務
mysqladmin -u root password `newpassword`
//設定mysql資料庫root的密碼
###############php的支援庫#################
tar -zxf jpegsrc.v6b.tar.gz
cd jpeg-6b
mkdir /app/jpeg6
mkdir /app/jpeg6/bin
mkdir /app/jpeg6/lib
mkdir /app/jpeg6/include
mkdir /app/jpeg6/man
mkdir /app/jpeg6/man/man1
64位的系統需要拷貝兩個檔案
在jpeg6的原始碼目錄下操作
./configure –prefix=/app/jpeg6/ –enable-shared –enable-static
Make
Make install
tar -zxf libpng-1.2.33.tar.gz
cd libpng-1.2.33
./configure –prefix=/app/libpng
make
make install
tar -zxf freetype-2.3.5.tar.gz
cd freetype-2.3.5
./configure –prefix=/app/freetype
make
make install
tar -zxf fontconfig-2.6.0.tar.gz
cd fontconfig-2.6.0
./configure–prefix=/app/fontconfig–enable-libxml2–with-freetype-config=/app/freetype/bin/freetype-config
Make
Make install
tar -zxf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure –prefix=/app/gd2 –with-png=/app/libpng/ –with-freetype=/app/freetype/ –with-fontconfig=/app/fontconfig/ –with-jpeg=/app/jpeg6/
** Configuration summary for gd 2.0.33:
Support for PNG library: yes
Support for JPEG library: yes
Support for Freetype 2.x library: yes
Support for Fontconfig library: yes
Support for Xpm library: no
Support for pthreads: yes
vi gd_png.c
修改#include “png.h” 成#include “/app/libpng/include/png.h” linpng的絕對路徑
Make
Make install
tar -zxf zlib-1.2.3.tar.gz
cd zlib-1.2.3
64位的系統需要以下方法編譯
CFLAGS=”-O3 -fPIC” ./configure //使用64位元的方法進行編譯
32位的
./configure –prefix=/app/zlib
Make
Make install
tar -zxf libxml2-2.6.30.tar.gz
cd libxml2-2.6.30
./configure –prefix=/app/libxml –with-zlib=/app/zlib/
Make
Make install
tar -zxf gettext-0.17.tar.gz
cd gettext-0.17
./configure –prefix=/app/gettext –with-libxml2-prefix=/app/libxml/
Make
Make install
tar zxf php-5.2.6.tar.gz
gzip -cd php-5.2.6-fpm-0.5.9.diff.gz | patch -d php-5.2.6 -p1
//給php打上fpm的補丁,補丁程式下載的時候最好能和php的版本對應上,fpm是php的fastcgi的管理工具
cd php-5.2.6
./configure –prefix=/app/php –with-config-file-path=/etc/ –with-mysql=/app/mysql/ –with-gd=/app/gd2/ –with-libxml-dir=/app/libxml/include/libxml2/libxml/ –with-gettext=/app/gettext/ –with-freetype-dir=/app/freetype/ –with-zlib-dir=/app/zlib –with-jpeg-dir=/app/jpeg6/ –with-png-dir=/app/libpng/ –with-mysql-sock=/tmp/mysql.sock –enable-zend-multibyte –enable-mbstring –enable-sockets –enable-ftp –with-bz2 –enable-soap –enable-fastcgi –enable-fpm –enable-force-cgi-redirect –with-mcrypt –with-mhash
cp php.ini-dist /etc/php.ini
tar zxf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure –prefix=/app/libevent
make
make install
tar zxf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure –prefix=/app/memcached –with-libevent=/app/libevent/
make
make install
/app/memcached/bin/memcached -d -m 128 -u root -l 172.16.6.165 -p 1111 -c 256 -P /tmp/memcached.pid
-d選項是啟動一個守護程式,
-m是分配給Memcache使用的記憶體數量,單位是MB,我這裡是128MB,
-u是執行Memcache的使用者,我這裡是root,
-l是監聽的伺服器IP地址,如果有多個地址的話,我這裡指定了伺服器的IP地址192.168.1.9,
-p是設定Memcache監聽的埠,我這裡設定了1111,最好是1024以上的埠,
-c選項是最大執行的併發連線數,預設是1024,我這裡設定了256,按照你伺服器的負載量來設定,
-P是設定儲存Memcache的pid檔案,我這裡是儲存在 /tmp/memcached.pid,
tar zxf memcache-2.2.5.tgz
cd memcache-2.2.5
/app/php/bin/phpize
./configure –with-php-config=/app/php/bin/php-config
make
make test
make install
tar jxf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
/app/php/bin/phpize
./configure –enable-eaccelerator=shared –with-php-config=/app/php/bin/php-config
make
make install
tar zxf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
/app/php/bin/phpize
./configure –with-php-config=/app/php/bin/php-config –with-pdo-mysql=/app/mysql/
make
make install
groupadd www
useradd -g www -s /sbin/nologin www
chown -R www.www /opt/www/
unzip pcre-8.10.zip
cd pcre-8.10
./configure –prefix=/app/pcre –enable-utf8
make
make install
tar zxf nginx-0.8.43.tar.gz
cd nginx-0.8.43
./configure –prefix=/app/nginx –user=www –group=www –with-http_stub_status_module –with-http_ssl_module –with-pcre=/back/pcre-8.10
安裝nginx的時候注意一下pcre的路徑是解壓的目錄而不是安裝目錄別搞錯了,如果你不加–with-pcre的引數,預設會找到系統自帶的pcre
make
make install
#####################################################configure############################################
修改php.ini檔案
手工修改:查詢/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”
再查詢output_buffering = Off
修改為output_buffering = On
再查詢; cgi.fix_pathinfo=0
修改為cgi.fix_pathinfo=0,防止Nginx檔案型別錯誤解析漏洞。
[eaccelerator]
zend_extension=”/app/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so”
eaccelerator.shm_size=”30″
#這個值對應系統的/proc/sys/kernel/shmmax 檔案,是允許使用的共享記憶體總量,該檔案表示核心所允許的最大共享記憶體段的大小(bytes)。
#預設設定:33554432
#建議設定:實體記憶體 * 50%
eaccelerator.cache_dir=”/app/php/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″
vi /app/php/etc/php-fpm.conf修改fpm的配置檔案
<value name=”listen_address”>127.0.0.1:9000</value> 這行是fpm的監聽地址和埠
<value name=”display_errors”>0</value> 顯示錯誤資訊
<value name=”user”>www</value> 啟動fpm的使用者
<value name=”group”>www</value> 啟動fpm的組
<value name=”max_children”>10</value> 啟動的fast-cgi程式數
vi /app/nginx/conf/nginx.conf
user www www;
worker_processes 4;
error_log /var/log/nginx_error.log crit;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k; large_client_header_buffers 4 32k;
client_max_body_size 8m;
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 128k;
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;
#limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name 172.16.6.165;
index index.php;
root /opt/www;
#limit_conn crawler 20;
location ~ .*.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
log_format access `$remote_addr – $remote_user [$time_local] “$request” `
`$status $body_bytes_sent “$http_referer” `
`”$http_user_agent” $http_x_forwarded_for`;
access_log /var/log/access.log access;
}
}
vi /app/nginx/conf/fcgi.conf
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;
# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
/app/nginx/sbin/nginx -t 測試nginx的配置是否有問題
/app/nginx/sbin/nginx 啟動nginx服務
/app/php/sbin/php-fpm start 啟動fpm
vi /etc/sysctl.conf
新增以下內容,作為系統的優化引數
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
sysctl -p 配置檔案立即生效