在端口 80 上运行的 docker 容器的 Nginx 反向代理

问题描述

我的 docker compose 看起来像这样:

version: '3.2'
services:
  mediawiki:
    image: mediawiki:lts
Nginx:
    image: Nginx:stable-alpine
    depends_on: 
      - mediawiki
    volumes:
      - ./Nginx.conf:/etc/Nginx/Nginx.conf
    ports:
      - 80:80
#...

其中 mediawiki 是在 docker 中运行在端口 80 上的 docker 容器,并且似乎没有办法更改端口号。

我正在尝试通过 ngninx 公开 mediwiki 并且 Nginx 配置如下所示:

events {
}
http {
    server {
        listen 80;

        location / {
            client_max_body_size 2M;
            real_ip_header X-Forwarded-For;
            real_ip_recursive on;
            proxy_pass http://mediawiki:80;
        }
    }
}

由于 Nginx 和 mediawiki 都在端口 80 上运行,因此我无法设置 portmap mediwiki 80:80

我尝试将其映射到 mediawiki 下的另一个端口,例如 7001:80 并在 Nginx 配置中将 http://mediawiki:80 替换为 http://mediawiki:7001 但这在端口加载站点 url 时会产生错误的网关错误80.

我该如何解决这个问题?

解决方法

把media wiki的服务端口改成8080,比如 8080:80

在本地 nginx.conf 中将 nginx 端口更改为 7001 并 proxy_pass http://mediawiki:8080;

./nginx.conf:/etc/nginx/nginx.conf

因此,nginx 将在 7001 端口和 80 端口上运行 mediawiki。

version: '3.2'
services:
  mediawiki:
    image: mediawiki:lts
nginx:
    image: nginx:stable-alpine
    depends_on: 
      - mediawiki
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:7001
#...

然后通过 http://mediawiki:80 访问该应用

,

让我们看看我在哪种情况下使用 reverse proxy

version: '3.2'
services:
  mediawiki:
    image: mediawiki:lts
nginx:
    build: .
    image: A_NEW_NAME:VERSION_TAG
    depends_on: 
      - mediawiki
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./wiki.conf:/etc/sites-available/wiki.conf
    ports:
      - 80:80

这应该是您的 wiki.conf 内容:

server {
        listen 80;
        server_name THE_DOMAIN_NAME_OF_YOUR_MEDIAWIKI;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://mediawiki:80;
        proxy_redirect off;

        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

并在您的 Dockerfile 文件所在的目录中添加一个 docker-compose

FROM nginx:stable-alpine
COPY wiki.conf /etc/sites-available/
RUN cd /etc/sites-enabled/ && ln -s /etc/sites-available/wiki.conf

并保留您的 nginx.conf 作为默认值,或自行更改某些值但不要添加任何指令来提供 wiki

您可以将 THE_DOMAIN_NAME_OF_YOUR_MEDIAWIKI 替换为实际域名。就像如果您有 media.com 并且您的 wiki 想要在 wiki.media.com 上访问。

现在您可以运行 docker-compose up -d --build 并查看结果。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...