- 论坛徽章:
- 3
|
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/Downloa ... e.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: *** [sapi/fpm/php-fpm] 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] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /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 ... b23bcfe6113a3b.html |
|