configurando o httpd para vários domínios no mesmo servidor

3

Um servidor web do CentOS 7 está hospedando um domínio público, chamado mydomain.com. O mesmo servidor também tem uma VPN separada que hospeda dois aplicativos somente para usuários privados autorizados / autenticados. O Httpd está configurado em uma relação de proxy reverso na frente do tomcat. Tudo funciona perfeitamente usando a configuração abaixo.

Como altero a configuração abaixo para que o servidor também possa hospedar outros domínios, domain2.com, domain3.com e domain4.com para o público? Observe que há três instâncias de tomcat. A porta 8011 aponta para a instância do tomcat para o (s) site (s) público (s), enquanto as portas 8009 e 8010 apontam para instâncias do tomcat que são usadas para aplicativos vpn privados.

Aqui está o código para /etc/httpd/conf.d/hostname.conf , que está marcado como um arquivo de inclusão em /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>
    
por CodeMed 04.10.2015 / 14:28

2 respostas

3

Se você não estiver usando SSL / TLS, basta adicionar um VirtualHost para cada website:

<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>

A entrada <Directory> provavelmente é necessária, pois o CentOS limita o acesso a todos os que estão fora da raiz padrão de /var/www/html . Edite como achar melhor.

A única diferença para a seção VirtualHost é a substituição das entradas do Proxy por DocumentRoot para apontar para o diretório onde seus arquivos estão armazenados. Eu estou supondo que você está servindo páginas do servidor apache local. Se você estiver usando o Tomcat como fez no site www.mydomain.com original, deixe as linhas ProxyPass e ProxyPassReverse (adequadamente editadas) e não adicione a entrada DocumentRoot ou a seção <Directory> .

Para sites SSL / TLS, você precisa ter uma configuração semelhante, mas com a porta alterada para 443 e as entradas relevantes para seus certificados:

<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>

Esta hospedagem virtual nomeada com SSL / TLS depende da Indicação do nome do servidor . Seus usuários precisam do Internet Explorer 7 no Vista (ou posterior / melhor) para que isso funcione como qualquer coisa anterior não suporta SNI. No Linux você está bem seguro, a menos que você esteja usando um navegador muito arcaico da primeira metade da última década.

O único problema é que bogusdomainforvpn.com já está usando a porta 443. Como isso se tornará a primeira correspondência padrão para uma conexão SSL / TLS, ela será usada como o site de fall-back se um cliente não suportar O SNI tenta se conectar a qualquer um dos seus sites configurados pelo SNI. Se você não quer que isso aconteça, então crie outro VirtualHost antes daquele simplesmente para uso como o site de fallback para clientes não-SNI.

    
por 04.10.2015 / 21:24
2

Isso não funcionará para sites HTTPS, mas sem qualquer consideração de proxy reverso, o httpd.conf deve simplesmente ter mais 3 deles com X modificados em cada um:

<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>

Eles poderiam entrar em /etc/httpd/conf.d/hostname.conf separado, se você preferir, mas contanto que os confs sejam incluídos no master, todos eles agem como se fossem uma vez grandes conf então não é essencial.

    
por 04.10.2015 / 15:59