LEMP架构及应用部署——Nginx延伸
LEMP架构及应用部署——Nginx补充
与构建LAMP平台类似,构建LEMP平台也需要LINUX服务器、MYSQL数据库、PHP解析
环境,区别主要在于Nginx与PHP的协作配置上:
1)以编译方式安装Nginx :
释放MYSQL的源码包:
[root@nginx ~]# tar zxvf mysql-5.1.55.tar.gz
编译前配置:
[root@nginx mysql-5.1.55]# ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,gb2312
注解:
--with-charset:指定默认使用的字符集编码;
--with-collation:指定默认使用的字符集校对规则,utf8_general_ci是适用于UTF-8字符集的通用规则;
--with-extra-charsets:指定额外支持的其他字符集编码。
编译并安装MYSQL:
[root@nginx mysql-5.1.55]# make && make install
优化调整:
[root@nginx mysql-5.1.55]# cp -f support-files/my-medium.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@nginx mysql-5.1.55]# cp support-files/mysql.server /etc/init.d/mysqld
[root@nginx mysql-5.1.55]# chmod a+x /etc/init.d/mysqld
[root@nginx mysql-5.1.55]# chkconfig --add mysqld
[root@nginx mysql-5.1.55]# ln -s /usr/local/mysql/bin/* /usr/local/bin/
[root@nginx mysql-5.1.55]# ln -s /usr/local/mysql/lib/mysql/* /usr/lib/
[root@nginx mysql-5.1.55]# ln -s /usr/local/mysql/include/mysql/* /usr/include/
初始化数据库:
[root@nginx mysql-5.1.55]# useradd -M -s /sbin/nologin mysql
[root@nginx mysql-5.1.55]# cd /usr/local/mysql/bin/
[root@nginx bin]# ./mysql_install_db --user=mysql
[root@nginx bin]# chown -R root:mysql /usr/local/mysql/
[root@nginx bin]# chown -R mysql /usr/local/mysql/var/
启动MYSQL服务并为root用户设置密码:
[root@nginx bin]# service mysqld start
[root@nginx bin]# mysqladmin -u root password '123456'
3)安装PHP解析环境:
较新版本(如5.3)的PHP已经自带FPM(fastCGIprocessmanager,FastCGI进程管理器)模块,用来对PHP解析实例进行管理,优化解析效率,因此在配置PHP编译选项时应添加”--enable-fpm”以启用此模块。
为了提高PHP解析效率,建议将相应版本的ZendGuardLander也装上
释放PHP源码包:
[root@nginx ~]# tar zxvf php-5.3.6.tar.gz
编译前配置:
[root@nginx php-5.3.6]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm
编译并安装PHP:
安装后的调整:
[root@nginx php-5.3.6]# cp php.ini-development /usr/local/php5/php.ini
[root@nginx php-5.3.6]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@nginx php-5.3.6]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/
安装ZendGuardLander(下载地址:http://www.zend.com/en/products/guard/downloads):
[root@nginx ~]# tar zxf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
[root@nginx ~]# cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/
[root@nginx php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php/
修改php.ini文件:
[root@nginx php-5.3.x]# vim /usr/local/php5/php.ini
在php.ini中添加如下配置:
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
配置Nginx支持PHP环境:
若要让Nginx能够解析PHP网页,有两种方法可以选择;
其一:充当中介,将访问PHP页面的WEB请求转交给其他服务器(LAMP)去处理;
其二,通过使用PHP的FPM模块来调用本机的PHP环境
如果选用FPM方式,则需要先启动php-fpm进程,以便监听PHP解析请求。
参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)
[root@nginx php-5.3.x]# cd /usr/local/php5/etc/
[root@nginx etc]# cp php-fpm.conf.default php-fpm.conf
[root@nginx etc]# vim php-fpm.conf
修改内容如下:
pid = run/php-fpm.pid
user = nginx
group = nginx
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
按以上提示修改php-fpm.conf文件,改完后保存退出。
启动php-fpm并查看地址监听。
[root@nginx ~]# /usr/local/sbin/php-fpm
[root@nginx ~]# netstat -anpl | grep php-fpm
在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid,根据上述信息,可以修改Nginx服务脚本,以便在启动/停止Nginx服务器时将php-fpm进程也自动启动/停止。
在nginx服务脚本相应位置中添加如下内容:
PROG_FPM="/usr/local/sbin/php-fpm"PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
这样一为,一旦启动或关闭nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm.。
4)配置Nginx支持PHP解析:
无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在”server{}”配置段中添加location设置,以便指定当访问.php面页时采取何种操作。
对于第一种方法(转交给其他WEB服务器处理),使用的配置语句如下所示,例如,交给IP地址为192.168.10.1的LAMP服务器处理,从而实现由Nginx负责静态页面,LAMP负责动态页面的分离效果。
server{
…… //省略部分信息
location~\.php${ //访问.php页面的配置段
proxy_passhttp://192.168.10.1:80; //APACHE服务器的监听地址
}
上面这种写法只是发送以.php为后缀的页面访问请求给其他WEB服务器,如果有其格式的文件访问(如:html、jpg等)就会出问题。访问不了了。
或者
location/{ //访问.php页面的配置段
proxy_passhttp://192.168.10.1:80; //APACHE服务器的监听地址
}
}
对于第二种方法(调用本机的php-fpm进程),使用的配置语句如下所示。在conf/目录下的fastcgi.conf文件中已经包含必需的宏设置,可通过include语句添加进来。
server{
…… //省略部分信息
location~\.php$ { //访问php页面的配置段
root/var/www/benet; //PHP网页文档根目录
fastcgi_pass127.0.0.1:9000; //php-fpm的监听地址
fastcgi_indexindex.php; //PHP首页文件
includefastcgi.conf; //包括fastcgi.conf样本配置
}
}
下边用第二种方法,完成修改后重新加载nginx服务即可生效。
location ~ \.php$ {
root /var/www/accp;
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
include fastcgi.conf;
}
PHP页面访问测试:
在PHP文档根目录下创建一个测试网页,以便测试PHP语名能否正常解析,以及能否访问MYSQL数据库。测试页内容如下:
$link=mysql_connect('localhost','root','123456');
if ($link) echo "恭喜你,数据库连接成功!!!";
mysql_close();
?>
然后访测试:http://www.benet.com/test.php若能看到成功提示信息表示一切正常。