【问题标题】:Nginx Reverse-Proxy configuration with Docker Containers使用 Docker 容器配置 Nginx 反向代理
【发布时间】:2021-09-30 05:59:24
【问题描述】:

几天以来,我一直在玩 NGINX 和 Docker。我尝试将 NGINX 配置为其他服务的代理,但我被堆叠了。让我解释一下我的问题。首先,我有几个在 Ubuntu Server 20 LTS 上运行的 Docker 容器,它们一起配置在一个名为 services 的自定义网络中。

docker network create -d bridge --subnet=172.18.0.0/16 services

然后我为 MySQL、PhpMyAdmin、Apache2/PHP7 和 Nginx 运行一个容器。以下是我创建容器的命令:

docker run -d --name mysql --restart=always \
--net services --ip 172.18.0.3 \
-e MYSQL_ROOT_PASSWORD=xxxx \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/conf:/etc/mysql \
mysql:5.7.32

docker run -d --name phpmyadmin --restart=always \
-p 8000:80 --net services --ip 172.18.0.2 \
-e PMA_HOST=172.18.0.3 \
-e MYSQL_ROOT_PASSWORD=xxxx \
-v /home/sql:/etc/phpmyadmin/sql \
-v /home/phpMyAdmin.config.inc.php:/etc/phpmyadmin/config.user.inc.php \
phpmyadmin/phpmyadmin:4.8

docker run -d --name lamp-7.4 --restart=always \
-p 8002:80 -p 587 -p 25 -p 465 -p 443 -p 3306 --net services --ip 172.18.0.99 \
-v /home/htdocs:/var/www/html \
-v /home/apache:/etc/apache2 \
-v /home/php:/usr/local/etc/php \
php:7.4.15-apache

docker run -d --name nginx --restart=always \
-p 80:80 -p 587 -p 25 -p 465 -p 443 -p 8002 -p 8000 -p 8090 --net services --ip 172.18.0.100 \
-v /home/nginx:/etc/nginx/conf.d \
nginx:1.19.7

只要我通过服务器 IP(而不是容器 IP)直接连接,每个容器都可以正常工作。可以说我是:213.13.9.121。在运行 2 个名为 site 和 site2 的 WordPress 安装的 Apache 服务器上。这意味着我通过 URI 到达那些安装

可以通过 URI 访问 PhpMyAdmin:

现在我的域 sample.org 可以通过 Nginx 容器访问。我的 Nginx 配置文件 default.config:

server {
    listen       80;
    listen  [::]:80;
    server_name  sample.org www.sample.org;
 
    charset UTF-8;
    gzip on;
    
    access_log off;
    rewrite_log on;
    error_log /var/log/nginx/error.log error;

    location /dba/ {
        proxy_buffering off;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://213.13.9.121:8000/;    
        proxy_read_timeout 60;
    }
}

我无法找到可以通过以下 URI 访问服务的配置:

我已经在我的提供商(IONOS、云服务器)配置中打开了所有定义的端口,并且域缓存设置为 1 分钟。

我尝试的每个代理配置变体都无法正常工作。在最好的情况下,我能够看到http://sample.org/dba/ 的登录页面,但登录后我得到了一个重定向到sample.org 的路径,而没有路径/dba/。在我手动添加它之后它正在工作。在玩了几天没有任何成功之后,我很绝望,也有点失落。因为如果我进行了正确的重定向,那么我需要启用 SSL。我从我的提供者那里得到的证书我真的希望在这里能找到一些帮助。非常感谢。

【问题讨论】:

  • 对于 phpMyAdmin,您可能必须将 PMA_ABSOLUTE_URI 设置为 http://sample.org/dba(请参阅“反向代理背后的用法”here 部分)。

标签: docker nginx configuration reverse-proxy


【解决方案1】:

不幸的是,使用 NGINX 我一事无成。在尝试了几种方法,阅读了大量教程后,我切换回 Apache 2 HTTP Server。 一开始 NGINX 的配置文件似乎对用户更友好,但是使用 Docker 作为反向代理的应用程序失败了。即使我没有找到专家的专业支持。我的结论是:不要有任何压力。也许几年后情况会发生变化,但现在对我来说不是一个选择。

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 2020-09-10
    • 2018-03-20
    • 2019-05-04
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多