我想反向代理托管在 Docker 容器内的站点。但 nginx 运行在 Linux VM 的容器之外。该站点运行在 docker IP http://172.17.0.3 和端口 3001。
所以我已经配置了我的 nginx 反向代理,如下所示
location /uptime {
proxy_pass http://172.17.0.3:3001;
proxy_read_timeout 1d;
}
但问题是,如果点击 HTTP://172.17.0.3:3001 URL,它总是重定向到 /dashboard 端点。因此更改了上面的配置,使其如下所示:
location /dashboard {
proxy_pass http://172.17.0.3:3001;
proxy_read_timeout 1d;
}
现在它可以工作了,但找不到一些特定的文件,例如manifest.json和一些实际位于容器内的资产文件。它只是抛出一些这样的错误
https://my_site_url/manifest.json 404 error not found
https://site_url/assets/index-ClrZ0SaR.css not found and so on.
我已经尝试了以下配置,但它不起作用
location /dashboard {
proxy_pass http://172.17.0.3:3001;
proxy_read_timeout 1d;
alias /app/dist/assets;
try_files $uri index.html;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript image/x-icon;
}
但是,还是没有成功。抱歉,我是 nginx 新手。可能正在做一些愚蠢的配置。
您似乎面临着在 Nginx 反向代理配置中提供静态文件和正确处理 URL 重定向的问题。
这是修改后的 Nginx 配置,可解决静态文件服务和 URL 重定向问题:
location /dashboard {
proxy_pass http://172.17.0.3:3001;
proxy_read_timeout 1d;
# Handle static files
location /dashboard/assets {
alias /app/dist/assets;
try_files $uri $uri/ =404;
}
# Handle URL redirects
rewrite ^/dashboard/(.*)$ /$1 break;
}
确保将
/app/dist/assets
替换为 Docker 容器内包含静态文件的目录的实际路径。
更新 Nginx 配置后,不要忘记重新加载或重新启动 Nginx 以使更改生效:
sudo systemctl reload nginx