nginx 由于其高效的并发处理能力,而开始被越来越多的人接受和认可,现在很多网站已经完全用nginx代替apache来处理静态 页面,但是动态页面的处方面,apache还是有着自己独到之处的。
下面说下何为反向代理,以及为何进行反向代理。
按照百科的介绍:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。说得简明点,按照我的理解,反向代理就是一个服务器负责接收外网的请求,但自己不处理,而是告诉其他的内网服务器去处理,并把人家处理的结果返回给用户。从用户角度来看,请求就是这个代理服务器来处理的,实际上他就是转发了一下,返回人家的结果。
那么用反向代理的作用有是什么呢?按照百科的说法:
- 可以提供从防火墙外部代理服务器到防火墙内部安全内容服务器的加密连接。
- 可以允许客户机安全地连接到代理服务器,从而有利于安全地传输信息(如信用卡号)。
- 安全反向代理会造成各安全连接因加密数据所涉及的系统开销而变慢。但是,由于 SSL 提供了高速缓存机制,所以连接双方可以重复使用先前协商的安全参数,从而大大降低后续连接的系统开销。
下面介绍如何进行反向代理,这里给大家一个例子,感兴趣的可以自己试验一下。
首先安装nginx并绑定到80端口,安装apache绑定监听8080端口。然后设置nginx服务器目录为www_nginx,apache服务器的目录为www_apache,分别在2个目录中新建一个index.html文件,里面分别写上nginx,apache2个单词就足矣。
然后我们在配置nginx的配置文件,一般为nginx.conf这个文件,修改里面的配置信息。
location / {
proxy_pass 127.0.0.1:8080;
}
同时启动nginx和apache,访问127.0.0.1的时候,你会发现一个神奇的事情,尽然输出apache,明明nginx服务器目录里面没有文件,怎么会输出内容呢,并且输出的是apache内容呢,那是因为nginx进行了反向代理,去找apache监听的8080端口要内容,然后apache返回给他处理后的结果。
这是一个简单的例子,实际中我们可以让nginx处理静态页面,处理图片,css, js等文件,而让apache处理动态文件。
同理,对于动态的php请求,我们可以这样修改:
location ~ \.php$ {
#8080端口是php-fpm的监听端口
proxy_pass 127.0.0.1:8080;
}
这样只是php文件才交给apache处理,其他的还是nginx来处理。