Como configurar hosts virtuais baseados em nome no Apache 2.4 no Linux?

1

Sou novo no Linux e no apache.

Eu tenho um site hospedado no meu computador usando o apache. Suponha que o domínio seja www.myweb.com . Agora quero criar três subdomínios a.myweb.com e b.myweb.com .

Minha primeira pergunta é que posso fazer isso usando hosts virtuais. Porque todos os exemplos de hosts virtuais que eu posso encontrar usam domínios diferentes, então não tenho certeza se isso também se aplica ao subdomínio.

Minha segunda pergunta é baseada em que os hosts virtuais funcionam para o subdomínio. No meu arquivo httpd.conf , o valor de DocumentRoot é /srv/http . Em /srv/http , criei três pastas, default , a e b . E aqui está o meu httpd-vhosts.conf :

<VirtualHost myIP:80>
    ServerAdmin [email protected] 
    DocumentRoot "/srv/http/default/public"
    ServerName www.myweb.com
    ServerAlias myweb.com
    ErrorLog "/srv/http/default/logs/error.log"
    CustomLog "/srv/http/default/logs/access.log" combined
    <Directory />
        Options FollowSymLinks Indexes
        Require all granted
    </Directory> 
</VirtualHost>


<VirtualHost myIP:80>
    ServerAdmin [email protected] 
    DocumentRoot "/srv/http/a/public"
    ServerName a.myweb.com
    ErrorLog "/srv/http/a/logs/error.log"
    CustomLog  "/srv/http/a/logs/access.log" combined
</VirtualHost>


<VirtualHost myIP:80>
    ServerAdmin [email protected] 
    DocumentRoot "/srv/http/b/public"
    ServerName b.myweb.com
    ErrorLog "/srv/http/b/logs/error.log"
    CustomLog  "/srv/http/b/logs/access.log" combined   
    <Directory />
        Options FollowSymLinks Indexes
        Require all granted
    </Directory> 
</VirtualHost>

Agora, o problema é que quando digito www.myweb.com , myweb.com , a.myweb.com ou b.myweb.com no meu navegador, sempre sou levado para DocumentRoot , que é /srv/http . Então, fiz algo errado ou o subdomínio não pode funcionar dessa maneira? Muito obrigado.

    
por xoroth 20.12.2015 / 16:04

2 respostas

0

Notei que você usa <VirtualHost myIP:80> no início de suas seções de virtualhost. Eu uso <VirtualHost *:80> para todos os meus hosts virtuais baseados em nomes - consulte Como configurar o host virtual do Apache (Com exemplos) para a diferença entre configurar um servidor para hosts virtuais baseados em nome versus hosts virtuais baseados em IP. Se o servidor tiver vários endereços IP e você quiser que os sites respondam em endereços IP diferentes, eu pensaria que você colocaria um endereço IP, mas se todos os sites fossem acessíveis usando qualquer endereço IP que o servidor estivesse escutando, tente o endereço IP. "*", em vez do endereço IP nas seções virtualhost, para ver se isso faz diferença. Caso contrário, sua configuração será semelhante à minha. Você também pode tentar httpd -S verificar a sintaxe de configuração do VirtualHost, como sugerido naquele artigo, para ver se algo que o Apache relata com essa verificação parece errado.

    
por 20.12.2015 / 23:35
0

Você precisa usar caminhos completos na diretiva "Diretório", conforme exigido na Documentação do Apache . Com a sua configuração você realmente configurando o acesso ao seu caminho 'DocumentRoot' configurado no httpd.conf a partir do respectivo nome de host.

A seção de configuração "Diretório" do seu site padrão (www) pode ter a seguinte aparência:

<Directory /srv/http/default/public>
    Options FollowSymLinks Indexes
    Require all granted
</Directory>

Observe também que o acesso padrão do Diretório "/" é permitir todo acesso, o que significa que o Apache httpd servirá qualquer arquivo mapeado de um URL. Então, como sugerido na documentação, você pode querer alterá-lo para algo mais restrito em seu httpd.conf.

<Directory "/">
    Require all denied
</Directory>
    
por 21.12.2015 / 00:28