前言
之前介绍过Nginx与Apache2共存,但是也只是Nginx服务器作为前端,Apache2服务器作为后端,web页面请求由Nginx服务来进行转发出来,在根本上没有任何意义,不如直接使用Apache2。
我们的目的不是把所有的内容都由Apache2完成,再由Nginx转发,而是将静态页面请求由Nginx服务器自己来处理,动态页面请求则转发给后端的Apache2服务器来处理。
但是在网上查了很多资料,要么就是404要么就是重定向太多导致网页无法打开,很难找到一篇很实用的文章。
这边结合网上的相关资料,再基于自己的理解,实践出一份至少表面看上去是合格的教程。
步骤
之前的Nginx的配置文件为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| server { listen 80; index index.html index.htm index.nginx-debian.html index.php; server_name test.xxx.com;
location / { proxy_pass_header Server; proxy_pass http://127.0.0.1:8081; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log /var/log/nginx/test.xxx.com-access.log; error_log /var/log/nginx/test.xxx.com-error.log; }
|
查看目前服务器
打开Chrome按F12
,输入网址,可以看到目前还是由Apache2完成所有请求的。
配置静态资源
修改Nginx的配置文件,在 location / { }
中加入你需要由Nginx的页面资源。
1 2 3 4
| location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /var/www/web; expires 3d; }
|
最终配置为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| server { listen 80; index index.html index.htm index.nginx-debian.html index.php; server_name test.xxx.com;
location / { proxy_pass_header Server; proxy_pass http://127.0.0.1:8081; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /var/www/web; expires 3d; } } access_log /var/log/nginx/test.xxx.com-access.log; error_log /var/log/nginx/test.xxx.com-error.log; }
|
保存退出,重启Nginx。
成果
清空浏览器缓存后,重新打开浏览器,可以看到首页php还是Apache2,图片和css等都已经由Nginx进行处理了。
1. 首页index.php服务器为Apache2
2. jpg资源的服务器为Nginx
3. css资源的服务器为Nginx
结论
其实还有一种是 负载均衡 的设置,但是资源有限,无法深入研究。
至此我个人对这篇文章还是比较满意的,网上的太多教程都是原地照抄,缺少真正的实践,然后一传十、十传百,最终结果总是与自己的期望不符。记录一下,也可能是以后懂得多了再来看这篇文章,又会发现些错误的或者可以改进的地方~