Apache - Vários sites - Um servidor - Portas diferentes - Linux

1

Atualmente, tenho um Apache2 na porta 80. Isso está configurado em /etc/apache2/listen.conf

No /etc/apache2/conf.d eu tenho os arquivos de configuração normais e:

site1.conf , site2.conf e site3.conf arquivos.

Cada arquivo conf é muito parecido:

Alias /site1 /home/user/www/site1/

AddHandler cgi-script cgi

<Directory "/home/user/www/site1/">
  AllowOverride All
  Options +ExecCGI

  <IfModule mod_authz_core.c>
    Require all granted
  </IfModule>

  <IfModule !mod_authz_core.c>
    Order allow,deny
    Allow from all
  </IfModule>

  DirectoryIndex index.cgi
</Directory>

Então, indo para o meu navegador eu posso entrar:

link e obtenha o site1, link e obter site2 etc

Isso funciona bem internamente.

Gostaria agora de permitir que o site2 e o site3 sejam acessados externamente.

Se eu abrir a porta 80 em meu roteador e direcioná-lo para 10.10.0.1, todos os sites estarão disponíveis.

Eu adicionei 8080 & 8888 para /etc/listen.conf e editado site2.conf como:

<VirtualHost *:8080>
 Alias /site2 /home/user/www/site2/

    AddHandler cgi-script cgi

    <Directory "/home/user/www/site2/">
      AllowOverride All
      Options +ExecCGI

      <IfModule mod_authz_core.c>
        Require all granted
      </IfModule>

      <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
      </IfModule>

      DirectoryIndex index.cgi
    </Directory>
</VirtualHost>

e site3 o mesmo, mas definindo o VirtualHost como *: 8888

Isso funciona. Eu posso acessar site2 somente em 8080 e site3 somente em 8888 MAS

Eu também posso acessar o site1 na porta 8080 e a porta 8888

O que eu quero é:

  • site1 só está disponível na porta 80
  • site2 está disponível apenas na porta 8080
  • site3 está disponível somente na porta 8888

O roteador só tem 8080 e 8888 aberto e roteamento.

Alguma ideia de como posso fazer isso?

Obrigado

    
por MacMan 22.10.2015 / 12:07

1 resposta

1

Eu nunca tentei Acabei de testar usando a diretiva Apaches DocumentRoot sem o correspondente ServerName host nomeado - e consegui que funcionasse na minha máquina.
A idéia é tentar obter o host virtual para corresponder a um caminho de arquivo, tente substituir isso:

Alias /site2 /home/user/www/site2/

com

DocumentRoot /home/user/www/site2

Documentação do Apache diz

The DocumentRoot should be specified without a trailing slash.

para que você obtenha

<VirtualHost *:8080>
 DocumentRoot /home/user/www/site2

    AddHandler cgi-script cgi

    <Directory "/home/user/www/site2/">
      AllowOverride All
      Options +ExecCGI

      <IfModule mod_authz_core.c>
        Require all granted
      </IfModule>

      <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
      </IfModule>

      DirectoryIndex index.cgi
    </Directory>
</VirtualHost>

Experimente uma combinação de site virtual, se funcionar, repita nos outros. - não se esqueça de reiniciar o apache depois de modificar os vhosts - você provavelmente terá que alterar a diretiva Listen .

O Apache tem um guia sobre a execução de vários sites em diferentes portas .
Isso é baseado no apache 2.2 e os documentos dizem

[you must use] NameVirtualHost x.x.x.x:8080 - without the NameVirtualHost name:port or you try to use the Listen directive, your configuration will not work.

Eu testei no 2.4 no Ubuntu sem o NameVirtualHost e funcionou bem para mim

    
por 22.10.2015 / 12:27