如何解决Nginx作为Docker容器内的反向代理
我正在尝试使用nginx作为容器内的反向代理,指向不同的PHP应用程序容器。 我的PHP容器从外部端口8080获取请求并将其转发到内部80。我希望我的Nginx能够监听端口80并将请求转发到端口8080上的PHP容器,但是在重定向请求时遇到问题。
我的nginx Dockerfile:
FROM nginx:latest
COPY default.conf /etc/nginx/conf.d/default.conf
我的nginx default.conf:
server {
listen 80;
error_page 497 http://$host:80$request_uri;
client_max_body_size 32M;
underscores_in_headers on;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass http://php-container:8080;
proxy_read_timeout 90;
proxy_http_version 1.1;
}
}
我尝试使用上述yml文件通过docker-compose部署它,但是当CURL到nginx时遇到相同的错误。
当CURL到HTTP:// localhost:8080(PHP应用程序)以及HTTP:// localhost:80(nginx)时,docker-compose日志中会有一个日志输出。
解决方法
您在这里配置有误。
nginx (主机:80->容器:8080)
php-app (主机:8080->容器:80)
Nginx无法到达另一个容器的“本地主机”,因为它是另一个容器网络。
我建议您创建一个docker网络--network
并将两个容器都放置到网络中。然后在Nginx配置中,您可以按名称引用php-app容器。
proxy_read_timeout 90;
proxy_redirect http://localhost:80/ http://php-container:8080/;
此外,您只能公开Nginx端口,您的后端将很安全。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。