使用Nginx无法将请求从一个容器代理到另一个容器
问题解决步骤
1. 确保Rust服务监听正确地址
Rust Warp服务默认可能仅绑定到127.0.0.1,导致其他容器无法访问。修改Rust代码,让服务监听0.0.0.0:8000:
use warp::Filter; #[tokio::main] async fn main() { let hello = warp::path!("hello" / String) .map(|name| format!("Hello, {}!", name)); warp::serve(hello) .run(([0, 0, 0, 0], 8000)) // 改为0.0.0.0允许容器外部访问 .await; }
重新构建并启动Rust服务容器。
2. 修正Nginx代理配置
你的Nginx配置未正确设置转发规则。创建或修改./nginx/nginx.conf.prod为以下内容:
server { listen 80; server_name localhost; location / { proxy_pass http://rust-warp:8000; 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; } }
该配置会将所有80端口的请求转发到Docker Compose网络内的rust-warp服务8000端口。
3. 验证Nginx配置有效性
进入Nginx容器检查配置语法:
docker exec -it rust-warp-nginx nginx -t
若输出test is successful,则配置无误,重启Nginx容器生效:
docker restart rust-warp-nginx
4. 测试代理连通性
访问http://localhost,此时应显示Rust API的返回内容而非Nginx默认页面。若仍有问题:
- 检查Rust服务日志是否收到请求
- 在Nginx容器内测试与Rust服务的连通性:
docker exec -it rust-warp-nginx curl http://rust-warp:8000
若curl能返回API内容,说明网络连通正常,问题可能出在浏览器缓存或Nginx配置重载不彻底。
内容的提问来源于stack exchange,提问作者rustscr1pt
相关产品推荐
相关产品推荐

