首页 > 解决方案 > NGINX 反向代理 - Docker Swarm - proxy_pass 不起作用

问题描述

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

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

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

我努力了:

域解析工作正常:

当我在浏览器中打开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”文件是正确的,但现实告诉我,我无疑是错的,对自己的错误视而不见。我会非常感谢你的帮助。

我在跑:

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;
        }
}

标签: dockernginxnginx-reverse-proxy

解决方案


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

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

尝试proxy_pass http://maps:80;但请记住使用主机名定义位置/代理传递目标/等的 NGINX 配置陷阱。


推荐阅读