[AIDE ]unable to connect to home assistant websocket api

Hello

Apres avoir eu des soucis avec mon reverse proxy voir ici 400 BAD REQUEST

J’ai eu comme erreur :rage:

unable to connect to home assistant

Pourtant mes redirection est autres étais OK

Le souci venait du fait que je devais modifié mon fichier
/etc/nginx/sites-available/hello.fr

Voici le fichier corrigé

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream websocket {
   server 127.0.0.1:8080;
}

server {
    server_name jd.hello.fr www.jd.hello.fr;
    location /websocket {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $host;
    }

    location / {
        proxy_pass http://192.168.2.7:8123;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
		proxy_cache_bypass $http_upgrade;
        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;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/jd.hello.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/jd.hello.fr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = www.jd.hello.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = jd.hello.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name jd.hello.fr www.jd.hello.fr;
    return 404; # managed by Certbot
}

Mon fichier avant correction

server {
    server_name jd.hello.fr www.jd.hello.fr;


    location / {
        proxy_pass http://192.168.2.7:8123;
        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 X-Forwarded-Proto $scheme;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/jd.hello.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/jd.hello.fr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}

server {
    if ($host = www.jd.hello.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = jd.hello.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name jd.hello.fr www.jd.hello.fr;
    return 404; # managed by Certbot




}

Tu es sur que la partie Location /websocket et son pendant upstream websocket est indispensable ?
Tu as quelquechose qui écoute en local sur ton proxy sur le port 8080 ??

Pour moi, seules les lignes

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;

sont importantes pour la connexion à la websocket.

Hello

A vrai dire j’ai pas encore tout vérifié

Oui le port 8080 j’en ai besoin pour mes MagicMirror

Je dois encore affiné le cas échéant je modifierais mon premier post

Hello

Je viens de faire faire des tests en suivant tes conseilles

Alors je vire

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

Plantage de Nginx

Si je vire

upstream websocket {
   server 127.0.0.1:8080;
}

Plantage Nginx

Si les deux d’un coup, plantage aussi

Et

upstream websocket 

Plantage aussi,

Pourtant je relance Nginx a chaque modification

 sudo systemctl restart nginx

Donc les lignes me semble indispensable

Alors si tu enlèves seulement des bouts, c’est normal que cela plante :wink:
Pour expliquer, parce que c’est important de comprendre ce que l’on fait :

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

Cette partie va créer une variable $connection_upgrade qui, en fonction du contenu de $http_upgrade va contenir soit upgrade, soit close.

upstream websocket {
   server 127.0.0.1:8080;
}

Cette partie va référencer un serveur « distant » sous le nom de websocket. Ce serveur est en fait sur la même machine que celle ou tourne ton nginx (127.0.0.1 = localhost), sur le port 8080

Ces deux références (websocket et $connection_upgrade) sont utilisés dans le bloc ci-dessous

location /websocket {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $host;
    }

Cette partie dit de rediriger les requêtes h…ps://jd.hello.fr/websocket vers http://127.0.0.1:8080, en y ajoutant des entêtes Upgrade Connection et Host

Si tu enlèves des blocs indépendamment, comme ils se référencent entre eux, c’est tout à fait normal que cela plante.

Quand je disais que pour moi, ces 3 blocs ne servaient à rien, je parlais juste pour HomeAssistant.
D’une part, je ne sais pas ce qui tourne (sur la même machine que le proxy) sur le port 8080. Tu me disais que c’est pour tes MagicMirrors, donc, ok. Mais est-ce que tes MagicMirrors ont une interfaces qui doit être publiée à l’extérieure sur le chemin /websocket ?

Pour HA, la partie importante est bien celle du dessous :

    location / {
        proxy_pass http://192.168.2.7:8123;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
		proxy_cache_bypass $http_upgrade;
        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;
    }

Là, tu dis à nginx de renvoyer les requetes arrivant sur h…ps://jd.hello.fr/ vers http://192.168.2.7:8123, qui est, je le suppose, ton serveur qui héberge HA.
La partie important pour la gestion de la websocket de HA, ce sont les fameuses entêtes Upgrade et Connection

++

1 « J'aime »

Hello

Super de détaillé avec résumé cela m’en apprend ( merci )

La tu fais que j’ai pc , odroid, nas, , mqtt, serveur web qui tourne un peu partout dans la maison , j’essai de faire ceci

Serveur avec Nginx direct sur pc
Ensuite Install de docker , pour installé en container
MQTT, Hassio, et diverses autres containers

erreur de topic désolé