前言

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

结论

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

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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。