在同一服务器上为多个域配置 httpd

在同一服务器上为多个域配置 httpd

CentOS 7 Web 服务器托管一个名为 mydomain.com 的公共域。同一台服务器还有一个单独的 VPN,它托管两个仅供私人授权/经过身份验证的用户使用的应用程序。 httpd在tomcat前面设置了反向代理关系。使用下面的配置一切都可以完美运行。

如何更改下面的配置,以便服务器还可以为公众托管其他域、domain2.com、domain3.com 和 domain4.com? 请注意,有 3 个 tomcat 实例。端口 8011 指向公共站点的 tomcat 实例,而端口 8009 和 8010 指向用于私有 VPN 应用程序的 tomcat 实例。

以下是 的代码/etc/httpd/conf.d/hostname.conf,它被标记为 中的包含文件/etc/httpd/conf/httpd.conf

<VirtualHost *:443>
    ServerName www.bogusdomainforvpn.com
    ServerAlias bogusdomainforvpn.com
    ErrorLog /var/log/httpd/bogusdomainforvpn_com_error.log
    CustomLog /var/log/httpd/bogusdomainforvpn_com_requests.log combined
    SSLEngine on
    SSLProxyEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ProxyPass / ajp://ip.address.of.server:8009/
    ProxyPassReverse / ajp://ip.address.of.server:8009/
</VirtualHost>

Listen 444

<VirtualHost *:444>
    ServerName www.bogusdomainforvpn.com
    ServerAlias bogusdomainforvpn.com
    ErrorLog /var/log/httpd/bogusdomainforvpn_com_error.log
    CustomLog /var/log/httpd/bogusdomainforvpn_com_requests.log combined
    SSLEngine on
    SSLProxyEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ProxyPass / ajp://ip.address.of.server:8010/
    ProxyPassReverse / ajp://ip.address.of.server:8010/
</VirtualHost>

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAlias mydomain.com
    ErrorLog /var/log/httpd/mydomain_com_error.log
    CustomLog /var/log/httpd/mydomain_com_requests.log combined
    ProxyPass / ajp://ip.address.of.server:8011/
    ProxyPassReverse / ajp://ip.address.of.server:8011/
</VirtualHost>

答案1

VirtualHost如果您不使用 SSL/TLS,则只需为每个网站添加:

<VirtualHost www.domain2.com:80>
    ServerName www.domain2.com
    ErrorLog /var/log/httpd/domain2_com_error.log
    CustomLog /var/log/httpd/domain2_com_requests.log combined
    # You probably want either the next line:
    DocumentRoot /var/www/domain2.com
    # or the next two lines: (but not all three)
    # ProxyPass / ajp://ip.address.of.server:8012/
    # ProxyPassReverse / ajp://ip.address.of.server:8012/
</VirtualHost>

# You only need this block if DocumentRoot is used above:
<Directory /var/www/domain2.com>
    # this enables full control using .htaccess - change for your setup
    AllowOverride All
</Directory>

<Directory>条目可能是必需的,因为 CentOS 限制对默认根目录之外的所有内容的访问/var/www/html。根据您的需要进行编辑。

与此部分的唯一区别VirtualHost是将代理条目替换为DocumentRoot指向存储文件的目录。我假设您正在从本地 apache 服务器提供页面。如果您像在原始站点上一样使用 Tomcat www.mydomain.com,则保留(经过适当编辑的)ProxyPassProxyPassReverse行,并且不要添加DocumentRoot条目或<Directory>部分。

对于 SSL/TLS 站点,您需要有类似的设置,但端口更改为 443 以及证书的相关条目:

<VirtualHost www.domain2.com:443>
    ServerName www.domain2.com
    SSLEngine on
    SSLProxyEngine on
    SSLCertificateFile /etc/pki/tls/certs/domain2.crt
    SSLCertificateKeyFile /etc/pki/tls/private/domain2.key
    ErrorLog /var/log/httpd/domain2_com_error.log
    CustomLog /var/log/httpd/domain2_com_requests.log combined
    DocumentRoot /var/www/domain2.com
</VirtualHost>

这种带有 SSL/TLS 的虚拟命名托管依赖于服务器名称指示。您的用户需要 Vista 上的 Internet Explorer 7(或更高版本/更好版本)才能使用此功能,因为更早的版本不支持 SNI。在 Linux 上,除非您使用的是上个十年前半期的一些非常古老的浏览器,否则您相当安全。

唯一的问题是bogusdomainforvpn.com已经使用端口 443。由于这将成为 SSL/TLS 连接的默认第一个匹配,因此如果不支持 SNI 的客户端尝试连接到任何端口,它将用作后备站点您配置的 SNI 站点的数量。如果您不希望发生这种情况,请在该虚拟主机之前创建另一个虚拟主机,仅用作非 SNI 客户端的后备站点。

答案2

这不适用于 HTTPS 站点,但如果没有任何反向代理考虑,只是简单的托管,您的 httpd.conf 应该只包含其中 3 个以上X每一项修改:

<VirtualHost *:80>
  ServerName www.domainX.com
  ServerAlias domainX.com
  DocumentRoot /var/www/vhosts/domainX
  ErrorLog /var/log/httpd/domainX_com_error.log
  CustomLog /var/log/httpd/domainX_com_requests.log combined
</VirtualHost>

他们可以单独进入 /etc/httpd/conf.d/主机名.conf 如果您愿意的话,但是只要conf包含在master中,它们就都像在一次大conf中一样,所以它不是必需的。

相关内容