背景
部署开源项目,有多个,想用一个端口,使用location不通路径来区分,帮人定位。
现象
server {
listen 80;
location /ccc/ {
proxy_pass http://localhost:9099/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# proxy_redirect off;
}
}
访问后出现nginx的404,注意这里是nginx的404,不是网站的404
error日志发现去访问了系统文件,但这不是这个项目可能去访问的
"/usr/share/nginx/html/ccc/nginx-logo.png" failed (2: No such file or directory), client: 192.1.2.xxx, server: _, request: "GET /ccc/nginx-logo.png HTTP/1.1", host: "192.1.2.217", referrer: "http://192.1.2.xx/ccc/"
使用其他端口,不是80
发现使用其他端口后,出现正常404,而不是nginx404,并且现象正常了,之所以会有404,因为前端做了页面跳转,而前端的页面跳转是不会自动添加上/ccc/的前缀,也就是页面不存在
为什么80会出现这个问题呢,80是http的默认端口,通过netstat -tlnp | grep 80,发现这个端口哪怕不绑定也有nginx服务,怀疑是其他文件配置了这个端口,最后发现是nginx的默认配置没有被删除
解决
推荐这位同学用不同端口来配置网站,不要在前面加前缀。如果要加前缀,需要改这个开源项目,让前端跳转页面的代码加个前缀。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。