使托管在本地计算机中的 Apache 网站可从外部访问

使托管在本地计算机中的 Apache 网站可从外部访问

我有一台运行良好的 apache2 服务器,在 LAN 上托管一个 Moodle 站点,可以通过 访问http://192.x.x.x/moodle。我还有一台 Linux 服务器,位于 Internet 和 LAN 之间,具有实时 IP 地址124.x.x.x。我想让 Moodle 站点可以从 Internet 访问。可以吗?

本地 apache2 服务器具有可用的配置moodle.domain.com。实时 Linux 服务器也具有 apache2 服务器托管domain.com。两者都运行 Debian Linux

我尝试从实时 Linux 服务器的文件重定向moodle.domain.com到,但是,当我从外部访问时,得到的仍然是这个。192.x.x.x/etc/hostsdomain.commoodle.domain.com

当我从外部访问时,我首先在 Windows 笔记本电脑中配置主机文件以重定向moodle.domain.com到 Linux 服务器的实时 IP 地址。

我在这里遗漏了什么?

答案1

我通过在实时 Linux Apache 服务器中实现 Apache 反向代理来使其工作。

对于那些正在寻找相同解决方案的人,这是我的片段/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
        ServerName moodle.domain.com
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyPass / http://10.5.1.100:8080/
        ProxyPassReverse / http://10.5.1.100:8080/
</VirtualHost>

托管实际 Moodle 站点的本地 Apache 服务器应该监听端口8080

<VirtualHost *:8080>
    ServerAdmin webmaster@local
    DocumentRoot /srv/www/moodle
    ServerName moodle.domain.com
    ServerAlias moodle.domain.com
    <Directory /srv/www/moodle>
           #Allowoverride all    ###Uncomment if required
    </Directory>
</VirtualHost>

我需要调整的另一个 Moodle 特定设置是 Moodle 配置文件/srv/www/moodle/config.php

$CFG->wwwroot = 'http://moodle.domain.com';

Moodle 在安装过程中最初将其设置为$CFG->wwwroot = 'http://10.5.1.100/moodle';。如果您没有安装 Moodle,请忽略此部分

答案2

在我们开始之前,我想确保您明白,这样做并不是最安全的选择。特别是通过打开路由器端口,所以请确保您了解防火墙。

由于您有一个动态 IP(我假设),因此您无法简单地将其绑定到您的域。这是因为您的 IP 最终会每隔几个小时发生变化。

该答案基于最常见的路由器选项。

  1. 您必须在路由器连接中找到您的 apache 服务器,并激活端口转发(80),或者,如果您了解自己在做什么并且已初始化适当的防火墙,您可以简单地打开所有路由器端口(我强烈建议您不要这样做,除非您有防火墙)
  2. 使用免费的 DNS 服务,例如 Dyn DNS(大多数最新的路由器都支持此功能,只需检查设置并设置一个帐户)。
  3. 创建免费的 DNS 子域。
  4. 从您的主域创建 DNS 规则 (CNAME)。并将其指向您的 dyndns 创建的子域。例如 moodle.example.com -> trex-moodle.exampledyndns.com。
  5. 配置您的 apache 并添加您的 dyndns 子域。

在您的路由器中使用免费的 DNS 是最好的选择,因为您的路由器每隔几个小时就会轮换一次 IP,如果您使用这样的服务,您的 dyn DNS 域将始终指向您的家庭 IP 地址。

编辑

关于第一条评论,您需要在主 Linux 服务器中运行一个 nginx 代理。nginx 可用于托管网站domain.com和托管在同一网络中不同服务器中的 moodle.domain.com。

确保您可以从 Linux 服务器访问 moodle 网站。(使用 ping IP)

现在,在您的 nginx 中,您需要进行以下配置:

server {
    listen       80;
    server_name domain.com;

        root /your/domain.com/path/goes/here ;
}

server {
    listen       80;
    server_name  moodle.trex.com;

    location / {
        proxy_pass http://192.X.X.X:80; #Your apache2 server local IP address
    }
}

为了使其正常工作,Linux 服务器和 apache2 服务器必须位于同一个 192.XXX 网络下。

相关内容