Je mets en place un serveur avec une application Phoenix qui utilisera les websockets. Localement, WebSocket fonctionne, mais j’ai des problèmes pour le configurer sur mon serveur de transfert. Est-ce que quelqu’un peut m’aider à configurer des websockets sur mon serveur? J’ai nginx configuré comme ceci:
map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream my_app { server 0.0.0.0:6443; } server { listen 80; listen 443; server_name example.com; ssl on; ssl_certificatee /path/to/wildcard.crt; ssl_certificatee_key /path/to/wildcard.key; ssl_prefer_server_ciphers on; if ($request_uri ~ "^[^?]*//") { rewrite "(.*)" $scheme://$host$1 permanent; } if ( $scheme = http ){ rewrite ^ https://$host$request_uri permanent; } location / { allow all; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Cluster-Client-Ip $remote_addr; # WebSockets proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass https://my_app; } }
et ma configuration Phoenix est:
use Mix.Config config :my_app_core, MyAppCoreWeb.Endpoint, load_from_system_env: false, url: [host: "https://example.com", port: {:system, "PORT"}], http: [port: {:system, "PORT"}], https: [otp_app: :my_app_core, port: 6443, keyfile: "/path/to/wildcard.key", certfile: "/path/to/wildcard.crt"], server: true, root: ".", watchers: [], version: Mix.Project.config[:version], check_origin: false config :logger, :console, format: "[$level] $message\n" config :phoenix, :stacktrace_depth, 2 config :phoenix, :serve_endpoints, true import_config "workspace.secret.exs"
Je teste la connexion avec http://phxsockets.io/ et je reçois
failed: Error during WebSocket handshake: Unexpected response code: 400
Quelqu’un peut-il aider avec cela?
La configuration ci-dessus fonctionne. Le problème de mon côté était d’utiliser le mauvais fichier de configuration nginx contenant les anciens parameters.