Configure o vache do apache executando vários servidores

1

Eu quero rodar um servidor Python 3. * e PHP 7. * rodando um ao lado do outro usando o seguinte:

php.localhost
py.localhost

Meu /etc/httpd/conf/httpd.conf :

# Dynamic Shared Object (DSO) Support
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule php7_module modules/libphp7.so
AddHandler php7-script php
Include conf/extra/php7_module.conf
WSGIScriptAlias / /var/www/python/app.py

ServerName localhost

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Full httpd.conf file aqui .

Meu /etc/httpd/conf/extra/httpd-vhosts.conf :

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/php"
    ServerName php
    ServerAlias php.localhost
    ErrorLog "/var/log/httpd/php-error.log"
    CustomLog "/var/log/httpd/php-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/python"
    ServerName python
    ServerAlias py.localhost
    ErrorLog "/var/log/httpd/py-error.log"
    CustomLog "/var/log/httpd/py-access.log" common
</VirtualHost>

Meu /etc/hosts :

# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.1       php.localhost
127.0.0.1       py.localhost

E meu nome de host é L702X .

Eu estou perdido aqui, eu vasculhei guias de busca seguidos e nada parece fazer sentido aqui, pois como uma rota para 127.0.0.1 pode ir para 2 endereços diferentes?

Se eu estiver faltando arquivos de configuração, comente e adicionarei. Qualquer ajuda é apreciada.

    
por Xorifelse 20.02.2018 / 12:59

2 respostas

2

how can a route to 127.0.0.1 go to 2 different addresses

Não, o arquivo hosts deve ser interpretado ao contrário: Dois nomes diferentes traduzem para o mesmo endereço 127.0.0.1 ("se você deseja alcançar py.localhost, entre em contato com 127.0. 0,1 ") - como duas pessoas compartilhando um número de telefone.

Isso não afeta o roteamento da camada IP; ainda é o mesmo 127.0.0.1 não importa como foi obtido, e os pacotes para ele seguem o mesmo caminho.

(O mesmo é muito comumente feito na Internet, com centenas de domínios DNS resolvidos para o mesmo endereço IP do servidor da Web.)

A única parte interessante é como o Apache faz distinção entre solicitações HTTP pertencentes a domínios diferentes - isso já foi repetido neste site, mas a resposta curta é que os navegadores incluem o nome de domínio dentro de o pedido HTTP (adicionando um Host: cabeçalho HTTP).

    
por 20.02.2018 / 16:57
1

Como complemento à já excelente resposta do @gravity, você deve se lembrar que o DNS (ou, neste caso, o seu hosts file, que serve ao mesmo propósito) mapeia apenas um nome para um endereço IP - mas não há um limite de IP inerente nesses mapeamentos de nome para ip. O exemplo do @ grawity de um número de telefone (IP) ser capaz de alcançar pessoas diferentes (nomes / programas) é um bom exemplo.

Se houvesse uma regra de mapeamento em que um único IP pudesse ser usado apenas uma vez, você não poderia executar vários serviços (mesmo de tipos diferentes) fora do mesmo IP, o que seria uma limitação técnica grave. Você precisaria de IPs separados (e prováveis servidores) para HTTP, DNS, email, etc. e todos os subdomínios ( www.example.com é um subdomínio de exemplo .com , por exemplo, e exigiria um IP separado de example.com ).

Como não há esse limite nesses mapeamentos, os programas normalmente entram em contato com um servidor em portas diferentes para separar o tráfego. Observe que as portas não estão incluídas nas entradas DNS (ou no seu arquivo hosts ) - cabe a partes individuais do software decidir quais portas elas devem usar para se comunicar. Se várias solicitações de nomes diferentes forem recebidas em uma única (porta 80 ou 443 para o tráfego normal da web), será então o servidor (que reside em 127.0.0.1 no seu caso) a decidir o que deve fazer, por exemplo. se receber uma solicitação para php.localhost ou py.localhost .

É aqui que a hospedagem virtual é baseada em nomes (tecnicamente Indicação do nome do servidor [SNI] para HTTPS). O arquivo de hosts virtuais contém as instruções para o Apache que dizem" Se obtivermos uma solicitação para este nome de host, faça X. " Se não houver um nome que corresponda, o servidor normalmente retorna um código de status HTTP 404 (Not Found). Se houver, a entrada do host virtual informa ao servidor como proceder (servir páginas desse diretório, etc.).

Observe que sua entrada ServerName localhost em httpd.conf é um host padrão. Às vezes, esse host é servido em vez de retornar um 404, se nenhum nome de host correspondente for encontrado em seu arquivo de hosts virtuais.

por 21.02.2018 / 05:42