Пример прокси-сервера HTTPS

Требования:
  • Сертификат сервера не должен быть самоподписанным;
  • Сертификат CA необходимо добавить в Trusted Roots (допустимо использовать самоподписанный сертификат). Добавить в доверенные нужно как на хосте сервера, так и на всех клиентских хостах.
  • При запуске сервера под Windows нужно добавить следующую настройку запуска JVM:
    -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT
http {
    include       mime.types;
    default_type  application/octet-stream;
    client_max_body_size 10000m;
     
    error_log   logs/error.log debug;
 
    sendfile        on;   
    keepalive_timeout  65;
 
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
 
    upstream httpServer {
        server localhost:9090;
    }
  
    upstream debugServer {
        server localhost:9091;
    }
 
    # Redirect HTTP to HTTPS
    server {
        listen          80;
        server_name     proxy server.example.com;       
        return 301      https://server.example.com$request_uri;
    }
     
    # HTTPS Proxy Server
    server {
        listen       443 ssl;
        server_name  server.example.com;
 
        # Ключ сертификата должен быть с путым паролем       
        ssl_certificate         c:/app/nginx/proxy.crt;        
        ssl_certificate_key     c:/app/nginx/proxy_free.key;    
        ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
 
        # Говорим браузеру, что сервер доступен только по HTTPS
        # Это предотвращает возможность перехода обратно на HTTP с атакой по назащищенному каналу
        add_header Strict-Transport-Security 'max-age=604800';
 
        # HTTP       
        location / {          
            proxy_pass http://httpServer/;       
 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_set_header X-Forwarded-Proto $scheme;           
            proxy_http_version 1.1;
        }
 
        # Debug (Web Sockets)   
        location /debug {
            proxy_pass http://debugServer/;           
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;           
            proxy_http_version 1.1;            
        }      
    }