LNMP是一个基于CentOS/Debian编写的Nginx、PHP、MySQL、phpMyAdmin、eAccelerator一键安装包。可以在VPS、独立主机上轻松的安装LNMP生产环境。
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
特点 Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler 站点开发的,已经在一些俄罗斯的大型网站上运行多年,相当的稳定。
Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
优点 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
环境搭建
首先必须有源码,然后必要的编译环境。
本文只介绍nginx 与php的源码安装。至于mysql前面文章都已经介绍过了。
这里准备了两个源码。
-rw-r--r-- 1 root root 837650 08-11 16:00 libevent-2.0.16-stable.tar.gz //提高nginx性能的一个包
-rw-r--r-- 1 root root 691501 08-11 16:00 nginx-1.0.11.tar.gz 具体的步骤说明可以参照lamp文章
[root@localhost ~]# yum list all |grep pcre
This system is not registered with RHN.
RHN support will be disabled.
pcre.i386 6.6-2.el5_1.7 installed
pcre-devel.i386 6.6-2.el5_1.7 rhel-server
我们需要库文件的支持。所以安装pcre-devel.
[root@localhost ~]# yum install pcre-devel
[root@localhost ~]# tar -zxvf libevent-2.0.16-stable.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/libevent-2.0.16-stable/
[root@localhost libevent-2.0.16-stable]# ./configure //不进行过多的配置了。直接编译。
[root@localhost libevent-2.0.16-stable]# vim /etc/ld.so.conf.d/libevent.conf
/usr/local/lib
[root@localhost libevent-2.0.16-stable]# make
[root@localhost libevent-2.0.16-stable]# make install
[root@localhost libevent-2.0.16-stable]# ldconfig -v
[root@localhost libevent-2.0.16-stable]# ldconfig -pv |grep libevent
libevent_pthreads-2.0.so.5 (libc6) => /usr/local/lib/libevent_pthreads-2.0.so.5
libevent_openssl-2.0.so.5 (libc6) => /usr/local/lib/libevent_openssl-2.0.so.5
libevent_extra-2.0.so.5 (libc6) => /usr/local/lib/libevent_extra-2.0.so.5
libevent_core-2.0.so.5 (libc6) => /usr/local/lib/libevent_core-2.0.so.5
libevent-2.0.so.5 (libc6) => /usr/local/lib/libevent-2.0.so.5
libevent-1.1a.so.1 (libc6) => /usr/lib/libevent-1.1a.so.1
[root@localhost libevent-2.0.16-stable]# cd
[root@localhost ~]# tar -zxvf nginx-1.0.11.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/nginx-1.0.11/
[root@localhost nginx-1.0.11]# groupadd -r nginx //创建组nginx
[root@localhost nginx-1.0.11]# useradd -r -g nginx -s /bin/false -M nginx //创建用户nginx属于组nginx无登录权限禁止创建家目录
[root@localhost nginx-1.0.11]# mkdir /var/tmp/nginx
[root@localhost nginx-1.0.11]# ./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--with-pcre
[root@localhost nginx-1.0.11]# make
[root@localhost nginx-1.0.11]# make install
[[email protected]]# /usr/sbin/nginx //启动nginx
这样就解决了nginx的问题。
但是支持php还需要fastcgi_params fastcgi_params.default fastcgi.conf的改动。
[root@localhost nginx-1.0.11]#vim /etc/nginx/nginx.conf
43 location / {
44 root html;
45 index index.php index.html index.htm;
46 }
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 include fastcgi_params;
71 }
[root@localhost nginx-1.0.11]# vim /etc/nginx/fastcgi_params
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 GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
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
这个地方是最重要的地方,因为默认情况下Nginx和PHP他俩之间是一点感觉没有的。在之前,很多朋友都搭建过Apache+PHP,Apache+PHP编译后生成的是模块文件,而Nginx+PHP需要PHP生成可执行文件才可以,所以要利用fastcgi技术来实现N ginx与PHP的整合,这个只要我们安装时启用FastCGI即可。此次我们安装PHP不仅使用了FastCGI,而且还使用了PHP-FPM这么一个东东,PHP-FPM说白了是一个管理FastCGI的一个管理器,它作为PHP的插件存在,在安装PHP要想使用PHP-FPM时就需要把PHP-FPM以补丁的形式安装到PHP中,而且PHP要与PHP-FPM版本一致,这是必须的,切记!
php 5.3.3及以上的版本内置了fpm ,此处用5.3.7举例,下载后解压,进入解压后目录
[root@localhost ~]# tar -jxvf php-5.3.7.tar.bz2 -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/php-5.3.7/
[root@localhost php-5.3.7]# less INSTALL
Example #1 Installation Instructions (Apache Shared Module Version) for
PHP
1. gunzip apache_xxx.tar.gz
2. tar -xvf apache_xxx.tar
3. gunzip php-xxx.tar.gz
4. tar -xvf php-xxx.tar
5. cd apache_xxx
6. ./configure --prefix=/www --enable-module=so
7. make
8. make install
9. cd ../php-xxx
[root@localhost php-5.3.7]# ./configure -help
--prefix //安装路径
--enable-mbstring //字符串支持
[root@localhost php-5.3.7]# ./configure --prefix=/usr/local/php --enable-mbstring=all --enable-fastcgi --enable-fpm
[root@localhost php-5.3.7]# make
[root@localhost php-5.3.7]# make install
注:Nginx+PHP整合,在安装时必须启用--enable-fastcgi和 --enable-fpm,这两个选项是做什么的上面已经描述。执行完后系统会提示--enable-fastcgi是一个未知选项,我们不必理会
再把php.ini-production复制到/usr/local/php/lib下,改名php.ini,
把/usr/local/php/etc/php-fpm.conf.default复制一份到相同目录命名为php-fpm.conf
[root@localhost php-5.3.7]# cp php.ini-production /usr/local/php/lib/php.ini
[root@localhost php-5.3.7]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php_fpm.conf
为php-fpm提供Sysv init脚本,并将其添加至服务列表:
[root@localhost php-5.3.7]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@localhost php-5.3.7]# chmod +x /etc/rc.d/init.d/php-fpm
[root@localhost php-5.3.7]# chkconfig --add php-fpm
[root@localhost php-5.3.7]# chkconfig php-fpm on
打开php-fpm.conf,去掉相应的分号注释,最后如下
pid = /usr/local/php/var/run/php-fpm.pid
error_log = log/php-fpm.log
listen = 127.0.0.1:9000
user = nobody
group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
[root@localhost php-5.3.7]# service php-fpm start //启动php-fpm
使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
[root@localhost php-5.3.7]# ps aux |grep php-fpm
root 5597 0.0 0.2 16340 2176 ? Ss 16:49 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody 5598 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5599 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5600 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5601 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5602 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
root 5606 0.0 0.0 5024 660 pts/1 R+ 16:51 0:00 grep php-fpm
测试网页
[root@localhost ~]# vim /usr/html/index.php
<?php
phpinfo();
?>