每周一坑-小程序文件nginx入口验证
话说我们系统要申请个微信小程序,其中有一步需要验证码域名管理所有权(不知道是不是这样叫哈),简单来说就是开发会给一个txt文件过来,然后需要在域名根目录(非二级目录)下访问到这个文件。例如:abc.com下要申请小程序,这个文件叫ljy.txt,要能在浏览器访问到:https://abc.com/ljy.txt
平时做的nginx虚拟主机文件,静态资源配置一般直接直接用“root 路径”,后端服务用proxy_pass去转发
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
非常重要的提示信息,直接去服务器2的ip+端口 去找这个txt文件!!
proxy_pass http://{服务器2的ip}:{服务器2代理的静态资源目录端口}
配置在服务器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$ )