摘要:一.关于LNAMP环境的介绍: Lnamp环境是由linux + nginx+apache+mysql+php组成的,Nginx做网站前端,Apache后端处理PHP文件。作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品
一.关于LNAMP环境的介绍:
Lnamp环境是由linux+nginx+apache+mysql+php组成的,Nginx做网站前端,Apache后端处理PHP文件。作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品结合了Nginx高并发和静态页面高效率以及Apache稳定的动态页面处理特点。这样一来再也不用担心Nginx以FastCGI模式运行PHP时的502问题,也不必担心Apache处理静态页面过慢,负载过高的问题。
wdOS是一个基于CentOS版本精简优化过的Linux服务器系统,并集成nginx,apache,php,mysql等web应用环境及wdcp管理系统,可以说安装和使用都非常便利。我这次是选在wdOS的纯系统下安装lnamp环境,但这只是初步的安装,并没有进行mysql以及php的优化。
LNAMP的安装中php的编译安装比较麻烦,需要分为两次编译,另外nginx以及apache的配置也比较复杂,apache需要开启虚拟主机的功能,使得apache监听非80端口,nginx反向代理php请求与apache协同工作。
二.安装过程:
第一步:安装前准备工作
创建存放源代码的目录:mkdir/usr/local/src
创建apache的安装目录:mkdir/usr/local/apache
创建php的安装目录:mkdir/usr/local/php
创建mysql的安装目录:mkdir/usr/local/mysql
创建nginx的安装目录:mkdir/usr/local/nginx
第二步:下载安装编译需要用到的库文件:
1.nginx编译时需要用到的编译库文件
openssl-devel,glib2-devel,pcre-devel,bzip2-devel以及gzip-devel
不过,wdOS系统下默认安装了openssl-devel这个库文件
所以剩下的使用命令yuminstallglib2-develpcre-develbzip2-develgzip-devel下载安装即可
2.检查系统是否安装了编译mysql所需要的工具包gcc、gcc-c++,ncurses-devel和camke(mysql5.5版本后不使用configure安装,而是使用cmake来安装)
我们使用rpm-qa|grepgcc和rpm-qa|grepncurses-devel进行检查
也就是说,wdOS系统中还没有安装ncurses-devel,所以我们可以使用yum命令进行安装
下载cmake源代码到/usr/local/src下:
wgethttp://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
解压缩:tarzxvfcmake-2.8.4.tar.gz
进入/usr/local/src/cmake-2.8.4这个目录下设置,
./bootstrap
gamke:
gmakeinstall
3.下载安装php时需要用到的编译库文件:
yum-yinstalllibeventlibevent-devellibxml2libxml2-devellibmcryptlibmcrypt-devellibmcryptlibmcrypt-develcurl-devellibpng-devellibtool-ltdl-devel
第三步:源码编译安装mysql5.5.25a
为mysql数据库添加用户和用户组:(我这里假设为mysql用户以及mysql用户组)
groupaddmysql
useradd-gmysqlmysql
下载mysql源代码:
wget-chttp://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.25a.tar.gz
tarxvfmysql-5.5.25a.tar.gz进行解压缩:
设置编译时的环境参数:
cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-----指定mysql的安装目录
编译make:
安装:makeinstall
在当前目录下,建立配置文件:
cpsupport-files/my-medium.cnf/etc/my.cnf
说明:在展开的源码包目录中的“support-files”文件夹下,提供了多个MySQL服务器的配置文件,分别适用于不同负载的数据库服务器,一般选择my-medium.cnf文件即可,该配置文件适用于中等负载的数据库,可以满足大多数企业的应有需求。
设置软连接使mysql和mysqladmin的bin命令能在shell中直接运行:
创建用于存放mysql数据和日志的目录,并修改目录所有者和属组为mysql:
现在到/etc/my.cnf配置文件下,做下面的修改:
进入mysql安装目录下的脚本目录下的脚本目录:/tmp/mysql-5.5.25a/scripts
先修改mysql_install_db这个文件的权限:
chmod750mysql_install_db
然后,利用mysql_install_db脚本生成新的mysql授权表:
./mysql_install_db--user=mysql--basedir=/usr/local/mysql--datadir=/var/mysql/data&
添加启动脚本:
cp/usr/local/src/mysql-5.5.25a/support-files/mysql.server/etc/rc.d/init.d/mysqld
修改启动脚本:添加basedir以及datadir的路径:
修改启动脚本的权限:
chmod750/etc/rc.d/init.d/mysqld
启动数据库:
检查数据库的默认侦听端口3306是否开启:
第四步:源码安装apache-2.2.22
先下载apache源代码到目录/usr/local/src下:(我这里下载的apache版本为2.2.22)
wget-chttp://apache.etoak.com/httpd/httpd-2.2.22.tar.gz
下载完成之后开始解压缩:(这里给出部分截图)
tar-zxvfhttpd-2.2.22.tar.gz
进入解压缩后的httpd-2.2.22这个目录下,设定编译时的参数:
./configure--prefix=/usr/local/apache----将apache安装在这个目录下
--enable-vhost-alias----支持虚拟主机的功能
--enable-rewrite-----允许重写
--enable-info
开始进行编译:make
编译完进行安装:makeinstall
在当前目录下,复制apache的初始化文件到/etc/init.d目录下,并命名为httpd,修改其权限:
cpbuild/rpm/httpd.init/etc/init.d/httpd
设置Apache开机自启动:(我这里使用的是方法一)
方法一:输入下列命令:
chconfig--addhttpd
chkconfig--level345httpdon
方法二:
编辑vi/etc/init.d/httpd
找到chkconfig:这句,添加345
找到description:这句,添加Apachehttpd
设置完之后你可以输入chkconfig--list|grephttpd检查一下3,4,5是否为on:
修改apache服务器的配置文件:
vi/usr/local/apache/conf/httpd.conf,找到ServerName那一行,去掉前面的注释
为了适应启动脚本,我们创建一些符号链接
重启一下apache服务器:
/etc/init.d/httpdstart
第五步:源码编译安装nginx-1.0.4
进入/usr/local/src这个目录下载nginx源码:
wget-chttp://nginx.org/download/nginx-1.0.4.tar.gz
解压缩nginx源代码包:
tar-zxvfnginx-1.0.4.tar.gz
进入解压好的nginx-1.0.4这个目录配置相应的编译参数:
./configure--user=nginx--group=nginx--prefix=/usr/local/nginx--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/log/run/nginx.pid--lock-path=/var/log/lock/subsys/nginx--with-http_ssl_module--with-http_realip_module--with-http_addition_module--with-http_sub_module--with-http_dav_module--with-http_flv_module--with-http_gzip_static_module--with-http_stub_status_module--with-http_perl_module--with-mail--with-mail_ssl_module--with-http_flv_module--with-http_gzip_static_module--with-http_perl_module--with-mail--without-http_rewrite_module--with-pcre
make进行编译:
编译完就可以进行安装:makeinstall
第六步:源码编译安装php-5.3.10
说明:php的编译这一步要分为两部分进行,要先编译支持apache模块的,然后再编译支持nginx模块的。如果同时进行编译就会报错:You\'veconfiguredmultipleSAPIstobebuild(见下图:)
所以,我们就先编译支持apache的
这一部分的php编译设置的参数:
./configure--prefix=/usr/local/php--with-mysql=/usr/local/mysql--enable-mbstring--enable-fpm--with-iconv-dir=/usr/local/libiconv--enable-xml--with-curl--with-curlwrappers--with-mhash--with-gd--enable-gd-native-ttf--with-xmlrpc--with-zlib--with-apxs2=/usr/local/apache/bin/apxs--with-config-file-path=/usr/local/php/etc
make
makeimstall
完成后,就可以继续设置支持nginx的编译参数了:
./configure--prefix=/usr/local/php--with-mysql=/usr/local/mysql--enable-mbstring--enable-fpm--with-iconv-dir=/usr/local/libiconv--enable-xml--with-curl--with-curlwrappers--with-mhash--with-gd--enable-gd-native-ttf--with-xmlrpc--with-zlib
然后重复与上面apache相似的步骤,make&makeinstall
建立php配置文件:
复制php.ini到php安装目录php.ini-development到/usr/local/php/lib这个目录下并重命名为php.ini:
说明:php.ini是PHP在启动时会读取的配置文件,我这里没有做配置。另外,php5.0版本之后文件的名字发生了改变,其中php.ini-production对应于php.ini-recommended;而php.ini-development对应于php.ini-dist。php.ini-dist适合开发程式使用(也就是测试使用),php.ini-recommended拥有较高的安全性设定,适合上线当产品使用
做方便php的运行的链接,不用配置环境变量
完成之后,我们就可以查看php的版本:
第七步:整合nginx和php:
修改进程管理器php-fpm的配置:
说明:在LAMP平台下,php是被编译成为模块然后被apache所调用;而在LNMP平台下,php是被编译成二进制文件执行,这样就需要通过fastCGI技术来实现nginx和php的整合。这里通过使用fastCGI的一个进程管理器php-fpm,php5.3.3以后的版本已经内置了php-fpm,使用的时候只需要加入参数--enable-fpm就可以由此整合php与nginx
cd/usr/local/php/etc
cpphp-fpm.conf.defaultphp-fpm.conf
进入php-fpm的主配置文件php-fpm.conf,找到图中的部分做相应的修改:
最后就是在/usr/local/nginx/html这个目录下创建一个文件命名为info.php,在里面添加以下测试内容:
完成后可以使用/usr/sbin/nginx来重启nginx服务,如果启动的时候提示:nginx:[emerg]getpwnam("nginx")failed
这时,你只需要vi/etc/nginx/nginx.conf进入到这个文件,将配置文件的第一行中的usernobody这一行的注释去掉即可。
第八步:为apache设置虚拟主机,使得apache侦听非80端口
(我这里以同一个ip对应两个不同的端口为例)
vi编辑httpd的主配置文件/usr/local/apache/conf/httpd.conf,修改原来的80端口为8080以及8081端口:
同时注释下面这句:
为使Apache支持rewrite(伪静态),注释原来的apache文件根目录
修改Directory模块内容(相当是全局的,以后httpd-vhosts.conf也会用到这个设置),将AllowOverridenone改为all,注释掉下面的order.....
开启了httpd-vhosts虚拟主机文件:
修改完主配置文件,下面就是虚拟配置文件的修改:
vi/usr/local/apache/conf/extra/httpd-vhosts.conf
增加8080以及8081这两个侦听端口:
仿照下图,做相应的修改:(由于我这里没有配置dns服务器,所以servername这句可以用localhost代替)
说明:上图中配置的ErrotLog以及CustomLog中的文件请确保存在,像我这里8081端口中的ErrotLog以及CustomLog中的文件我还没有建立,所以这里先进入到/usr/local/apache/logs目录下然后创建文件:
另外,虚拟主机中用到的文件根目录以及测试文件也应该相应的创建:(cd/usr/local/apache/htdocs)
mkdir8080
mkdir8081
同时将该目录下的index.html复制到8080以及8081这两个目录下:
cpindex.html8080
cpindex.html8081
然后创建一个文件命名为test.php,在里面添加以下测试内容,用以测试mysql是否能与php协同工作:
将这个文件复制到8080以及8081这两个目录下:
cptest.php8080
cptest.php8081
第九步:Nginx采用反Nginx采用反向代理的方式接收Apache的处理结果
说明:Nginx采用反向代理的方式接收Apache的处理结果,需要先写一些代理的参数,可以将下面的配置保存为proxy_params,以后每个用到proxy_pass的地方都把proxy_params这些参数include进来。
在/etc/nginx/这个目录下新建一个proxy_params文件(touchproxy_params),然后添加下面的代理参数:
附:代理参数的注解
proxy_redirecthttp://$scheme://#重定向
proxy_set_headerHost$host;#转发IP等HTTP头信息
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#与后端发起握手等待响应超时时间
proxy_connect_timeout30;#与后端连接成功后等待响应时间(已进入处理队列等候处理)
proxy_read_timeout60;#后端服务器回传数据时间(后端必须在指定时间内将数据传送完毕)
proxy_send_timeout30;#保存用户的头信息大小
proxy_buffers8128k;#高负载时可请求更大proxy_buffers(一般设为proxy_buffers的两倍)
然后在/etc/nginx/nginx.conf这个文件中用到proxy_pass的地方都把proxy_params这些参数include进来:
下面是我从网上搜来的rewrite规则:(规则要放在配置文件的location/{}外面,server{}里面)
try_files$uri$uri/@apache;
location@apache{
proxy_passhttp://127.0.0.1:80;-----这里的127.0.0.1改为自己的ip地址
includeproxy_params;
}
说明:跟LNMP相比,rewrite规则显得麻烦很多,因为Nginx的rewrite和Apache的rewrite是串行处理的,即Nginx进行rewrite之后,如果处理后的请求被交给Apache,那么Apache又会再根据自己的rewriterule再处理;相反Apache的rewrite结果就不会再交回Nginx处理。所以,避免麻烦的方法是,只让Nginx做rewrite,因为Nginx的rewrite效率比Apache的高。
另外,Nginx的Rewrite功能需要用到PCRE(正式表达式库)可以使用
wgethttp://sourceforge.net/projects/pcre/files/pcre/8.01/pcre-8.01.tar.gz下载pcre源码包,然后编译安装(make,makeinstall)
安装完之后,在nginx的配置参数中加入--withpcre,然后重新编译安装即可。否则会报nginx:[emerg]theusingoftheregex".php$"requiresPCRElibraryin/etc/nginx/nginx.conf:68这样的错,如下图:
第十步:为apache安装rpaf模块
说明:rpaf这个模块用于apache做后端时可以获取访客真实的IP
先下载源码到/usr/local/src这个目录下:
wgethttp://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
解压缩这个源码包:
tar-zxfmod_rpaf-0.6.tar.gz
进入mod_rpaf-0.6这个目录下:
/usr/local/apache/bin/apxs-i-c-nmod_rpaf-2.0.somod_rpaf-2.0.c
这样rpaf模块就安装完成了。
修改httpd主配置文件/usr/local/apache/conf/httpd.conf:
找到LoadModule添加加载rpaf模块的语句:
LoadModulerpaf_modulemodules/mod_rpaf-2.0.so
同时在IfModule添加下面这段:
全部设置完成后重启一下各项服务:
/usr/sbin/nginx启动(/usr/sbin/nginx-sreload重启)nginx服务
servicehttpdrestart重启httpd服务
重启完成后可以输入netstat-lnpt查看下端口是否开启:
其中3306为mysqld的侦听端口,9000为php-fpm进程管理器的侦听端口,80为nginx的侦听端口,8080和8081均为httpd的侦听端口
三.测试结果:
虚拟主机的测试:(8081端口)
在8081端口中关于mysql与php协同工作的测试:
8080端口的测试:
在8080端口中关于mysql与php系统工作的测试:
Nginx侦听的80端口的测试:
附:关于rewrite语法的一些介绍:
rewrite的语法
语法:rewriteregexreplacementflag
默认:none
作用域:server,location,if
这个指令根据表达式来更改URI,或者修改字符串。指令根据配置文件中的顺序来执行。
注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句。
rewrite只是会改写路径部分的东东,不会改动用户的输入参数,因此这里的if规则里面,你无需关心用户在浏览器里输入的参数,rewrite后会自动添加的,因此,我们只是加上了一个?号和后面我们想要的一个小小的参数***https=1就可以了。
nginx的rewrite规则参考:
1~为区分大小写匹配
2~*为不区分大小写匹配
3!~和!~*分别为区分大小写不匹配及不区分大小写不匹
4-f和!-f用来判断是否存在文件
5-d和!-d用来判断是否存在目录
6-e和!-e用来判断是否存在文件或目录
7-x和!-x用来判断文件是否可执行
8last相当于Apache里的[L]标记,表示完成rewrite,呵呵这应该是最常用的
9break终止匹配,不再匹配后面的规则
10redirect返回302临时重定向地址栏会显示跳转后的地址
11permanent返回301永久重定向地址栏会显示跳转后的地址
相关文章推荐
虚拟主机的专业参数,分别都是什么意思?2022-09-09
中非域名注册规则是怎样的?注册域名有什么用处? 2022-01-10
HostEase新年活动促销 美国/香港主机全场低至五折2021-12-28
HostGator下载完整备份教程分享2021-12-28
Flink中有界数据与无界数据的示例分析2021-12-28