如何设置 VirtualHosts 以将同一 IP 上的两个端口指向不同的 ServerName?

如何设置 VirtualHosts 以将同一 IP 上的两个端口指向不同的 ServerName?

我已经将 wiki 软件 Gitit 设置为在同一台 Apache 服务器的两个不同端口(端口 1848 和 4000)上运行。我已确认它们正在运行。

现在我想将这两个网站代理到更漂亮的 URL,例如 sitea.com 和 siteb.com。两者的 IP 地址相同(例如,12.34.56.78)。

我的服务器管理员已为名称添加了 DNS 条目,但我似乎无法使 Apache 配置正常工作。按照此处的说明,我尝试设置这样的 VirtualHost:

NameVirtualHost *:1848

<VirtualHost *:1848>
    ServerName sitea.com
    DocumentRoot /var/www/
    RewriteEngine On
    ProxyPreserveHost On
    ProxyRequests Off

    <Proxy *>
       Order deny,allow
       Allow from all
    </Proxy>

    ProxyPassReverse /    http://127.0.0.1:1848
    RewriteRule ^(.*) http://127.0.0.1:1848$1 [P]

    ErrorLog /var/log/apache2/error.log
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ServerSignature On

</VirtualHost>

在端口 4000 上还有另一个类似的虚拟主机。但是当我发出时service httpd restart,启动 httpd 时出现一条FAILED消息,并且我的浏览器无法连接到 sitea.com。

据我所知,我的 httpd.conf 的其余部分是发行版附带的默认文件。我的服务器在 RedHat Enterprise 机器上运行。我是 Apache 的新手,所以我确信这里有一个显而易见的答案,但在尝试对配置进行各种调整后,我无法找出我做错了什么。

編輯:问题是我没有检查以确保我的错误日志的路径名正确。我的发行版将日志存储在 /var/log/httpd 中,而不是 /var/log/apache2 中。(脸红了。)

答案1

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

此示例来自虚拟主机的 apache 文档<VirtualHost/>. 在每个块中定义您的反向代理设置。

下面的配置可能会有帮助

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName sitea.com
    DocumentRoot /var/www/
    RewriteEngine On
    ProxyPreserveHost On
    ProxyRequests Off

    <Proxy *>
       Order deny,allow
       Allow from all
    </Proxy>

    ProxyPass        /    http://127.0.0.1:1848/
    ProxyPassReverse /    http://127.0.0.1:1848/

    ErrorLog /var/log/apache2/error.log
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ServerSignature On
</VirtualHost>

<VirtualHost *:80>
    ServerName siteb.com
    DocumentRoot /var/www/
    RewriteEngine On
    ProxyPreserveHost On
    ProxyRequests Off

    <Proxy *>
       Order deny,allow
       Allow from all
    </Proxy>

    ProxyPass        /    http://127.0.0.1:4000/
    ProxyPassReverse /    http://127.0.0.1:4000/

    ErrorLog /var/log/apache2/error.log
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ServerSignature On
</VirtualHost>

答案2

说起来有点不好意思,但问题是我的错误日志的路径是错误的。我的发行版将错误日志放在 /var/log/httpd 中,因此 Apache 每次到达 ErrorLog 行时都会卡住,因为不存在这样的目录。活到老学到老...

相关内容