我正在尝试使用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日志中会有一个日志输出。
答案 0 :(得分:0)
您在这里配置有误。
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端口,您的后端将很安全。