Moodle + Docker 反向代理与 Apache/NGINX

问题描述 投票:0回答:2

我认为这正在成为一个永恒的问题,可能需要一个好的解决方案,因为 Docker 越来越流行。

当尝试将代理反向到 Docker 容器时,我的问题出现了,该容器使用 bitnami/moodle 图像公开端口 (8080)。我已经尝试了几天互联网上所有可能的解决方案,但没有任何帮助......

更好的方法接近解决方案,但我仍然得到没有静态文件或消息告诉的页面

'reverse proxy enabled so the server cannot be accessed directly. please contact the server administrator.'

我已经尝试过 NGINX 和 Apache2,因为我不介意使用哪一个。这里是容器中 Moodle 实例的配置和

config.php

阿帕奇2

    <VirtualHost *:80>
          ServerName my.domain.com

          ProxyRequests Off
          ProxyPreserveHost On

          ProxyPass / http://127.0.0.1:8080/
          ProxyPassReverse / http://127.0.0.1:8080/ 
    </VirtualHost>

NGINX

  server {
          listen        443;
          server_name   my.domain.com;
          access_log    /var/log/nginx/domain.com_access.log;
          error_log     /var/log/nginx/domain.com_error.log;
          location / {
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection 'upgrade';
              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_cache_bypass $http_upgrade;
              proxy_pass_request_headers   on;
              proxy_pass http://127.0.0.1:8080;
          }
}

config.php(Moodle)

<?php  // Moodle configuration file

unset($CFG);
global $CFG;
$CFG = new stdClass();

$CFG->dbtype    = 'mariadb';
$CFG->dblibrary = 'native';
$CFG->dbhost    = 'mariadb';
$CFG->dbname    = 'moodle';
$CFG->dbuser    = 'root';
$CFG->dbpass    = 'moodle';
$CFG->prefix    = 'mdl_';
$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => 3306,
  'dbsocket' => '',
  'dbcollation' => 'utf8mb4_general_ci',
);

if (empty($_SERVER['HTTP_HOST'])) {
  $_SERVER['HTTP_HOST'] = 'my.domain.com';
}
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
  $CFG->wwwroot   = 'https://' . $_SERVER['HTTP_HOST'];
} else {
  $CFG->wwwroot   = 'http://' . $_SERVER['HTTP_HOST'];
}
$CFG->dataroot  = '/bitnami/moodledata';
$CFG->admin     = 'admin';

$CFG->reverseproxy = true;
$CFG->directorypermissions = 02775;

require_once(__DIR__ . '/lib/setup.php');

// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!

有什么想法吗?我想我已经遵循了所有的提示...

docker apache nginx moodle
2个回答
0
投票

您应该在 Nginx 配置中使用容器名称的 docker 容器的 IP 地址。所有容器必须位于同一个网络中。这很重要!

例如:

NGINX

location / {
    proxy_pass "http://name_of_docker_container:8080";
    ...
}

通过命令

docker-compose ps
docker ps
可以知道容器的名称,通过
docker inspect container_name

可以知道容器的IP地址

0
投票

如何制作 位置/moodle{

不起作用

https://example.com/moodle

如何成为config.php?和反向代理?

© www.soinside.com 2019 - 2024. All rights reserved.