# Jellyfin + double reverse proxy ssl nginx

**URL:** <https://www.debian-fr.org/t/jellyfin-double-reverse-proxy-ssl-nginx/89818>\
**Category:** Support Debian\
**Tags:** serveur, buster\
**Created:** [Avril 10, 2024, 8:07 UTC](https://www.debian-fr.org/t/jellyfin-double-reverse-proxy-ssl-nginx/89818 "2024-04-10T20:07:44Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![CanardBlue](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/5e9695/32.png) [@CanardBlue](https://www.debian-fr.org/u/CanardBlue)\
**Post date:** [Avril 10, 2024, 8:07 UTC](https://www.debian-fr.org/t/jellyfin-double-reverse-proxy-ssl-nginx/89818/1 "2024-04-10T20:07:44Z")

</div>

Bonjour, je vous explique ma problématique je n’arrive pas à avoir les publiques qui se connectent sur jellyfin je n’est que l’ip du reverse proxy principal 192.168.1.2 hors je voudrais avoir les ip publiques qui remonte derrière le reverser proxy sur jellyfin dans ces log

Actuellement, j’ai une vm nginx qui sert de reverse proxy uniquement.  
Puis j’ai une deuxième VM avec jellyfin dessus pour des réseaux de sécurité même si c’est dans mon lan la communication entre le reverse proxy et jellyfin sois chifffrée (en auto signée)  
Donc sur la vm jellyfin il y a aussi un nginx qui fais reverse proxy vers jellyfin en 127.0.0.1

Petit schéma explicatif

VM reverse 192.168.1.2 =\> VM nginx + jellyfin  
Chemin réseau vm reverse 192.168.1.2 =\> vm avex nginx qui redirige vers jellyfin en 127.0.0.1 la deuxième vm a jellyfin + nginx

Je ne suis même pas sûr que ce que je demande sois vraiment possible  
j’ai essayé diverse config est le changement de paramétrages, mais rien n’y fais.  
Si vous avez une idée, n’hésitez pas 🙂

voici le vhost du reverse proxy principal qui reçois les connexions externe

```
server {
#HTTP2
listen 443 ssl;
listen [::]:443 ssl;
http2 on;

#http3 / quic (future version)
listen 443 quic;
listen [::]:443 quic;

server_name exemple.exemple.com;

ssl_certificate /etc/letsencrypt/live/exemple.exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.exemple.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/exemple.exemple.com/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 1440m;
ssl_buffer_size 8k;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA>
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
	add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header Access-Control-Allow-Origin "https://exemple.exemple.com" always;
add_header Feature-Policy "microphone 'none'; payment 'none'; sync-xhr 'self' https://exemple.exemple.com" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Set-Cookie "HttpOnly;Secure" always;
add_header Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; battery 'none'; camera 'none'" always;
#add_header Content-Security-Policy "script-src 'self' https://exemple.exemple.com" always;
add_header Permissions-Policy "accelerometer=('none'), geolocation=('none'), fullscreen=(), ambient-light-sensor=(), autoplay=(), battery=('none')" always;
proxy_set_header X-Forwarded-Proto "https";
proxy_set_header X-Forwarded-Host $remote_addr; #header HTTP3 (future version)
add_header Alt-Svc 'h3=":$server_port"; ma=86400';

location / {
    proxy_pass https://192.168.1.3:443/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        #proxy_set_header X-Forwarded-Proto https;
        #proxy_set_header X-Forwarded-Host $remote_addr;
        #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #Désactiver la vérification du certificat
        proxy_ssl_verify off;
 }

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

server {
listen 80;
server_name exemple.exemple.com;

return 301 https://exemple.exemple.com$request_uri;
rewrite ^ https://$http_host$request_uri? permanent;
}

```

et le vhost nginx de la deuxième vm contenant nginx et jellyfin

```
server {
#HTTP2
listen 443 ssl;
listen [::]:443 ssl;
http2 on;

#http3 / quic (future version)
listen 443 quic;
listen [::]:443 quic;

server_name exemple.exemple.com;

ssl_certificate /etc/ssl/nginx/certificate.crt;
ssl_certificate_key /etc/ssl/nginx/private.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 1440m;
ssl_buffer_size 8k;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GC>
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header Access-Control-Allow-Origin "https://exemple.exemple.com" always;
add_header Feature-Policy "microphone 'none'; payment 'none'; sync-xhr 'self' https://exemple.exemple.com" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Set-Cookie "HttpOnly;Secure" always;
add_header Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; battery 'none'; camera 'none'" always;
#add_header Content-Security-Policy "script-src 'self' https://exemple.exemple.com" always;
add_header Permissions-Policy "accelerometer=('none'), geolocation=('none'), fullscreen=(), ambient-light-sensor=(), autoplay=(), battery=('none')" always;
proxy_set_header X-Forwarded-Proto "https";
#header HTTP3 (future version)
add_header Alt-Svc 'h3=":$server_port"; ma=86400';

location / {
    proxy_pass http://127.0.0.1:8096/;
    #proxy_set_header Host $host;
    #proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #add_header Alt-Svc 'h3=":$server_port"; ma=86400';
 }

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

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Avril 10, 2024, 8:31 UTC](https://www.debian-fr.org/t/jellyfin-double-reverse-proxy-ssl-nginx/89818/2 "2024-04-10T20:31:02Z")

</div>

> [@CanardBlue](#):
>
> Actuellement, j’ai une vm nginx qui sert de reverse proxy uniquement.  
> Puis j’ai une deuxième VM avec jellyfin dessus pour des réseaux de sécurité même si c’est dans mon lan la communication entre le reverse proxy et jellyfin sois chifffrée (en auto signée)

Tu pouvais gérer le chiffrement directement depuis le premier nginx, je vois pâs pourquoi t’emmerder avec un deuxième reverse proxy.

> [@CanardBlue](#):
>
> je n’arrive pas à avoir les publiques qui se connectent sur jellyfin je n’est que l’ip du reverse proxy principal 192.168.1.

Au vue de ta config je pense que c’est plutôt le vhost de jellyfin qui ne remonte pas la bonne ip, regarde avec un simple info.php tout bidon si tu récupères bien la bonne ip distante et procède …  
Si c’est le cas tu n’aura qu’a switcher dans la conf du vhost avec une bidouille comme ça :

```auto
        fastcgi_param REMOTE_ADDR $http_x_real_ip;
        #la suite de ton vhost

```

Normalement Jellyfin devrait sans doute le faire, as-tu regarder leur documentation aussi ?

[https://jellyfin.org/docs/general/networking/nginx/](https://jellyfin.org/docs/general/networking/nginx/)

---

<div class="post-metadata">

**Author:** ![CanardBlue](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/5e9695/32.png) [@CanardBlue](https://www.debian-fr.org/u/CanardBlue)\
**Post date:** [Avril 11, 2024, 8:50 UTC](https://www.debian-fr.org/t/jellyfin-double-reverse-proxy-ssl-nginx/89818/3 "2024-04-11T08:50:53Z")

</div>

Hello  
Merci pour les informations pour quoi j’ai deux reverse  
Disont que j’essaye d’économiser mes IP publique et de tout mettre derrière un reverse et aussi séparer les fonctions

La vm reverse proxy dois faire que du reverse  
La VM jellyfin elle gère jellyfin avec une carte graphique NVIDIA allouer pour cette VM et vue les bug qui peu y avoir avec les drivers NVIDIA je préfère évité de mettre  
Truc exotique sur le reverse proxy qui et un point central important

Et pour le double chiffrement c’est parce entre mon reverse proxy nginx principal et la VM je ne souhaite pas que se sois en clair dans le l’an même si c’est sensé être safe

Je ne suis pas sûr que sa réponde à ta question au finales XD

J’espère avoir été compressible dans mes propos

En tout cas merci pour ton intervention sa va permettre de debuge un peu tout sa et voir qui est le coupable
