前言

之前介绍过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。

1
systemctl restart nginx

成果

清空浏览器缓存后,重新打开浏览器,可以看到首页php还是Apache2,图片和css等都已经由Nginx进行处理了。

1. 首页index.php服务器为Apache2

2. jpg资源的服务器为Nginx

3. css资源的服务器为Nginx

结论

其实还有一种是 负载均衡 的设置,但是资源有限,无法深入研究。

至此我个人对这篇文章还是比较满意的,网上的太多教程都是原地照抄,缺少真正的实践,然后一传十、十传百,最终结果总是与自己的期望不符。记录一下,也可能是以后懂得多了再来看这篇文章,又会发现些错误的或者可以改进的地方~