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

时间:2016-06-20 11:13:12

标签: nginx docker ejabberd docker-compose

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

图片 nginx ejabberd:16.04 mysql:5.6 可在我的本地泊坞广告中使用。

以下是我的服务器配置文件,它包含在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;
    }

}

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

我收到错误404。

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

192.168.99.102 是我的泊坞机的IP。

docker-compose exec nginx ping ejabberd

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

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

如果你看到docker-compose.yml,那么ejabberd和mysql连接工作正常,我可以从ejabberd连接到mysql。但是当连接nginx到ejabberd时似乎有一些缺失的部分。

2 个答案:

答案 0 :(得分:1)

问题可能是由于nginx问题。 nginx不会在/etc/nginx/conf.d目录下选择.conf文件。

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

下一个操作项是检查nginx从/etc/nginx/conf.d目录中读取conf文件的原因

答案 1 :(得分:0)

看起来你上游的server部分有点不对。

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