在 VPS 上用 nginx + php-fpm + mysql 搭建网络服务
最近在折腾 VPS ,实在厌倦了每次配置时都要 google 一下,把配置步骤记录下来,也欢迎高手们指教。
我们需要参照这篇文章: http://blog.s135.com/nginx_php_v6/
准备
首先当然是要买一个 VPS ,新手推荐 YardVPS ,便宜啊。 然后在主机上建立存放安装包的目录:
mkdir ~/packa cd ~/packa
下载安装包:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz/from/http://mysql.he.net/ wget http://nginx.org/download/nginx-0.8.54.tar.gz wget http://cn.php.net/get/php-5.3.4.tar.bz2/from/us2.php.net/mirror svn checkout http://code.taobao.org/svn/nginx_concat_module/trunk/ nginx_concat_module
安装 nginx
为了装逼,我们先修改一下 nginx 源码,使其发出的 Header 里的 server 信息带上我们自己的个性化烙印。
vim src/core/nginx.h
修改 #define NGINX_VER
这一行为你想要的! Like :
#define NGINX_VER "Peace in Heart (nginx/" NGINX_VERSION ")"
或者: http://stackoverflow.com/questions/246227/how-do-you-change-server-tag-for-nginx
根据 nginx 官方维基 的介绍以及自己的需求,使用如下编译选项:
./configure \ --prefix=/usr/local/webserver/nginx \ --user=www \ --group=www \ --conf-path=/etc/nginx/nginx.conf \ --http-log-path=/srv/log/nginx/access_log \ --error-log-path=/srv/log/nginx/error_log \ --pid-path=/var/run/nginx.pid \ --http-client-body-temp-path=/var/tmp/nginx/client \ --http-proxy-temp-path=/var/tmp/nginx/proxy \ --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \ --with-md5-asm \ --with-sha1-asm \ --with-sha1=/usr/include \ --with-http_realip_module \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --add-module=/root/packa/nginx_concat_module
如果要安装 perl 模块,则至少还需要 perl-ExtUtils-Embed perl-URI 。否则编译/运行时会报错。
add-module 那里添加的是淘宝的文件combo模块。详细了解请点此: http://code.taobao.org/project/view/59/
如果提示缺少倚赖(比如说 pcre ),安装相应软件包即可。比如 Ubuntu 下的 PCRE 是这样:
apt-get install libpcre3 libpcre3-dev
openssl 是这样:
apt-get install libssl-dev
用 yum 需要这些:
yum install pcre-devel perl-devel
其中 perl-devel 是如果你上面添加了 --with-http_perl_module
才有需要。
这些乱七八糟的发行版本,连软件包都没有一个统一的名字,还可真是麻烦啊。
然后就可以 make && make install
。
接下来就可以编辑 /etc/nginx/nginx.conf
,修改你的 nginx 配置了。
用 ArchLinux 编译的时候,一切都很顺,用 Ubuntu 就老是出错... 哎~ 其实这里有一个教程来着: http://forum.ubuntu.org.cn/viewtopic.php?t=241301
安装 php
php 编译选项如下
./configure \ '--prefix=/usr/local/webserver/php'\ '--sysconfdir=/etc/php'\ '--localstatedir=/var'\ '--with-layout=GNU'\ '--with-config-file-path=/etc/php'\ '--with-config-file-scan-dir=/etc/php/conf.d'\ '--enable-inline-optimization'\ '--disable-debug'\ '--disable-rpath'\ '--disable-static'\ '--enable-shared'\ '--mandir=/usr/share/man'\ '--without-pear'\ '--disable-cli'\ '--enable-fpm'\ '--with-fpm-user=www'\ '--with-fpm-group=www'\ '--enable-cli'\ '--enable-mbregex'\ '--enable-session'\ '--enable-bcmath=shared'\ '--enable-calendar=shared'\ '--enable-exif=shared'\ '--enable-ftp=shared'\ '--enable-json=shared'\ '--enable-mbstring=shared'\ '--enable-pdo=shared'\ '--enable-phar=shared'\ '--enable-posix=shared'\ '--enable-shmop=shared'\ '--enable-soap=shared'\ '--enable-sockets=shared'\ '--enable-sysvmsg=shared'\ '--enable-sysvsem=shared'\ '--enable-sysvshm=shared'\ '--enable-xml'\ '--enable-zip=shared'\ '--with-bz2=shared'\ '--with-curl=shared'\ '--with-freetype-dir=shared,/usr'\ '--with-mcrypt=shared'\ '--with-gd=shared'\ '--enable-gd-native-ttf'\ '--with-gettext=shared'\ '--with-gmp=shared'\ '--with-iconv=shared'\ '--with-iconv-dir=/usr/local/lib'\ '--with-imap-ssl=shared'\ '--with-imap=shared'\ '--with-kerberos'\ '--with-jpeg-dir=shared,/usr'\ '--with-ldap=shared'\ '--with-ldap-sasl'\ '--with-mhash'\ '--with-mysql=shared,mysqlnd'\ '--with-mysqli=shared,mysqlnd'\ '--with-sqlite=shared'\ '--with-pdo-mysql=shared,mysqlnd'\ '--with-pdo-sqlite=shared'\ '--with-openssl=shared'\ '--with-pcre-regex=/usr'\ '--with-png-dir=shared,/usr'\ '--with-regex=php'\ '--with-xmlrpc=shared'\ '--with-zlib=shared' make ZEND_EXTRA_LIBS='-liconv'
实现需要安装的包有 libevent-devel gmp-devel libc-client-devel libmcrypt-devel libiconv(需自己编译安装) ...
编译 PHP 的疑难解答
1. 遭遇 error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
解决办法:
-
在
/etc/ld.so.conf
中加一行/usr/local/lib
-
运行
/sbin/ldconfig
2. 遇到 mcrypt 的错误:
/usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [ext/mcrypt/mcrypt.la] 错误 1
解决办法:
wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0" 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 ../../
安装 eaccelerator 等 php 加速模块
wget http://pecl.php.net/get/memcache-2.2.6.tgz wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
然后分别解压,在各自目录里执行:
phpize ./configure make make install
需要注意的是, eaccelerator 的编译选项需要为:
./configure --enable-eaccelerator=shared