【发布时间】:2021-03-16 02:06:41
【问题描述】:
我在 docker 中有 2 个服务后端和前端 (nodejs),它们通过 nginx(也在 docker 中)进行处理。
Nginx 配置:
server {
listen 80;
listen 443 http2;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
server_name example.com;
location /backend/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://backend-admin:2082/;
}
location ^~ / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://frontend-admin:8080;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|ttf|svg|js)$ {
expires 2d;
add_header Cache-Control public;
}
}
我使用 nginx 位置 /backend/ 将所有请求代理到 example.com/backend/... 到 example.com:2082/... 那个 nodejs 正在监听。
主要问题是我的来自 proxy_pass backend-admin:2082 nginx 的静态文件不想处理。
我的后端服务/uploads/events/1.jpg 中有上传图像的路径,如果我像http://example.com:2082/uploads/events/1.jpg 一样打开它,它就可以工作。但是通过 nginx 它不会http://example.com/backend/uploads/events/1.jpg。我认为这里的 nginx 事件不会尝试通过 proxy_pass 到达图像。
有什么想法吗?
【问题讨论】:
-
/位置是否正常工作?您可以尝试 /backend/ 端点而不尝试访问特定文件(例如没有 .jpg)吗?
-
除静态文件外一切正常。后端位置的静态文件。来自前端的静态文件,例如:example.com/build/build.js - 有效。
-
尝试删除结尾斜线
proxy_pass http://backend-admin:2082/;