Mise en place d'un reverse proxy pour activer le cast sur Jellyfin

What app is this about, and its version: Jellyfin 10.11.6~ynh1
What YunoHost version are you running: 12.1.39
What type of hardware are you using: Other(?)

Describe your issue

Bonjour,
j’ai installé Jellyfin sur un sous-domaine d’un domaine acheté chez OVH et géré avec l’api sur Yunohost.
J’essaie de permettre d’utiliser la fonction cast du client et si j’ai bien compris il faut mettre en place un reverse proxy. C’est bien quelque chose que je dois mettre en place sur le serveur lui-même en modifiant la configuration de nginx ?
Est-ce que quelqu’un pourrait m’éclairer sur la procédure si elle est possible ? j’ai peur de tout casser

Merci

Edit: j’ai vu les applications Zoraxy et Reverse Proxy sur le catalogue, je pourrais faire ça avec l’une d’elles ?

Share relevant logs or error messages

aucun

Je ne suis pas certain de comprendre : jellyfin a été installé via le catalogue de YunoHost ?

Si oui, il y a déjà un reverse-proxy nginx configuré.

Oui, Jellyfin a bien été installé via le catalogue.

Je n’ai jamais réussi à faire fonctionner le cast avec Jellyfin, la version web me dit que Google Cast n’est pas pris en charge et l’application Jellyfin pour android ne trouve aucun appareil dans le menu “cast”.
En faisant quelques recherches j’ai vu que certains y étaient parvenus en mettant en place un reverse proxy et je me suis dit que c’est sûrement la solution. (comme ici ou ici)
Voilà où j’en suis.

J’ai l’impression que c’est un peu la galère de réussir à utiliser Jellyfin avec un Chromecast, je ne sais pas si quelqu’un ici y arrive mais je ne comprends pas ce que je devrais configurer.

C’est donc configuré ici (installé sur /etc/nginx/conf.d/domain.tld.d/jellyfin.conf)

De mon côté ça fonctionnait aux dernières nouvelles. Tu peux partager les journaux de Jellyfin après un essai ?

Voici le log de ma dernière tentative: https://paste.yunohost.org/afenuqamal
Là j’ai simplement lancé une vidéo et tenté de la caster. En cliquant sur l’icône du cast j’ai bien un menu “Jouer sur” qui apparaît mais aucun item à cliquer.

Je viens de voir que, dans ma configuration ‘réseau’ de Jellyfin, https n’est pas activé. Pourtant j’ai bien https dans les url que j’utilise. Ça peut être lié ?

Non c’est normal, c’est décoché chez moi aussi.

@cjd le serveur est auto-hébergé ou sur un vps ?

Il est auto-hébergé

et le chromecast est sur le même réseau local ? Ou du moins, serveur et chromecast sont-ils sur deux réseaxu qui peuvent communiquer ?

Le cast ne fonctionne ni chez moi où le serveur et le chromecast sont sur le même réseau ni chez des proches qui ne sont pas connectés à mon réseau.

J’ai regardé la console de débogage de Chrome en me connectant au serveur de Jellyfin et j’y ai repéré cette erreur: Not initializing chromecast: CastReceiverId is undefined

Dans les options de lecture de l’application Android, j’ai aussi remarqué que l’option pour choisir la version de Google Cast est vide alors qu’il me semble que je devrais avoir le choix entre stable et unstable.

Est-ce que tu peux essayer de rajouter la ligne suivante

more_set_headers “Content-Security-Policy: default-src https: data: blob: ; img-src ‘self’ https://* ; style-src ‘self’ ‘unsafe-inline’; script-src ‘self’ ‘unsafe-inline’ ``https://www.gstatic.com`` ``https://www.youtube.com`` blob:; worker-src ‘self’ blob:; connect-src ‘self’; object-src ‘none’; font-src ‘self’” always;

