
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 proxyName
und den proxyPort
Attributen 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.