Proxy

為同一伺服器上的多個域配置 httpd

  • May 14, 2016

一台 CentOS 7 網路伺服器託管一個名為 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>

如果您不使用 SSL/TLS,那麼只需VirtualHost為每個網站添加一個:

<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 伺服器提供頁面。如果您像在原始www.mydomain.com站點上一樣使用 Tomcat,則保留(適當編輯的)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 的虛擬命名主機依賴於Server Name Indication。您的使用者需要在 Vista(或更高版本/更好)上使用 Internet Explorer 7 才能正常工作,因為早期版本不支持 SNI。在 Linux 上你是相當安全的,除非你使用的是過去十年前半葉的一些非常古老的瀏覽器。

唯一的問題是它bogusdomainforvpn.com已經在使用埠 443。由於這將成為 SSL/TLS 連接的預設第一個匹配項,因此如果不支持 SNI 的客戶端嘗試連接到任何您的 SNI 配置站點。如果您不希望發生這種情況,請在此之前創建另一個 VirtualHost,僅用作非 SNI 客戶端的備份站點。

引用自:https://unix.stackexchange.com/questions/233837