Apache 和 Nginx 说是当今最流行的两个 Web 服务器一点也不为过,Apache 用户基数大,稳定,兼容性高(比如jsp/php/cgi/python等等),但与 Ngnix 相比,Apache过于臃肿以及对静态文件响应过于缓慢让很多使用者感到头疼,而 Nginx 对于高并发性能出众,Proxy 功能强效率高,占用系统资源少。
但是 Nginx 也有劣势,它在处理 php 脚本时需要通过 php-fpm(FastCGI) 解析,而 php-fpm 不够稳定,经常出现 502 错误,生成相对复杂的页面没有优势,反而会使 php-cgi 进程变为僵尸进程。而 Apache 在高并发时对队列的处理比 FastCGI 更好,并且在处理动态 php 页面时,mod_php 模块也比 php-cgi 模块更稳定更高效。
事实上很多大型的网站都是采用 Nginx 前端 + Apache 后端的服务器架构,这样可以很好地结合了 Nginx 高并发和静态页面高效率以及 Apache 稳定的动态页面处理特点,再也不用担心 Nginx 以 FastCGI 模式运行 PHP 时的502问题和 Apache 处理静态页面过慢、负载过高的问题。
反向代理过程:
Nginx前端,Apache后端过程其实很简单,首先用户访问的是80端口的nginx,然后nginx将静态内容留给自己,其余的转发给非80端口的apache,apache处理完毕后再回传给nginx。
LMAP环境安装
1.安装Apache
# yum -y install httpd
2.安装完成之后打开httpd的配置文件
# vi /etc/httpd/conf/httpd.conf
3.把ServerName前的#去掉,并修改为ServerName localhost 保存后启动httpd
# service httpd start
4.然后访问一下自己的服务器的ip会看到如下Apache的欢迎页
5.安装MySQL
#yum install -y mysql mysql-server
6.安装完成以后启动mysql
#service mysqld start
7.结下来初始化mysql设置账号密码
mysql> select user,host,password from mysql.user; #查询mysql的user表
mysql> drop user ''@localhost;
mysql> update msyql.user set password = PASSWORD('your_password') where user="root"; #更改root密码
mysql> flush privileges; #重新加载一下权限
8.安装PHP
# yum -y install php
# yum -y install php-mysql
9.安装以后重新启动Apache,之后在默认的网站根目录添加个phpinfo.php 文件测试下.
# service httpd restart
10.设置开机启动项
# chkconfig httpd on
# chkconfig mysqld on
11.安装 Nginx 和 PHP-FPM(FastCGI) !此步骤接上,为了避免冲突,先关闭 Apache:
# service httpd stop
12.默认情况下,CentOS 官方 rpm 源是没有 nginx 安装包的,需要手动添加,
# cd /etc/yum.repos.d/
# vi nginx.repo
13.往 nginx.repo 文件里添加如下代码:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch
gpgcheck=0
enabled=1
14.保存后,即可开始安装 Nginx,
# yum -y install nginx
15.安装结束后,启动 Nginx,记得先关闭 Apache: service httpd stop,否则会出现冲突,
# service nginx start
16.浏览器访问一下会出现nginx的欢迎页面.
17.接下来安装 php-fpm 并启动它,用来解析 PHP 脚本,
# yum -y install php-fpm
# service php-fpm start
18.编辑 Nginx 的默认配置文件 default.conf,
# vi /etc/nginx/conf.d/default.conf
19. 把 default.conf 文件中 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 这一行下面的 # 注释去掉,并修改 root 后面的目录为:/usr/share/nginx/html;(此目录为 Nginx 的默认网站目录),修改 SCRIPT_FILENAME 后的参数为:$document_root$fastcgi_script_name; 修改结果如
20.保存退出后,重启 Nginx,
# service nginx restart
21.同样nginx也在默认的页面写个phpinfo看一下
22.注意红框内与上述通过 Apache 解析 phpinfo.php 的区别,此处显示,这里 phpinfo.php 文件是由 FPM/FastCGI 模块解析的。
设置开机启动项
# chkconfig nginx on
# chkconfig php-fpm on
23.至此,LNMP 环境安装完成!
24.打开编辑 Nginx 的默认配置文件:
# vi /etc/nginx/conf.d/default.conf
25.注释掉之前 FastCGI 监听的配置,并添加如下代码:
# proxy the PHP scripts to Apache listening on 127.0.0.1:8080
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080
}
即当 Nginx 接收 http 请求遇到需要解析 php 脚本时,则交给 127.0.0.1:8080 端口来处理,而我们等下配置让 Apache 来监听处理这个端口发来的请求。
最终 Nginx 的配置文件 default.conf 如下,此处保留 Nginx 的默认网站目录 /var/share/nginx/html 不变,可自行修改。
26.接下来打开编辑 Apache 的配置文件:
# vi /etc/httpd/conf/httpd.conf
27.找到 Listen 字段,并改为:Listen 127.0.0.1:8080,让 Apache 来监听这个端口,修改 Apache 的网站根目录为:”/usr/share/nginx/html”,与上述 Nginx 对应的网站目录保持一致,具体的修改细节如下加粗文字所示:
Listen 127.0.0.1:8080
...
ServerName localhost
...
DocumentRoot "/usr/share/nginx/html"
...
"/usr/share/nginx/html">
...
...
28.保存退出编辑,重启 Nginx 服务,并启动 Apache 服务,并确保这两个服务开机自启:
# service nginx restart
# service httpd start
# chkconfig nginx on
# chkconfig httpd on
29.借助于谷歌浏览器的工具我们可以发现,当浏览器向服务器发起 http://192.168.211.132/phpinfo.php 这个 HTTP 请求时,是由 Nginx 接收的,当 Nginx 发现需要处理 PHP 脚本时,则通过 127.0.0.1:8080 端口交给 Apache 处理,PHP 的输出信息也显示了 phpinfo.php 脚本正是由 Apache 2.0 Handler 解析处理的。
30.至此,LNMP + Apache 架构配置完成!