注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

有情况

学会慢生活,拥有平常心……

 
 
 

日志

 
 

Nginx做网站前端处理静态页面,Apache后端处理PHP页面  

2013-07-26 09:37:42|  分类: 网站相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这种结构俗称LNAMP(Linux+Nginx+Apache+MySQL+PHP),结合了Nginx高并发和静态页面高效率以及Apache稳定的动态页面处理特点。
这样一来再也不用担心Nginx以FastCGI模式运行PHP时的502问题,也不必担心Apache处理静态页面过慢,负载过高的问题。

请先自己搭建好LAMP环境,
如果你没有按我的步骤搭建LAMP环境,可能会出现一些错误。

一、使Apache监听非80端口
首先先把Apache的中心主机取消掉,仅使用虚拟主机。
在httpd.conf里把Listen 80改成Listen 0.0.0.0:81
反正你加了虚拟主机之后中心主机也自动失效的,除非你们用的不是同一个端口。Apache文档上说,“如果你想在现有的web服务器上增加虚拟主机,你必 须也为现存的主机建造一个定义块。这个虚拟主机中ServerName和DocumentRoot所包含的内容应该与全局的ServerName和 DocumentRoot保持一致。还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。”

然后把最底下那个Include conf/extra/httpd-vhosts.conf前面的注释块去掉。
编辑conf/extra目录下的httpd-vhosts.conf文件,参考一下这个配置自己配置一个虚拟主机:

NameVirtualHost 127.0.0.1:81
<VirtualHost 127.0.0.1:81>
    ServerAdmin webmaster@domain.com
    DocumentRoot "/home/wwwroot/domain.com"
    ServerName domain.com
    ErrorLog "/home/wwwlogs/domain.com/error_log"
    CustomLog "/home/wwwlogs/domain.com/access_log" common
</VirtualHost>

二、下载并安装PCRE
Nginx的Rewrite功能需要用到PCRE(正式表达式库),如果你不需要rewrite功能,可以跳过此步,然后在下一步的配置中加上--without-http_rewrite_module
最新版本请查看官方网站http://pcre.org/

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.13.tar.gz
tar zxvf pcre-8.13.tar.gz
cd pcre-8.13
./configure
make
make install

三、下载并配置Nginx
进入这个网站http://nginx.org/en/download.html,下载最新版本Nginx。
然后在root目录下wget。

wget http://nginx.org/download/nginx-1.1.6.tar.gz
tar zxvf nginx-1.1.6.tar.gz
cd nginx-1.1.6
./configure --prefix=/usr/local/nginx --user=www --group=www \
--with-http_stub_status_module
make
make install

有关安装时的参数可以参考http://wiki.nginx.org/InstallOptions

你可以使用这几个命令完成对应的操作

/usr/local/nginx/sbin/nginx (启动)
/usr/local/nginx/sbin/nginx -s stop (停止)
/usr/local/nginx/sbin/nginx -s reload (重启)

咱真的不会看shell代码,网上流传很多nginx的开机脚本但是不放心用。还是老老实实在rc.local文件里增加一条/usr/local /nginx/sbin/nginx命令达到开机启动的效果。rc.local文件位于/etc/rc.d/目录下(CentOS5.5)。
在root下建立一个软连接文件方便我们对nginx重启之类的操作

ln -s /usr/local/nginx/sbin/nginx /root/nginx

在nginx安装目录下的conf文件夹里建立一个proxy_apache文件,内容如下:


#转发IP等HTTP头信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#与后端发起握手等待响应超时时间
proxy_connect_timeout 30;#与后端连接成功后等待响应时间(已进入处理队列等候处理)
proxy_read_timeout 60;#后端服务器回传数据时间(后端必须在指定时间内将数据传送完毕)
proxy_send_timeout 30;#保存用户的头信息大小
proxy_buffer_size 4k;#用于读取后端应答的缓冲区数目和大小,默认情况为分页大小,根据系统不同可为4K或8K
proxy_buffers 16 32k;#高负载时可请求更大proxy_buffers(一般设为proxy_buffers的两倍)
proxy_busy_buffers_size 64k;#临时缓存文件夹大小(proxy_temp)
proxy_temp_file_write_size 128k;#允许请求的最大单个文件大小
client_max_body_size 10m;

#如果一个请求的body比这个缓存还要大,那么整个body或它的一部分将被写入一个临时文件
#(简单地说就是POST一个比这个缓存大的文件,会暂存到client_body_temp文件夹中)
#默认为两个页面大小,根据系统不同可能是8K或16K
#若一个请求的Content-Length header比这个缓存小,它将被使用到缓存里。
#因此Nginx将不会为每个请求分配一个这么大的缓存。
client_body_buffer_size 128k;

修改nginx.conf文件,主要是改server段。
默认有个Location ~{root /home/wwwroot/;index index.html}。把root和index移到Location的外面来,参考以下设置:


……略……
http{
……略……
    server{
        listen       80;
        server_name  www.mihua.net;
        root   /home/wwwroot/www.你的域名.com;
        index  index.html index.htm index.php;
        #在根目录下若找不到文件(一般为Rewrite),则提交给后端
        #记得有代理的地方包含一下刚才保存的proxy_apache文件。
        location / {
            try_files $uri $uri/ @apache;
        }
        location @apache {
            proxy_pass http://127.0.0.1:81;
            include proxy_apache;
        }

        #PHP文件交给后端处理
        location ~ \.php$ {
            proxy_pass   http://127.0.0.1:81;
            include proxy_apache;
        }

        #图片、CSS、JS交给Nginx处理,缓存到本地
        location ~* \.(jpg|jpeg|gif|png)$ {
             access_log  off;
             expires  30d;
        }

        location ~* \.(js|css)$ {
             access_log  off;
             expires  1d;
        }

        #禁止htaccess文件,在上面已经把它提交给Apache处理
        location ~ /\.ht {
            deny  all;
         }
    }
}

四、为Apache安装rpaf模块,获取访问真实IP地址
到此为止其实APACHE和NGINX已经可以工作了,不过这样在APACHE里面获取的访客IP地址永远是127.0.0.1
rpaf模块下载地址请移步 http://stderr.net/apache/rpaf/
到08年之后就没有再更新了,应该很稳定不会再更新了,可以直接按着下面的地址wget

#回到root目录
cd
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar zxvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6.tar.gz

然后在Apache的配置文件httpd.conf里LoadModule最后一行之后加上

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For

上面的127.0.0.1是你要监听的web服务器IP,也就是请求从哪里来的。这里我们使用Nginx的127.0.0.1(本地)
如果你还有别的服务器提交请求给Apache,可以在后面加上它的IP
如:

RPAFproxy_ips 127.0.0.1 10.0.0.1

保存文件,重启一下apache和nginx服务器。

service httpd restart
/root/nginx -s reload

五、htaccess文件伪静态
到目前为止,如果你的地址是动态的话就没问题,但是如果你用到了htaccess作伪静态,整个画面的css/js/img将全部不能显示。
查看原代码,发现他们的地址全都变成了http://127.0.0.1:81/...这样的。
为了改变这种情况,我们需要要nginx.conf里用到proxy_redirect。

之后应该把Location里的两段改成这样:

location @apache {
 proxy_pass http://127.0.0.1:81;
 include proxy_apache;
 proxy_redirect http://127.0.0.1:81/ http://www.mihua.net/;
}

#PHP文件交给后端处理
location ~ \.php$ {
 proxy_pass http://127.0.0.1:81;
 include proxy_apache;
 proxy_redirect http://127.0.0.1:81/ http://www.你的域名.com/;
}
  评论这张
 
阅读(255)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016