Aller au contenu

Reverse proxy

Les navigateurs n’autorisent l’accès au micro que sur des origines sécurisées : Inari doit donc être servi en HTTPS. Un reverse proxy termine le TLS et transmet le trafic à Inari sur le port 3030.

Trois règles s’appliquent à tous les proxys :

  1. Transmettez le port web (3030) et activez les upgrades WebSocket : l’application utilise /ws.
  2. Ne faites pas passer le port WebRTC (44444, UDP et TCP) par le proxy. L’audio va directement des joueurs vers Inari, ce port doit donc être ouvert dans votre pare-feu.
  3. SERVER_PUBLIC_IP doit être l’IP publique de la machine, pas le domaine du proxy.

Dans les exemples, remplacez inari.example.com par votre domaine et 127.0.0.1:3030 par l’adresse de votre conteneur Inari.

/etc/nginx/sites-available/inari
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name inari.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name inari.example.com;
ssl_certificate /etc/letsencrypt/live/inari.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/inari.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3030;
proxy_http_version 1.1;
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;
# WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}

Obtenez un certificat avec certbot --nginx -d inari.example.com si vous n’en avez pas encore.

Caddy obtient et renouvelle les certificats automatiquement et gère les WebSockets nativement.

Caddyfile
inari.example.com {
reverse_proxy 127.0.0.1:3030
}

Avec des labels Docker, en supposant qu’un entrypoint websecure et un résolveur de certificats letsencrypt existent déjà :

docker-compose.yml
services:
inari:
image: thedrewen/inari:stable
restart: unless-stopped
environment:
API_KEY: change-me
SERVER_PUBLIC_IP: 203.0.113.10
ports:
- "44444:44444/udp"
- "44444:44444/tcp"
labels:
- traefik.enable=true
- traefik.http.routers.inari.rule=Host(`inari.example.com`)
- traefik.http.routers.inari.entrypoints=websecure
- traefik.http.routers.inari.tls.certresolver=letsencrypt
- traefik.http.services.inari.loadbalancer.server.port=3030

Traefik transmet automatiquement les WebSockets. Seul le port WebRTC est publié sur l’hôte ; le port web est atteint via Traefik.

Activez d’abord les modules nécessaires :

Fenêtre de terminal
a2enmod proxy proxy_http proxy_wstunnel rewrite ssl headers
/etc/apache2/sites-available/inari.conf
<VirtualHost *:80>
ServerName inari.example.com
Redirect permanent / https://inari.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName inari.example.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/inari.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/inari.example.com/privkey.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3030/$1 [P,L]
ProxyPass / http://127.0.0.1:3030/
ProxyPassReverse / http://127.0.0.1:3030/
</VirtualHost>
  1. Ajoutez un Proxy Host avec votre domaine.
  2. Schéma http, hôte/IP d’Inari, port 3030.
  3. Activez Websockets Support et Block Common Exploits.
  4. Dans l’onglet SSL, demandez un certificat Let’s Encrypt et activez Force SSL.

Le proxy de Cloudflare (nuage orange) peut transporter la page web et le WebSocket, mais pas le port WebRTC. Assurez-vous que SERVER_PUBLIC_IP est la vraie IP de votre serveur et que le port 44444 est joignable directement, sans passer par Cloudflare.

  • https://inari.example.com/ affiche la page d’Inari avec un certificat valide.
  • Les outils de développement du navigateur montrent une connexion wss://inari.example.com/ws avec le statut 101.
  • L’audio fonctionne depuis un second réseau : cela valide le port WebRTC.