nginx e apache2 no mesmo servidor

1

Eu tenho o Ubuntu 16.04 com o nginx e o apache2. Existem 2 registros DNS A apontados para esta máquina:

  • app1.meudominio.com.br
  • app2.mydomain.com

Eu preciso que app1.mydomain.com seja resolvido pelo apache e app2.mydomain.com seja resolvido pelo nginx. Ambos na porta 80. É possível?

além disso, o apache precisa lidar com dois aplicativos diferentes (site1 e site2).

Eu gostaria de:

  • app1.mydomain.com/site1 - para ser resolvido pelo apache e executar o site1 do aplicativo
  • app1.mydomain.com/site2 - a ser resolvido pelo apache e pelo site2 do aplicativo de disparo
  • app2.mydomain.com - para servir o aplicativo fantasma com nginx

Esta é a minha configuração do Apache:

<VirtualHost *:80>
    ServerAdmin [email protected]

    ServerName app1.mydomain.com

    ServerAlias www.app1.mydomain.com

    ErrorLog /var/www/site1/logs/error.log

    CustomLog /var/www/site1/logs/access.log combined

    WSGIScriptAlias /api /var/www/site1/application/index.py/

    Alias /static /var/www/site1/application/static

    <Directory /var/www/site1/application>
            Order deny,allow
            Allow from all
    </Directory>

    AddType text/html .py

    ErrorLog /var/www/site2/logs/error.log
    CustomLog /var/www/site2/logs/access.log combined

    WSGIScriptAlias /site2 /var/www/site2/index.py/
    Alias /site2/uploads /var/sftp/site2/uploads/

    <Directory /var/www/site2/>
            Order deny,allow
            Allow from all
    </Directory>

Este é o meu arquivo de configuração do NGINX:

server {
listen 8080;
listen [::]:8080;

server_name app2.mydomain.com;
root /var/www/ghost/system/nginx-root;

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:2368;

}
location ~ /.well-known {
    allow all;
}

client_max_body_size 50m;
}
    
por Student Michal Wloga 08.04.2018 / 17:14

2 respostas

1

Primeiro de tudo. Apache e Nginx são servidores Web - não servidores DNS. Eles não resolvem nada. Esta questão não tem nada a ver com o DNS, mas tudo com o modo como os servidores da Web lidam com as solicitações.

I need app1.mydomain.com to be resolved by apache and app2.mydomain.com to be resolved by nginx. Both on port 80. Is it possible?

Não, isso não é possível. Dois aplicativos não podem ouvir a mesma porta. Você pode resolver isso de duas maneiras:

  1. Faça com que o Apache ouça na porta 80 e solicite solicitações de app2.mydomain.com para nginx, ouça em uma porta diferente e atenda app1.mydomain.com diretamente.
  2. Em frente. Tem um proxy nginx para o Apache.

Ou - torne os dois hospedados pelo mesmo servidor da web. O Apache e o nginx são, em muitos casos, intercambiáveis no nível técnico, portanto, da perspectiva dos aplicativos, isso não deve realmente importar. Em termos de gestão, são bastante diferentes.

Eu notei que você roda o nginx na porta 8080, então eu suponho que você queira usar o apache como proxy. Em seguida, crie um novo host virtual para o apache, por exemplo /etc/apache2-sites-available/app2.mydomain.com.conf :

<VirtualHost *:80>
   DocumentRoot "/var/www"
   ErrorLog "logs/app2-error_log"
   CustomLog "logs/app2-access_log" common
   ServerName app2.mydomain.com
   ProxyRequests Off
   <Proxy *>
          Order deny,allow
          Allow from all
    </Proxy>
     Proxypass / http://localhost:8080/
</VirtualHost>

Em seguida, execute sudo a2enmod proxy_http; sudo a2ensite app2.mydomain.com; sudo service apache2 reload .

Isso habilitará mod_proxy, mod_proxy_http e fará o apache encaminhar quaisquer solicitações para o aplicativo VirtualHost2.mydomain.com para nginx, que de acordo com sua configuração está sendo executado na porta 8080.

Eu não testei esta configuração, então alguns ajustes podem ser necessários.

Como um sidenote: por que você precisa do nginx? De acordo com a configuração do nginx, ele apenas procura uma requisição para algum outro servidor rodando na porta 2368. Você pode fazer proxy diretamente usando o apache ...

A documentação do mod_proxy pode ser útil ao ajustá-lo.

    
por vidarlo 08.04.2018 / 18:26
0

Pelo conteúdo da sua pergunta, você já deu certo, exceto que você só pode acessar um aplicativo por porta #. Você não pode executar o Apache2 e o Nginx na mesma porta. Não é possível.

Desde que você mencionou, você já tem seu DNS funcionando e apontando para a máquina correta (IP). Você pode alcançar seu app1.mydomain.com pelo padrão ( port 80 ) com:

http://app1.mydomain.com

Isso é o mesmo que

http://app1.mydomain.com:80

Você terá que especificar a porta para o seu Nginx, que você tem, pelo seu arquivo de configuração, definido para port 8080 .

Use isso para acessar seu site1:

http://app1.mydomain.com:8080

Se você especificar a porta errada, a página padrão será carregada, independentemente do nome de domínio usado. Para o Apache, o padrão é o primeiro host virtual, a menos que seja especificado de maneira diferente.

    
por L. D. James 08.04.2018 / 18:20