為同一伺服器上的多個域配置 httpd
一台 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,則保留(適當編輯的)ProxyPass
和ProxyPassReverse
行,不要添加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 客戶端的備份站點。