Organizando o httpd.conf para hosts virtuais

2

Estou tentando configurar um subdomínio usando Hosts virtuais baseados em nome, de acordo com o formato de configuração em esta questão .

Pelo que entendi, isto:

Finally, you can fine-tune the configuration of the virtual hosts by placing other directives inside the containers. Most directives can be placed in these containers and will then change the configuration only of the relevant virtual host. To find out if a particular directive is allowed, check the Context of the directive. Configuration directives set in the main server context (outside any container) will be used only if they are not overridden by the virtual host settings.

deve significar que a tarefa de mover de um único host para 1 host + 1 subdomínio deve ser bastante direta. No entanto, quando adiciono as diretivas VirtualHost, me deparo com problemas.

Primeiro (e bastante catastrófico) é que a home page do domínio principal retorna um 403 (Proibido). Algum dos seguintes motivos poderia estar causando isso:

  • O domínio principal existente tem um arquivo de configuração grande, com muitas configurações. Estou colocando as diretivas VirtualHost perto do final de httpd.conf , logo após as instruções comentadas para hosts virtuais
  • Há muitos Redirect s e Rewrite s em um arquivo incluído após o VirtualHost s - eles poderiam estar entrando em conflito?
  • Eu coloquei o mínimo absoluto nas diretivas VirtualHost , porque quero mantê-lo o mais simples possível. Seria melhor mover o conteúdo do antigo httpd.conf em um arquivo separado (por exemplo, main-domain.conf), Include em um VirtualHost e criar um arquivo conf separado para o subdomínio, incluindo esse na segunda diretiva VirtualHost ?
  • Por fim, existe uma maneira simples de depurar isso, tendo em mente que estou trabalhando com um site ativo, portanto, qualquer alteração deve ser testada muito rapidamente!

Atualizar

OK, o erro é, mais especificamente:

Directory index forbidden by rule

Outras páginas parecem funcionar OK, então deve haver algum tipo de problema com um redirecionamento da página inicial. Eu acho que isso foi em parte porque eu perguntei se há confrontos conhecidos entre as configurações do VirtualHost e Redirect s / Rewrite s.

Um bloco <Directory "/path/to/docroot"> que corresponda ao bloco DocumentRoot em VirtualHost seja antes ou depois do último (ou não importa)?

Atualização 2

OK, parece que o que não acontece é o seguinte redirecionamento:

RewriteRule ^/$ /path/to/something/else [PT]

que eu estou supondo que está acontecendo por uma das duas razões:

  1. A configuração atual não está nem tentando processar este rewriterule. A regra em si está em um arquivo Include d, após os blocos VirtualHost .

  2. A regra não está mais correspondendo porque a diretiva VirtualHost está causando falha na correspondência de padrões. Isto parece, de longe, o mais provável ...

Atualização 3

Alguém acha que isso pode ser relevante?

Note that, by default, rewrite configurations are not inherited. This means that you need to have a RewriteEngine on directive for each virtual host in which you wish to use it.

Em outras palavras, isso significa que eu preciso:

<VirtualHost *:80>
    RewriteEngine on
</VirtualHost>

para cada VH que precisa lidar com o material Rewrite *, em vez de depender apenas de RewriteEngine on no arquivo global incluído?

Atualização 4

Infelizmente, a mudança mencionada na Atualização 3 não corrigiu o problema

    
por Bobby Jack 19.01.2011 / 13:08

2 respostas

3

Eu sempre divido meus vhosts para separar os arquivos de diretórios. No httpd.conf tem uma linha:

Include /etc/httpd/sites-enabled/*.conf

Em seguida, crie dois diretórios:

mkdir -p /etc/httpd/sites-{enabled,available}

Você pode criar quantos vhosts precisar, um por arquivo em:

/etc/httpd/sites-available/site1.conf /etc/httpd/sites-available/site2.conf

Agora você pode ativar e desativar sites com um link simbólico no diretório habilitado para sites:

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

Você pode testar sua configuração com:

apachectl configtest

O que deve, pelo menos, dizer se você está sintaticamente correto.

Andrew

    
por 19.01.2011 / 13:45
0

A pegadinha mais importante aqui é que quando você não tem nenhum virtualhosts, a configuração base atua como seu host virtual padrão.

Normalmente (sem adicionar novas interfaces ou portas) Quando você vai adicionar seu primeiro vhost, você realmente precisa adicionar dois. Um para capturar o tráfego que estava atingindo a configuração base e outro para capturar o novo tráfego.

Se você não o fizer, poderá descobrir que o vhost que você adicionou para o novo domínio lida com todo o tráfego - e se ainda houver um trabalho em andamento, você poderá ver os 403s.

Então, a partir de uma configuração sem virtualhost:

NameVirtualHost *:80
# This first vhost captures all traffic to port 80 if it doesn't match
# the ServerName/ServerAlias of another VH :80. <virtualhost *:80>. It acts
# like the base server config before you added vhosts
<virtualhost *:80>
ServerName example.com 
# not much else, inherit from base
</virtualhost>

<virtualhost *:80> 
ServerName other.example.com 
... 
</virtualhost>

E lembre-se de que, se você adicionar um novo Alias ou DocumentRoot, precisará de uma nova seção semelhante à que possui para o raiz de documentos dos servidores de base.

    
por 19.01.2011 / 13:44