Vários hosts virtuais no Centos 7 não estão funcionando juntos

Vários hosts virtuais no Centos 7 não estão funcionando juntos

As informações do meu servidor são

Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 19 2015 21:43:13

Estou tentando configurar o host virtual para dois sites diferentes: biz.example.com e pin.example.com, que estão hospedados no mesmo servidor. Existem 2 pastas diferentes localizadas em 'var/www/html/' chamadas 'biz' e 'pin' com seus arquivos de projeto respeitados para os 2 sites mencionados acima. Estou tentando configurá-lo da maneira abaixo.

Dentro de /etc/hosts abaixo da configuração

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

xxx.xxx.xxx.xxx biz.example.com
xxx.xxx.xxx.xxx pin.example.com

xxx.xxx.xxx.xxx é substituído pelo endereço IP do servidor.

Dentro de /etc/httpd/conf/httpd.conf

IncludeOptional sites-enabled/*.conf

Agora, em /etc/httpd/sites-available existem os arquivos biz.conf e pin.conf. Eu também tenho a pasta sites-enabled em /etc/httpd que possui 2 arquivos que apontam para biz.conf e pin.conf da pasta sites-available usando o comando abaixo

ln -s /etc/httpd/sites-available/biz.conf /etc/httpd/sites-enabled/biz.conf

ln -s /etc/httpd/sites-available/pin.conf /etc/httpd/sites-enabled/pin.conf

biz.conf tem o seguinte

<VirtualHost *:80>
ServerName http://biz.example.com/
ServerAlias http://biz.example.com/
DocumentRoot "/var/www/html/biz"
<directory "/var/www/html/biz">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order Deny,Allow
        Allow from 127.0.0.1
</directory>
</VirtualHost>

E a configuração no arquivo pin.conf é mencionada como

<VirtualHost *:80>
ServerName http://pin.example.com/
ServerAlias http://pin.example.com/
DocumentRoot "/var/www/html/pin"
<directory "/var/www/html/pin">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order Deny,Allow
        Allow from 127.0.0.1
</directory>
</VirtualHost>

Nesta configuração, se eu tentar acessarhttp://biz.example.com/, o site correto (site de negócios) está sendo carregado. Mas se eu tentar acessarhttp://pin.example.com/, então o site de negócios também está carregando em vez do site fixado. A configuração múltipla não está funcionando em conjunto.

Também tentei mesclar a configuração virtual de biz.conf e pin.conf em um único arquivo, biz.conf, mas não funcionou tão bem.

Responder1

Responder:

1) É necessário remover a barra final de ServerName e ServerAlias

2) Aqui, podemos remover ServerAlias, bem como ServerName e ServerAlias, ambos iguais.

Responder2

Remova aspas duplas do seu caminho

DocumentRoot /var/www/html/pin
<directory /var/www/html/pin>

Responder3

Nesta configuração, se eu tentar acessarhttp://biz.example.com/, o site correto (site de negócios) está sendo carregado. Mas se eu tentar acessarhttp://pin.example.com/, então o site de negócios também está carregando em vez do site fixado.

Isso ocorre porque as diretivas ServerNameand ServerAliasnão correspondem (sintaxe errada) e, neste caso, a primeira definida VirtualHostrecebe todas as solicitações.

O comportamento é descrito na documentação com uma configuração muito semelhante:

Executando vários sites baseados em nomes em um único endereço IP (httpd.apache.org/docs/2.4/vhosts/examples.html)

# Ensure that Apache listens on port 80
Listen 80
<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.com

    # Other directives here
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/www/example2"
    ServerName www.example.org

    # Other directives here
</VirtualHost>

Os asteriscos correspondem a todos os endereços, portanto o servidor principal não atende solicitações. Devido ao fato do host virtual ServerName www.example.comestar em primeiro lugar no arquivo de configuração, ele tem a prioridade mais alta e pode ser visto como opadrãoouprimárioservidor. Isso significa que se for recebida uma solicitação que não corresponda a uma das ServerNamediretivas especificadas, ela será atendida primeiro por esta <VirtualHost>.


Solução:

  1. Deve ServerNameser sem http://prefixo e sem barra final, ou seja

    ServerName biz.example.com
    

    e

    ServerName pin.example.com
    
  2. ServerAliaspode ser removido, pois tem o mesmo valor queServerName

  3. <Directory>e </Directory>deve começar com letra maiúscula

  4. A antiga sintaxe de controle de acesso do Apache 2.2 deve ser alterada para a nova Requiresintaxe do Apache 2.4.

    Order Deny,Allow
    Allow from 127.0.0.1
    

    deverá ser substituído por

    Require local
    

    Ver


informação relacionada