server { server_name xxx; 。。。 ## 前端服务 location ^~ / { root /home/{nginx运行用户}/nginx/html/{静态资源目录}; } location ^~ /{静态资源目录} { root /home/{nginx运行用户}/nginx/html; } ## 后端服务,例如:tomcat、jar包 location ^~ /{后端项目名} { proxy_pass http://{后端服务器ip}:{后端服务端口}; } }
结合下面架构图来说,
但因为有些原因:原共享带宽100M入口转发太多服务(其中有个业务还比较重要,响应时间慢容易被人投诉),带宽不足;其次,该服务器2也配置了很多静态资源目录,简单来说就是:
/home/{nginx运行用户}/nginx/html/ 下面有很多前端服务的目录,有些名字还特别像,容易混淆。
相对来说,服务器1就少很多前端服务的目录了,而且固定带宽80M也非常充足。
所以,在服务器1配置前端静态资源目录,我没有直接用root去匹配,而是用proxy_pass 内网转到另一台nginx服务入口上,架构如下:
server { ## 前端服务 location ^~ / { proxy_pass http://{服务器2的ip}:{服务器2代理的静态资源目录端口}; } location ^~ /{静态资源目录} { proxy_pass http://{服务器2的ip}:{服务器2代理的静态资源目录端口}; } 。。。 }
实际上前端静态目录文件是在服务器2上的,服务器1只起到内网转发功能。
继续。。。
前端开发丢了文件给我,在办公室里大声叫我:加一,弄好告诉我哈~~~
通常这种呼叫,会让整个办公室的人都知道这回事,无形中会让干活的人有种精神压力,通常人在这种高压下,无形中也会提高自己短时间解决问题的能力~~好比我,确实在短时间内定位了问题并解决之,总不能让其他人觉得我专业能力那么菜的(可以发现自己水,但不能让人发现自己水,哈哈哈哈哈哈)
话说,我一开始以为从服务器1(固定带宽80M)配置的。当时配了这个:
location ~ \.txt$ {
root html;
}
然后把那个 txt 文件放到服务器1下: /home/{nginx运行用户}/nginx/html/{静态资源目录}
浏览器访问的时候,报错404
注意,那行URL有一个非常重要的提示信息,直接去服务器2的ip+端口 去找这个txt文件!!
proxy_pass http://{服务器2的ip}:{服务器2代理的静态资源目录端口}
刚好这样也提示我,那个 “location~ \.txt”l 配置在服务器1是错误的
于是我就直接删掉。直接将这个txt文件放到 服务器2 ip + 端口代理的静态资源目录下。
举个栗子:
(1)服务器1(入口)
server {
...
server_name abc.com;
....
location ^~ / {
proxy_pass http://10.10.10.123:3308;
}
location ^~ /ljy { proxy_pass http://10.10.10.123:3308;
}
}
(2)服务器2(ip+端口代理前端静态目录)
server { listen 3308; server_name 10.10.10.123; location / { root /home/{普通用户}/data/ljy; } location ^~ /ljy { root /home/{普通用户}/data; } }
txt 文件放到 服务器2 的 /home/{普通用户}/data/ljy 下即可:
浏览器就能访问啦~~~,不需要加额外的配置匹配 .txt 结尾的文件(location ~ \.txt$ )