nginx proxy reverso e backend do apache em hosts separados - todos os pedidos vão para o mesmo vache do apache

1

Cenário

Eu quero configurar um proxy reverso nginx dedicado que atua como um gateway para vários servidores de back-end que executam uma pilha de lâmpada tradicional.

Eu quero fazer com que todas as solicitações de subdomínios de example.com e mydomain.com acessem a máquina nginx e enviem a solicitação ao back-end correto. Por enquanto eu só tenho um servidor de backend rodando o apache 2.4 com dois vhosts, e todos os pedidos que eu faço para ambos os subdomínios retornam o conteúdo do mesmo vache do apache.

Em poucas palavras: site1.example.com e site1.meudominio.com sempre retornam o site configurado no vache do apache para site1.example.com

Quando eu ligo os logs de acesso de ambos os nginx vhosts eu vejo as solicitações chegando em ambos vhosts se eu solicitar site1.mydomain.com, com pedidos separados saltando entre ambos os vhosts, então parece algo está errado na minha configuração do nginx.

A máquina nginx e apache se comunica através de uma vlan com nginx em 192.168.1.2 e a máquina apache em 192.168.1.3

Configuração do Nginx

arquivo de configuração backend_01

server {
  server_name site1.example.com;

        location / {
          # app1 reverse proxy
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://192.168.1.3:80;
        }

   access_log      /var/log/nginx/site1.example.com_access.log;
   error_log       /var/log/nginx/site1.example.com_error.log;

}

server {
  server_name site1.mydomain.com;

        location / {
          # app2 reverse proxy
          proxy_pass http://192.168.1.3:80;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

   access_log      /var/log/nginx/site1.mydomain.com_access.log;
   error_log       /var/log/nginx/site1.mydomain.com_error.log;

}

Configuração do Apache

vhost para site1.example.com

<VirtualHost 192.168.1.3:80>

  ServerName site1.example.com
  ServerAlias *.site1.example.com

  DocumentRoot /path/to/docroot
  <Directory /path/to/docroot>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    allow from all
    Require all granted
  </Directory>

    LogLevel error
    ErrorLog /var/log/apache2/site1.example.com_error.log
    CustomLog /var/log/apache2/site1.example.com_access.log combined

</VirtualHost>

vhost para site1.mydomain.com

<VirtualHost 192.168.1.3:80>

  ServerName site1.mydomain.com
  ServerAlias *.site1.mydomain.com

  DocumentRoot /path/to/docroot
  <Directory /path/to/docroot>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    allow from all
    Require all granted
  </Directory>

    LogLevel error
    ErrorLog /var/log/apache2/site1.mydomain.com_error.log
    CustomLog /var/log/apache2/site1.mydomain.com_access.log combined

</VirtualHost>

Eu tentei definir um sinalizador padrão em uma das diretivas servername no arquivo de configuração nginx, mas isso não alterou nada. O arquivo nginx.conf não é manipulado, então eu não acho que algo está causando isso, mas vou incluí-lo de qualquer maneira só no caso.

nginx.conf

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##

    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
#}

Eu tentei configurar um servidor padrão e adicionar listen 80 aos vhosts, mas isso não funciona para mim.

Eu também quero adicionar que eu sou muito novo no nginx e pode estar faltando algo muito óbvio.

Informações do sistema:

Servidor Ubuntu 14.04 - 3.12.46-guest-39-a97a54c-x86_64 # 4 SMP seg 10 de agosto 11:59:25 UTC 2015 x86_64 x86_64 x86_64 GNU / Linux

versão nginx: nginx / 1.4.6 (Ubuntu)

    
por Jake 15.12.2015 / 10:47

1 resposta

1

Resolvido.

Eu tive uma incompatibilidade na nomeação entre o backend e o proxy reverso. O aplicativo @ site1.mydomain.com foi configurado incorretamente. Por que vale a pena, a configuração acima funcionará se você prestar atenção à nomeação em todos os lados da configuração, para que possa ajudar algumas pessoas a definir esse tipo de coisa no futuro.

    
por 15.12.2015 / 12:38