dans le fichier nginx de Jellyfin, c’est-à-dire dans /etc/nginx/conf.d/tondomaine.tld.d/jellyfin.conf (tout en haut, avant tout le reste).

(attention à modifier tondomaine.tld.d par ton domaine sur lequel Jellyfin est installé (sans oublier de rajouter .d)

Ensuite redémarre nginx et dis-moi si ça aide ?

Après le redémarrage, je n’ai plus accès à mon serveur sur le web. Par contre l’accès ssh est ok. Voici le fichier jellyfin.conf, au cas où j’aurais fait une erreur:

more_set_headers “Content-Security-Policy: default-src https: data: blob: ; img-src ‘self’ https://* ; style-src ‘self’ ‘unsafe-inline’; script-src ‘self’ ‘unsafe-inline’ ``https://www.gstatic.com`` ``https://www.youtube.com`` blob:; worker-src ‘self’ blob:; connect-src ‘self’; object-src ‘none’; font-src ‘self’” always;
 rewrite ^/app$ /app/ permanent;
location /app/ {

  proxy_pass http://127.0.0.1:8095/app/;
  proxy_pass_request_headers on;
  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;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection $http_connection;

  # Disable a specific header for compatability with LG TV app
  # Fixes https://github.com/YunoHost-Apps/jellyfin_ynh/issues/125
  if ($http_user_agent ~ Web0S) {
    more_set_headers "X-Frame-Options : ";
  }

  # Disable buffering when the nginx proxy gets very resource heavy upon streaming
  proxy_buffering off;

  # Include SSOWAT user panel.
  include conf.d/yunohost_panel.conf.inc;
}
location /app/socket {
  proxy_pass http://127.0.0.1:8095/app_/socket;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  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;
  proxy_set_header X-Forwarded-Protocol $scheme;
  proxy_set_header X-Forwarded-Host $http_host;
}

Après le redémarrage donc, je n’ai plus d’accès web à aucun des domaines liés au serveur (pour certains services j’ai gardé un domaine *.nohost.me en plus d’un domaine acheté). Tout est revenu à la normale en retirant la ligne et en redémarrant.

Il semble que tu as enlevé la partie avant cela, ce qui expliquerait le problème.

Pour éviter d’avoir une telle erreur à l’avenir, il est possible de faire nginx -t avant de redémarrer nginx pour vérifier que tout est en ordre.

Je ne comprends pas, il est sensé y avoir quelque chose avant rewrite ^/app$ /app/ permanent; ?
Parce que je n’avais jamais touché à ce fichier et il commençait par cette ligne

Du coup, par curiosité, j’ai lancé nginx -t après avoir ajouté la ligne

more_set_headers “Content-Security-Policy: default-src https: data: blob: ; img-src ‘self’ https://* ; style-src ‘self’ ‘unsafe-inline’; script-src ‘self’ ‘unsafe-inline’ ``https://www.gstatic.com`` ``https://www.youtube.com`` blob:; worker-src ‘self’ blob:; connect-src ‘self’; object-src ‘none’; font-src ‘self’” always;

et j’ai cette erreur :
[emerg] 17210#17210: unknown directive "img-src" in /etc/nginx/conf.d/mondomaine.tld.d/jellyfin.conf:1

Ah non mea culpa, c’est que tu as installé Jellyfin sur un chemin (domaine.tld/jellyfin).

Mmh bizarre, j’imagine que le texte est mal formaté. Je vais essayer de regarder un peu de mon côté

A priori il s’avère que le module headers-more n’est pas installé. J’ai donc tenté en utilisant la directive add_header à la place de more_set_headers:

add_header Content-Security-Policy "default-src https: data: blob:; img-src 'self' https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com https://www.youtube.com blob:; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; font-src 'self'" always;

Ça passe le test nginx -t mais le problème reste entier.

Je ne suis pas du tout un habitué de nginx, mais plutôt d’Apache.
Bref, merci de m’aider en tout cas.