如何将上游从nginx转发到上游服务器

How to forward upstream from nginx to upstream server

我正在尝试在 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

以上命令returns回复

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

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

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

你能试试 server 127.0.0.1:5280; 而不是 server ejabberd:5280; 吗?

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

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

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