CentOS / Debian 編譯安裝 Nginx + Mysql 5.5.8 + PHP 5.3.5
CentOS / Debian 編譯安裝 Nginx + Mysql 5.5.8 + PHP 5.3.5
整整花了我2天時間徹底弄好了Nginx和Mysql+PHP的安裝
測試環境:CentOS 5.4 X86 ,Debian 5.0.6 (lenny)
CentOS上測試了Nginx的最新穩定版 ( Stable ):0.8.54
Debian上測試了Nginx的最新開發版 ( Development ):0.9.3
Mysql-server 安裝的最新版本: 5.5.8
如果你用的版本和我的不一樣,請不要參考,可能會給你帶來麻煩
安裝Nginx,
1,添加 webserver 用戶用來執行nginx,如果你已經存在 www或 www-data等用戶,掠過此步
useradd -M -r --shell /sbin/nologin --home-dir /usr/local/webserver webserver
2,下載Nginx安裝包:
穩定版: wget http://nginx.org/download/nginx-0.8.54.tar.gz
開發版: wget http://nginx.org/download/nginx-0.9.3.tar.gz
根據需要下載其中的一個
3,解壓,編譯,安裝,以 0.8.54 版本為例,指定用戶和用戶組:webserver
tar -xzvf nginx-0.8.54.tar.gz
cd nginx-0.8.54/
./configure \
--prefix=/usr/local/webserver/nginx \
--user=webserver \
--group=webserver \
--with-http_stub_status_module \
--with-http_ssl_module
make
make install
nginx安裝完畢。
4,配置默認nginx:,找到 nginx.conf文件
我的位置在:
vim /usr/local/webserver/nginx/conf/nginx.conf
其他安裝可能會在 /etc/nginx/nginx.conf
文件內容如下:
#指定啟動用戶:
user webserver webserver;
#進程數量,nginx作者認為一個就可以,根據自己的訪問量修改
worker_processes 1;
#錯誤日誌:
error_log /var/log/nginx/error.default.log;
pid /usr/local/webserver/nginx/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
server {
listen 80;
server_name localhost;
set $root /var/www;
root $root;
access_log /var/log/nginx/access.localhost.log;
location / {
root $root;
index index.html index.htm index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#圖片類資源緩存5天,並且不記錄請求日誌
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
{
expires 5d;
access_log off;
}
#css/js 緩存一天,不記錄請求日誌
location ~ .*\.(js|css)?$
{
expires 1d;
access_log off;
}
#防止access文件被下載
location ~ /\.ht {
deny all;
}
}
#引入虛擬主機文件:
include /usr/local/webserver/nginx/sites/*.conf;
}
這樣配置后,需要新增加虛擬主機的直接在 nginx/sites/目錄下,添加配置文件即可
如:現在有 www.example.com 域名
建立:/usr/local/webserver/nginx/sites/example.com.conf 文件
內容如下:
server {
listen 80;
client_max_body_size 10M;
server_name www.example.com example.com; #換成你的域名,多個域名用空格分割,第一個為默認
charset UTF-8;
index index.html index.htm index.php;
#定義根目錄
set $root /var/webroot/example.com;
#設置站點路徑
root $root;
#這裡把訪問不是www.example.com的全部跳轉到 www.example.com下,實現301永久重定向。
if ($host != 'www.example.com'){
rewrite ^(.*)$ http://www.example.com$1 permanent;
}
#防止目錄瀏覽
autoindex off;
#防止.htaccess文件被請求
location ~ /\.ht {
deny all;
}
error_page 404 /404.html;
#將php類型的請求轉交給fastcgi
location ~ .*\.(php|php5|php4|shtml|xhtml|phtml)?$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
}
#圖片類資源緩存5天,並且不記錄請求日誌
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
{
expires 5d;
access_log off;
}
#css/js 緩存一天,不記錄請求日誌
location ~ .*\.(js|css)?$
{
expires 1d;
access_log off;
}
#訪問日誌:
access_log /var/log/nginx/access.example.com.log;
#載入.htaccess重寫文件,注意,這裡不支持變數路徑
#不能寫成 include $root/example.com/.htaccess;
include /var/webroot/example.com/.htaccess;
#開啟域名跳轉,則當訪問出錯后,其他域名會自動跳轉到 www.example.com
#注意,這裡我說的是,僅僅當訪問出錯后,才會跳轉,所以,這裡並不能實現301重定向!
server_name_in_redirect on;
}
apache的.htaccess重寫規則到Nginx的改寫:
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
附上wordpress的nginx的.htaccess文件:
if (!-e $request_filename){
rewrite /. /index.php last;
}
上面的代碼表示:當請求的資源不是目錄也不是文件,即不存在資源的時候,重定向到index.php
啟動 nginx /etc/init.d/nginx start
安裝 Mysql 5.5.8
Mysql 5.5.8需要cmake編譯工具,所以需要先安裝cmake
自動安裝
CentOS : yum install cmake
Debian : sudo apt-get install cmake
編譯安裝
下載: wget http://www.cmake.org/files/v2.8/cmake-2.8.3.tar.gz
tar xzvf cmake-2.8.3.tar.gz
cd cmake-2.8.3/
然後運行:
./configure
make
make install
或者:
./bootstrap
gmake
gmake install
安裝完cmake 后,編譯mysql
1,添加mysql用戶,如果之前安裝過mysql已經存在mysql用戶,掠過此步
useradd -M -r --shell /sbin/nologin --home-dir /usr/local/mysql mysql
2,下載mysql 5.5.8 ,編譯安裝,我安裝的目錄在:/usr/local/mysql 資料庫存放在 /var/lib/mysql 下
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz/from/http://opensource.become.com/mysql/
tar xzvf mysql-5.5.8.tar.gz
cd mysql-5.5.8/
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DINSTALL_DATADIR=/var/lib/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1
make
make install
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /var/lib/mysql
安裝默認資料庫
./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
登錄修改密碼:mysql -u root -h localhost,默認密碼為空,直接按回車進入。
update user set password=PASSWORD('123456') where user='root';
複製mysql配置文件:
cp ./support-files/my-medium.cnf /etc/my.cnf
生成啟動腳本:
cp support-files/mysql.server /etc/init.d/mysqld
啟動mysql
./bin/mysqld_safe --user=mysql &
安裝 PHP5.3.5 最新版本
注意:PHP5.3.5版本中內置了 php-fpm ,編譯時開啟,並且編譯后不存在 php-cgi 文件了,使用 php-fpm解析 php fastcgi請求。
1,下載:
wget http://cn.php.net/get/php-5.3.5.tar.bz2/from/am.php.net/mirror
tar xjvf php-5.3.5.tar.bz2
cd php-5.3.5
執行:
./buildconf --force
如果報錯,可能是你的 autoconf不是 2.13 版本的,PHP5.3.5的bug,需要安裝 autoconf為2.13不版本:
CentOS : # yum install autoconf213
Debian : # apt-get install autoconf2.13
設置環境變數
CentOS : export PHP_AUTOCONF="/usr/bin/autoconf-2.13"
Debian : export PHP_AUTOCONF="/usr/bin/autoconf2.13"
再次運行:./buildconf --force ,出現 Forcing buildconf ,則運行成功。
我的php安裝在 /usr/local/php 目錄下,這也是默認安裝位置,指定用戶和用戶組:webserver
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/conf.d \
--enable-fpm \
--with-fpm-user=webserver \
--with-fpm-group=webserver \
--with-curl \
--with-pear \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-xpm-dir \
--with-freetype-dir \
--with-mcrypt \
--with-mhash \
--with-mysql \
--with-mysqli \
--with-pdo-mysql \
--with-openssl \
--with-xmlrpc \
--with-xsl \
--with-bz2 \
--with-gettext \
--disable-debug \
--enable-fpm \
--enable-exif \
--enable-wddx \
--enable-zip \
--enable-bcmath \
--enable-calendar \
--enable-ftp \
--enable-mbstring \
--enable-soap \
--enable-sockets \
--enable-sqlite-utf8 \
--enable-shmop \
--enable-dba \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg
運行可能報錯 :我遇到xsl和mcrypt兩個庫報錯,重新安裝一下xsl的dev包就可以:
CentOS : yum install libxslt-devel libmcrypt-devel
Debian : apt-get install libxslt1-dev libmcrypt-dev
如果你有其他的庫不滿足,搜索一下該庫,安裝一下即可,這一步應該沒有太多問題。
編譯:
make
我在Debian下make正常,但在CentOS下卻提示make錯誤,
make: *** Error 1 錯誤中出現 libiconv,應該是iconv包問題,
使用下面的命令替換即可:
make ZEND_EXTRA_LIBS='-liconv'
完成後:
make test
make install
安裝完成後,cp一份源目錄下的 php.ini-production 到安裝目錄下的etc/目錄下
比如我的
cp php.ini-production /usr/local/php/etc/
注意,如果你編譯php時候,沒有指定配置文件路徑 --with-config-file-path=/usr/local/php/etc
可能會有問題,你需要找到php尋找配置文件的路徑。然後把php.ini拷貝進去
安裝目錄下的etc/目錄下會有一個php-fpm.conf.default文件複製一份改名為 php-fpm.conf
cd /usr/local/php/etc/ # 切換到安裝目錄下的配置文件目錄
cp php-fpm.conf.default php-fpm.conf
修改php-fpm.conf 啟用如下幾行,即去掉前面的分號(;)
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
listen.owner = webserver
listen.group = webserver
listen.mode = 0666
user = webserver
group = webserver
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
env = $HOSTNAME
env = /usr/local/bin:/usr/bin:/bin
env = /tmp
env = /tmp
env = /tmp
如果你的路徑為默認安裝路徑:/usr/local/php
則安裝完成後會生成 /etc/init.d/php-fpm 啟動腳本,並且這個腳本還是錯的!
如果不是,則不會生成php-fpm啟動腳本,不管有沒有生成,自己創建,如果有的,清空原腳本
vim /etc/init.d/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-exit"
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
現在應該可以啟動 php-fpm了:以root許可權運行:
/etc/init.d/php-fpm start
重新啟動一下nginx
/etc/init.d/nginx restart
設置開機啟動:
CentOS :
chkconfig --add mysqld
chkconfig --add nginx
chkconfig --add php-fpm
chkconfig --level 2345 mysqld on
chkconfig --level 2345 nginx on
chkconfig --level 2345 php-fpm on
Debian :
sudo rcconf
選擇 mysqld nginx php-fpm 確定
來自: http://hi.baidu.com/smallchicken/blog/item/09067c6241b23bcfe6113a3b.html
《解決方案》
謝謝分享啊;P
《解決方案》
lastfile 發表於 2012-03-15 15:32 static/image/common/back.gif
謝謝分享啊
你這是灌水啊,到處是謝謝