使用 Docker 容器的 Nginx 反向代理配置

时间:2021-07-23 03:05:25

标签: docker nginx configuration reverse-proxy

这几天我在玩 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 访问这些安装

PhpMyAdmin 可通过 URI 访问:

现在我的域 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。我从我的提供商那里得到的证书我真的希望能在这里找到一些帮助。非常感谢提前。

0 个答案:

没有答案