Um ip na porta 80 com nomes e portas diferentes de vhost mutáveis

1

Não tenho certeza de como perguntar ou descrever em palavras o que estou tentando fazer, ou se isso pode ser feito dessa maneira, então decidi desenhar um diagrama. Espero que seja bastante auto-explicativo:

Euseiquepossofazerhostsvirtuaisbaseadosemnomenaporta80,maspossocolocá-losemportasdiferentesefazeroservidorfuncionarcomonomedohosteemquaisportaselesestão?

<VirtualHost_default_:80>ServerAdminwebmaster@localhostDocumentRoot/var/www/foo-1.com<Directory/>OptionsFollowSymLinksAllowOverrideNone</Directory><Directory/var/www/foo-1.com/>Options-IndexesFollowSymLinksMultiViewsAllowOverrideNoneOrderallow,denyallowfromall</Directory></VirtualHost><VirtualHost_default_:80>DocumentRoot/var/www/foo-2.comServerNamefoo-2.com<Directory"/var/www/foo-2.com">
        allow from all
        Options -Indexes
    </Directory>
</VirtualHost>
    
por toystory 14.08.2012 / 22:08

2 respostas

3

Para ter dois hosts virtuais baseados em nome trabalhando no mesmo endereço IP, tente algo assim

NameVirtualHost *:80

<VirtualHost _*:80>
    ServerAdmin webmaster@localhost
    ServerName foo-1.com
    ServerAlias www.foo1.com
    DocumentRoot /var/www/foo-1.com
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/foo-1.com/>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/foo-2.com
    ServerName foo-2.com
    ServerAlias www.foo-2.com
    <Directory "/var/www/foo-2.com">
        allow from all
        Options -Indexes
    </Directory>
</VirtualHost>

Observe que cada vhost tem um ServerName e ServerAlias

    
por 14.08.2012 / 23:13
3

Na primeira leitura do seu cenário, minha primeira resposta foi por que você gostaria de fazer isso da mesma forma que os outros, mas com o Apache ou o PHP, algo assim é possível. Seria muito melhor que os hosts virtuais funcionassem corretamente na porta 80, pois é isso que os visitantes do site esperam, mas essa é a minha opinião.

Para fazer o que você gostaria de realizar, existem duas opções e você precisa se sentir confortável para que um redirecionamento de HTTP tenha que acontecer. Não há maneira de contornar isso.

Sua primeira opção é usar o PHP para isso com algo como segue ...

  1. Seu site principal do Apache cobriria todas as solicitações de site padrão usando PHP
  2. O PHP leria os cabeçalhos, olharia o URL e retornaria um redirecionamento para o navegador
  3. O navegador, em seguida, redirecionaria para o URL correto

O Apache também suporta uma opção de reescrita e você pode organizar isso para cada site da seguinte maneira

# First host rewrite
RewriteCond %{HTTP_HOST} ^www.\foo-1\.com$ [NC]
RewriteRule ^(.*)$ http://www.foo-1.com:8080/$1 [L,R=301]

# Second host rewrite
RewriteCond %{HTTP_HOST} ^www.\foo-2\.com$ [NC]
RewriteRule ^(.*)$ http://www.foo-2.com:8081/$1 [L,R=301]

No entanto, se você for para este nível com condições de reescrita, pode ser mais fácil descobrir o VHOSTS no Apache e fazê-lo funcionar corretamente em seu servidor.

    
por 14.08.2012 / 23:26