【问题标题】:NGINX reverse proxy - Docker Swarm - proxy_pass not workingNGINX 反向代理 - Docker Swarm - proxy_pass 不起作用
【发布时间】:2019-05-03 03:44:38
【问题描述】:

今天我重申你的专业知识,我是一个新手,遇到一些麻烦,让我头疼。

我正在使用 TileServerGL 服务器,该服务器在 swarm 的 docker 容器中提供 OpenStreet.org 地图。这个服务器工作正常,如果端口 80 被暴露并重定向到,比如说 8080,我可以在 [IP Docker Swarm]:8080 访问它的内容。

现在我需要在这个容器前面添加一个反向代理来增加一些安全性(但还没有,首先我需要让反向代理工作),所以我在 docker-compose.yml 中添加了一个 Nginx 容器文件,我正在尝试正确配置 nginx 反向代理的更简单版本,但没有太大成功。

我试过了:

  • 使用 docker-compose up –build 在本地运行它
  • 在我的本地机器中的集群中运行:docker stack deploy -c docker-compose.yml lab
  • 在 Vbox 机器中运行:docker stack deploy -c docker-compose.yml lab

域解析工作正常:

  • 我的游泳IP是:192.168.1.105
  • 在 etc/hosts 我有:192.168.1.105 app.io

当我在浏览器中打开 http://app.io 时,我会看到默认的 Nginx 欢迎页面。到目前为止,一切都很好。但是当我点击http://maps.app.io 时,我仍然会看到相同的默认欢迎页面。

Nginx 服务器日志:

10.255.0.2 - - [01/Dec/2018:00:55:59 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "-"

在阅读我在互联网上找到的每篇文章、文章和教程之前,我不会寻求您的帮助。在我看来,“nginx.conf”文件是正确的,但现实告诉我,我无疑是错的,对自己的错误视而不见。非常感谢您的帮助。

我在跑步:

  • linux Mint 19 塔拉
  • Docker 版本:Docker 版本 18.09.0,构建 4d60db4
  • Docker 机器版本:docker-machine 版本 0.16.0,build 702c267f

docker-compose.yml 文件:

version: "3.5"

networks:
  nginx-net:
    driver: overlay

services:
  maps:
    image: xxxx/xxxx:mapstiles
    volumes:
      - ./server_mapstiles/app/data:/data
    networks:
      - nginx-net
    deploy:
      restart_policy:
        condition: on-failure
      replicas: 1

  nginx:
    image: nginx:1.15.7
    container_name: nginx
    ports:
      - "80:80"
    networks:
      - nginx-net
    volumes:
     - ./server_nginx/nginx.conf:/etc/nginx/proxy.conf:ro
    deploy:
      restart_policy:
        condition: on-failure
      replicas: 1
    depends_on:
     - maps

nginx的配置文件是:

server {
        listen          80;
        server_name     maps.app.io;

        location / {
                proxy_pass  http://:maps:80;
                proxy_redirect     off;
                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-Host $server_name;
                resolver        127.0.0.11;
        }
}

【问题讨论】:

    标签: docker nginx nginx-reverse-proxy


    【解决方案1】:

    你的 proxy_pass 指令有一些令人讨厌的无效语法。

    proxy_pass http://:maps:80; 不是有效的代理传递目标,http://:maps:80 将失败,因为// 之后的第一个冒号。

    尝试proxy_pass http://maps:80;,但请记住using a hostname to define a location/proxy pass destination/etc. 的NGINX 配置陷阱

    【讨论】:

    • 托马斯,感谢您的帮助。我想当一个人凝视太多时,一个人就会停止看。关于你提到的 NGINX 配置陷阱,我很怀疑。使用 Docker 我知道 Docker 守护进程充当 DCHP 服务器,并且名称解析是基于容器名称执行的。内部 IP 可能会根据 Docker 机器或重新启动时发生变化。在这种情况下应该如何配置? 1)查找容器 IP 并将其传递给 NGINX 配置文件,如文档中所建议的那样,或者 2)我是否仍然使用容器名称,在 Docker 中中继?
    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2019-06-15
    • 1970-01-01
    • 2016-07-22
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多