一个 IP 地址,两个网站,两台机器 - 需要详细信息

一个 IP 地址,两个网站,两台机器 - 需要详细信息

另一个用户已经发布了这个问题,但没有给出详细的答案。这是原始问题的链接 -一个 IP 地址,两个网站,两台机器

我有两台机器,每台都安装了 apache2 并具有静态 IP 地址。

服务器 1

example.com
static ip = 192.168.0.6
apache2 running on ports 80 and 443 fine
ufw and router firewall are open on ports 80 and 443 as well

服务器 2

domain name = myhost01.example.com 
static ip = 192.168.0.7
apache2 running on 8080(HTTP) and 8443(HTTPS) 
ufw and router firewall are open on ports 8080 and 8443

当我访问 {http)www.example.com 或 (https)www.example.com 时 - 我正确接收了服务器 1 的 Web 内容

当我访问 myhost01.example.com:8080 或 myhost01.example.com:8443 时 - 我正确接收了服务器 2 的 Web 内容

我想反向代理服务器 2,这样当用户访问 http:// myhost01 .example.com/ 时,他们会收到 http:// myhost01. example.com:8080/ 的内容,基本上隐藏了端口号。目前,当我尝试访问 myhost01(dot)example(dot)com 时,我收到“无法连接/找不到网页”错误

在 example.com 的虚拟主机文件中,我使用了以下内容:

ProxyRequests Off

ProxyPass / http://myhost01. example.com:8080/
ProxyPassReverse / http://myhost01 .example.com:8080/

apache2 中启用了 proxy 和 proxy_http 模块

关于如何实现这个功能你有什么想法吗?

PS-由于我的信誉点数不足以发布两个以上的网址,因此在网址中添加了空格。

**更新- 请参阅下面的注释

服务器 1 - example.com - VHOST 文件

<VirtualHost *:80>

    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /myweb/cmweb/apache/http

#ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://myhost01.example.com:8080/
ProxyPassReverse / http://myhost01.example.com:8080/

        <Directory />
                Options Indexes FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /myweb/cmweb/apache/http/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all

        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        LogLevel warn

</VirtualHost>

尝试使用 192.168.0.7 代理替换 myhost01(dot)example(dot)com,但无济于事

Server2 - myhost01(dot)example(dot)com VHOST 文件

 <VirtualHost *:8080>

    ServerAdmin [email protected]
    ServerName myhost01.example.com
    ServerAlias myhost01 myhost01.example.com

    DocumentRoot /mwdhost/cmweb/apache/http

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /mwdhost/cmweb/apache/http/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    LogLevel warn

</VirtualHost>

myhost01 已添加到域名注册人的 A 记录中,可以执行 NSLOOKUP 并获取 myhost01.example.com 的正确外部 IP 地址

下面是 server1 的 Apache Error.log - 可能是我遇到的问题的线索???

Sun Feb 02 18:24:52 2014] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 54.43.138.12:8080 (myhost01.example.com) failed
[Sun Feb 02 18:24:52 2014] [error] ap_proxy_connect_backend disabling worker for (myhost01.example.com)
[Sun Feb 02 18:24:53 2014] [error] proxy: HTTP: disabled connection for (myhost01.example.com) 
[Mon Feb 03 07:33:54 2014] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)

答案1

建议:

检查 server1(example.com) 是否可以查找并获取正确的 DNS 记录myhost01.example.com

您的服务器是否各有一个公共 IP 和一个内部 IP?还是像链接的问题一样,您只有一个 IP?

我是否闻到了具有一个 IP、在上述端口上运行 nat 和端口转发的廉价路由器的味道?

  • 廉价路由器经常会出现这样的问题:它们无法结合使用外部地址的 nat 和端口转发来访问其他内部机器。有些路由器还会故意不这样做,因为将所有内部负载发送到网关/nat 路由器是一种不好的做法。

两个 DNS 记录(myhost1.example.com 和 example.com)都指向同一个公共 IP?

  • 是的,这是有意且正确的,但是会发生什么呢?

    • 当 Apache 实例想要查找代理连接的位置时,它会被告知外部 IPmyhost01.example.com指向可能导致连接失败的路由器。我们假设确实如此。

我们发现一个可能的错误,该如何解决呢?

  • 由于来自 DNS 的外部 IP 无法帮助 server1 找到本地 IP 以通过本地网络,所以我们需要一种方法来做到这一点,幸运的是,有很多条路可以通往罗马。

    • 一种方法是在 ProxyPass 中使用 server2 的本地 IP。
    • 另一种方法是简单地覆盖您的 DNS 答案。这可以在充当代理的 server1 上完成。编辑文件/etc/hosts。有关您可以在这里阅读 hosts 文件。
    • 第三种方法是为本地服务器创建额外的 DNS 记录。例如,指向 的名为 local2.example.com 的条目192.168.0.7

笔记。如果您想知道,完全可以拥有更多公共 IP 并在小子网(例如,也将用作互连)上运行它们。但不太建议这样做。

免责声明

此答案基于经验猜测,因为答案中缺少完整的配置、Apache 日志和错误。欢迎随时改进。

答案2

你的方法似乎有点过了。

所有现代 Web 服务器都允许您将多个网站绑定到单个 IP 地址和端口。这可以通过为各个站点配置主机头名称来实现。

此外,您可以使用 SNI 将多个 SSL 站点指向相同的 IP 地址和端口(443 或其他)。较旧的浏览器不支持 SNI,但这可能不是您的问题。

将其中一个站点连接到端口 8080,然后在其上连接代理是一条很长的路,除非明确需要以某种方式向客户端公开端口 8080。

作为一个大忙人,除非绝对需要,否则我不会花很多时间在 Apache 配置上。否则,我会使用 Virtualmin (http://www.webmin.com/virtualmin.html),它可以处理此类配置下 85% 的脏活。

相关内容