Konfigurieren von Nginx und Tomcat für den Zugriff auf HTTPS-Inhalte

Konfigurieren von Nginx und Tomcat für den Zugriff auf HTTPS-Inhalte

Ich verwende nginx als Load Balancer und Reverse-Proxy für Java Spring Boot + Angular-Anwendung auf Tomcat. Ich habe insgesamt 3 Server, 1 hat nginx und auf den anderen beiden werden Anwendungen gehostet.

Ich habe HTTPS und SSL auf nginx konfiguriert, damit Benutzer über HTTPS kommunizieren können. Mit der folgenden Konfiguration kann ich die Anmeldeseite der Anwendung über https erreichen, aber wenn ich auf die Anmeldeschaltfläche klicke, erhalte ich eine Fehlermeldung in der Konsole

Gemischter Inhalt: Die Seite unter „https://example/app/login“ wurde über HTTPS geladen, forderte aber einen unsicheren XMLHttpRequest-Endpunkt „http://172.16.1.70:8081/app/api/login“ an. Diese Anforderung wurde blockiert; der Inhalt muss über HTTPS bereitgestellt werden.

Hier ist meine Nginx-Konfiguration

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    access_log  logs/access.log;
    
    # Load Balancer Setup
    upstream tomcat {
        server 172.168.1.10:8443;
        server 172.168.1.15:8443;
        ip_hash;
    }
    server {
        listen 80 ;
        listen  443 ssl http2;
        
        server_name  localhost;
        ssl_certificate      C:/ssl/sslcert.pem;
        ssl_certificate_key  C:/ssl/sslcert-key.pem;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
                
    location /app {
        proxy_read_timeout 120;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cookie_path ~*^/.* /;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat;
        }
    
    # Auto redirect to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
        }
    
    # Auto redirect to localhost/app
    location / {
        return 307 /app;
        }
    }
}

Hier ist meine Tomcat-Server.xml-Konfiguration

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"              
               redirectPort="8443"/>
               
    <Connector port="8443" protocol="HTTP/1.1"
           connectionTimeout="20000"
           proxyPort="443"
           scheme="https" secure="true"
            />

Ich habe versucht, das Debuggen durchzuführen, indem ich die Registerkarte „Netzwerk“ überprüft habe. Die Anmeldeseite wurde irgendwie umgeleitet aufhttp://172.168.1.10:8081/app/api/loginanstatthttp://172.168.1.10:8443/app/api/login.

Wie kann ich dieses Problem lösen? Ich bin für jede Hilfe dankbar.

Antwort1

Konfigurieren Sie Ihren Backend-Server so, dass er die URL bereitstellt, die auf den Reverse-Proxy verweist. Bei Tomcat geschieht dies normalerweise mit den proxyNameund den proxyPortAttributen am Connector. Bei Ihnen fehlt ersteres.

Je nachdem, wie die auf Tomcat ausgeführte Anwendung aufgebaut ist, kann es erforderlich sein, sie auch in einer anwendungsspezifischen Konfiguration zu konfigurieren.

verwandte Informationen