Wenn man einen UniFi Controller hinter einen ReverseProxy (in meinem Fall einen nginx) betreibt bekommt man oft nach dem einloggen einen WebSocket connection error

Das lässt sich einfach mit einer kleinen Konfig-Änderung am nginx-ReverseProxy beheben:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection „upgrade“;

Diese Zeilen bewirken ein sauberes Weiterleiten von WebSocket-Aufrufen. Nachdem diese Zeilen die die Konfiguration eingetragen und der nginx seine Konfiguration neu geladen hat funktioniert der Aufruf ohne den Fehler 🙂

Hier noch meine nginx-Konfig:

server {
        listen 80;
        listen [::]:80;
 
        server_name unifi.domain.net;
 
        include /etc/nginx/snippets/letsencrypt.conf;
 
        # Redirect any HTTP request to HTTPS
        location / {
        return 301 https://unifi.domain.net;}
 
        error_log  /var/log/nginx/unifi-error.log;
        access_log /var/log/nginx/unifi-access.log;
}

server {
listen 443;
listen [::]:443;
server_name unifi.domain.net;

#cipers
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1; 
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; 
ssl_stapling on; 
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

# Enable SSL
ssl on;
ssl_certificate /etc/letsencrypt/live/unifi.domain.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/unifi.domain.net/privkey.pem;
ssl_session_timeout 5m;

# Set global proxy settings
proxy_read_timeout      360;

proxy_http_version 1.1;
proxy_pass_request_headers on;

proxy_pass_header       Date;
proxy_pass_header       Server;

proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        Accept-Encoding "";

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

location / {proxy_pass https://localhost:8443;}

error_log /var/log/nginx/unifi-error.log;
access_log /var/log/nginx/unifi-access.log;
}

Quelle: nginx.org