【问题标题】:How to setup nginx with docker compose如何使用 docker compose 设置 nginx
【发布时间】:2020-08-17 05:04:47
【问题描述】:

我有 nginx config 和 docker compose,但我无法将它们正确链接在一起。

default.conf:

worker_processes auto;

events { worker_connections 1024; }

http {

    upstream docker_nginx {
        server nginx:6000;
    }

    server {

         location / {
          proxy_set_header   X-Forwarded-For $remote_addr;
          proxy_pass         http://localhost:4000;
          proxy_set_header Host $host;
        }
        
        location /jwt/user/ {
          proxy_set_header   X-Forwarded-For $remote_addr;
          pproxy_pass         http://localhost:4000;
          proxy_set_header Host $host;
        }
    }
}

Docker 撰写:

version: '2'

services:
    reverseproxy:
        image: nginx
        container_name: docker_nginx
        ports:
            - 6000:6000
        volumes:
            - ./services:/default.conf
        restart: always

    jwt:
        build: ./jwt
        image: jwt:1.0
        ports:
            - 4000:4000
        restart: always
        volumes:
            - ./jwt

    

我想监听端口 6000 并将请求路由到端口 4000 上的服务。我尝试运行 http://nginx:6000/http://localhost:6000/ 但我明白了:

This site can’t be reached. The web page at http://localhost:6000/ might be temporarily down or it may have moved permanently to a new web address.
ERR_UNSAFE_PORT

【问题讨论】:

  • 尝试更改端口号而不是 6000 ??
  • @Panther 是的,我试过了,但没有运气
  • 你必须明确告诉 nginx 监听 6000 端口,否则默认为 80,因此你必须在 docker-compose 文件中映射 6000:80

标签: node.js docker nginx docker-compose


【解决方案1】:

让我给你我的repo,你可以查看我的 docker-compose.yml,它使用多个服务并使用 Nginx 代理并协同工作。

link 上,你会找到一个 default.conf 文件,它包含几个 Nginx 上游配置,请看看我是如何在那里使用 docker-compose 服务引用的。

client/ 目录中,我还有另一个Nginx 作为react.js 项目的Web 服务器。

server/ 目录上,它有一个Node.js API,它连接到Redis 和同样由docker-compose.yml 构建的Postgres SQL 数据库。

我认为这个用例可能对您和其他用户有用!

【讨论】:

  • 非常!如果有人拿了这个 repo 并写了一篇关于它的博客来解释这些步骤,那应该会有很大的帮助。如果您对组合文件与多个服务和 Nginx 的组合不是很熟悉,这是一个深入研究
  • 很好 @Nebulosar 感谢您的评论,本周我将尝试为其他主题写一篇关于介质的文章,但我将尝试帮助 docker-compose 以及 nginx 中的多个服务未来。
  • 这看起来很棒,至少有一点文档(至少对于那些可能不知道他们需要运行docker-compose up 才能让它运行的人来说)会更好。可能是一个 NGINX 菜鸟问题,但您为什么不在一个文件中定义所有 NGINX 配置,然后由multi-docker_nginx 服务处理?或者在./client 中有一个好处?
  • 您好 Berkman,一个简单的答案可能是解耦服务,您首先通过 NGINX 传递流量,然后创建与其他主机的上游连接。
【解决方案2】:

很少有配置错误的东西。

  1. 配置文件映射到错误位置

应该是./services/default.conf:/etc/nginx/nginx.conf

  1. 你必须明确告诉nginx(在conf文件中)监听6000端口或以其他方式将你的6000端口映射到nginx内部的80端口(nginx默认)"6000:80"

  2. 是的,正如其他答案中所建议的那样,您必须将其代理到 localhost:4000,而不是代理到 jwt:4000

有关 docker 中 nginx 的更多信息,请参阅文档https://hub.docker.com/_/nginx/

【讨论】:

    【解决方案3】:

    - ./services:/default.conf 是否应该类似于 - ./default.conf:/etc/nginx/sites-enables/default.conf

    还可以尝试将proxy_pass http://localhost:4000; 替换为proxy_pass http://jwt:4000;,您可能不需要upstream 部分。

    “proxy_pass”是 docker compose 创建的网络中代理服务的地址 - 每个服务的域与其在docker-compose.yml中的名称相同

    我没用过upstream,但是如果你想用,我觉得你得放这个

    upstream docker-jwt {
      server jwt:4000;
    }
    
    # and
    
    proxy_pass         http://docker-jwt;
    

    但正如我在上面所说的,我会跳过它,只是将 http://jwt:4000 作为代理地址。

    您这里似乎也有错字:pproxy_pass http://localhost:4000;

    但是如果你留下错字,然后查看 docker compose 日志,你可能会看到来自 nginx 的错误,这意味着你成功映射了配置文件

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 2018-02-25
      • 2017-08-20
      相关资源
      最近更新 更多