Установите nginx в качестве прокси для 2 внутренних приложений, размещенных на 2 разных машинах (2 разных внутренних IP), и получите ошибку 502 Bad Gateway - PullRequest
0 голосов
/ 17 января 2020

У меня есть следующие настройки (все машины работают под CentOS8):

  • publi c rooter, который перенаправляет запросы HTTP и HTTPS на мой NGINX компьютер (IP: 192.168.100.2) - давайте назовем это прокси-машиной;
  • машина App1 (зарегистрированная как app1.domain.com) с IP 192.168.100.10, работающая на Tomcat8, которая обслуживается NGINX с перенаправлением HTTPS
  • App2 компьютер (зарегистрированный как app2.domain.com) с IP 192.168.100.20, работающий на WildFly15, также обслуживаемый NGINX с перенаправлением HTTPS

У меня есть следующие настройки NGINX (блок сервера)

  1. Прокси-машина (192.168.100.2):

    # APP1 settings
    server {
          listen *:80;
          server_name app1.domain.com;
          return 301 https://$server_name$request_uri; 
    }    
    
    server {
          listen *:443 ssl http2;
          server_name app1.domain.com;
          ssl on;
          ssl_certificate /etc/nginx/ssl/app1/nginx.crt;
          ssl_certificate_key /etc/nginx/ssl/app1/nginx.key;
          ssl_dhparam /etc/nginx/ssl/app1/dhparam.pem;
          proxy_ssl_session_reuse off;
          location ~ ^/(.*)$ {
                 proxy_pass http://192.168.100.10/$1$is_args$args;
                 proxy_set_header Host app1.domain.com;
                 proxy_set_header X-Real_IP $remote_addr;
          }
    }
    # APP2 settings
    server {
          listen *:80;
          server_name app2.domain.com;
          return 301 https://$server_name$request_uri; 
    }    
    
    server {
          listen *:443 ssl http2;
          server_name app2.domain.com;
          ssl on;
          ssl_certificate /etc/nginx/ssl/app2/nginx.crt;
          ssl_certificate_key /etc/nginx/ssl/app2/nginx.key;
          ssl_dhparam /etc/nginx/ssl/app2/dhparam.pem;
          proxy_ssl_session_reuse off;
          location ~ ^/(.*)$ {
                 proxy_pass http://192.168.100.20/$1$is_args$args;
                 proxy_set_header Host app2.domain.com;
                 proxy_set_header X-Real_IP $remote_addr;
          }
    }
    
  2. Настройки аппарата App1 (настройки App2 аналогичны):

    server {
        listen       192.168.100.2:80 default_server;
        listen       [::]:80 default_server;
        server_name  app1.domain.com;
        return  301 https://$server_name$request_uri;
    }
    server {
        listen       192.168.100.2:443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  app1.domain.com;
    
        ssl_certificate "/etc/nginx/ssl/nginx.crt";
        ssl_certificate_key "/etc/nginx/ssl/nginx.key";
        ssl_dhparam "/etc/nginx/ssl/dhparam.pem";
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout  180m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
        add_header Strict-Transport-Security max-age=63072000 always;
    
        # aditional security settings
        set $allowOriginSite *;
        proxy_pass_request_headers on;
        proxy_pass_header Set-Cookie;
        client_max_body_size 0;
        server_tokens off;
    
        location / {
            root /opt/tomcat8/webapps/app1/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_http_version 1.1;
            proxy_pass http://127.0.0.1:8080/app1/;
            proxy_redirect http:// https://; 
        }
    }
    

При использовании этой конфигурации при доступе к https://app1.domain.com я получил ошибку «502 Bad Gateway» в Firefox и ошибку «NET :: ERR_CERT_INVALID» в Google Chrome.

Чтобы преодолеть это, я остановил NGINX на двух компьютерах приложений и перенес сервер ettings из каждого nginx .conf файла на прокси-машину (192.168.100.2) nginx .conf.

Я действительно предпочитаю, чтобы "local" NGINX был запущен и работал (мне также нужен HTTPS для работы на локальная сеть).

...