【问题标题】:How to forward upstream from nginx to upstream server如何将上游从 nginx 转发到上游服务器
【发布时间】:2017-08-10 05:46:01
【问题描述】:

我正在尝试在 docker 中使用 nginx 反向代理 ejabberd 连接管理器。

以下是我的 docker-compose 文件

version: '2'
services:
  nginx:
    image: nginx
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - ejabberd
    links:
      - ejabberd
  ejabberd:
    image: ejabberd:16.04
    depends_on:
      - mysql
    ports:
      - "5280:5280"
    links:
      - mysql
  mysql:
    image: mysql:5.6
    ports:
      - "3306:3306"

图像 nginxejabberd:16.04mysql:5.6 在我的本地 docker 中可用。

以下是我的服务器配置文件,它包含在 nginx.conf 文件中

upstream ejabberd-server {
        server ejabberd:5280;
}
server {
    # regular silverstripe things here

    # location should match your JabberPage::BOSHUrl
    # with a leading slash
    listen 80;
    #server_name oops.hereim.co

    location /http-bind {
        # Local ejabberd with http-bind
        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_pass http://ejabberd-server;
    }

}

但是当我尝试访问 url http://192.168.99.102/http-bind

我收到错误 404 未找到。

我在上面的配置中遗漏了什么吗?

192.168.99.102是我的docker机器的IP。

docker-compose exec nginx ping ejabberd

上面的命令返回一个回复。

必须将上游设置为托管 ejabberd,因为 nginx 和 ejabberd 不在同一个 ejabberd 容器上。

如果您看到 docker-compose.yml,ejabberd 和 mysql 连接工作正常,我可以从 ejabberd 连接到 mysql。但是在将 nginx 连接到 ejabberd 时似乎有一些缺失。

【问题讨论】:

  • 您的 ejabberd-server 是否已启动并正在运行?
  • 是的,ejabberd 服务器已启动并正在运行。
  • 这将有助于隔离多个移动部件的问题。 192.168.99.102 正在与 nginx 交谈。 127.0.0.1:5200 是在培养 ejabberd 吗? docker-compose exec nginx ping ejabberd 有回应吗?
  • @BMitch 我已编辑问题以获取更多信息。命令docker-compose exec nginx ping ejabberd 返回响应
  • 你没有提到你是否能够直接与 ejabberd 或 nginx 对话,这是需要确定哪些是抛出 404 的。

标签: nginx docker ejabberd docker-compose


【解决方案1】:

这个问题可能是由于 nginx 问题。 nginx不拾取/etc/nginx/conf.d目录下的.conf文件。

我必须更改文件 /etc/nginx/sites-enabled/default 并输入该文件内的位置。这解决了我的这个问题。

下一个动作是检查nginx为什么不从/etc/nginx/conf.d目录读取conf文件

【讨论】:

    【解决方案2】:

    看起来您在上游的 server 部分有点错误。

    你可以试试server 127.0.0.1:5280; 代替server ejabberd:5280; 吗?

    【讨论】:

    • nginx 和 ejabberd 在不同的 docker 容器上运行,因此 localhost 或 127.0.0.1 将没有用。
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2022-01-24
    相关资源
    最近更新 更多