Nginx作为Docker容器内的反向代理

时间:2020-11-05 09:53:05

标签: docker nginx docker-compose nginx-reverse-proxy

我正在尝试使用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时遇到相同的错误。 enter image description here

当CURL到HTTP:// localhost:8080(PHP应用程序)以及HTTP:// localhost:80(nginx)时,docker-compose日志中会有一个日志输出。 enter image description here

但是当CURL到nginx时,出现了以上错误: enter image description here

1 个答案:

答案 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端口,您的后端将很安全。