J'essaye de reverse-proxy un websocket, ce que j'ai fait avec nginx avant sans problème. Bizarrement, je n'arrive pas à recréer mon succès antérieur avec quelque chose d'aussi simple. J'ai été à plusieurs reprises sur le fichier de configuration, mais ne semble pas trouver mon erreur.
Voici ma pleine default.conf
:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
location /api/ {
proxy_pass ${API_LOCATION};
}
location / {
proxy_pass ${UI_LOCATION};
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
L'erreur que je reçois:
2016/10/10 23:30:24 [emerg] 8#8: invalid number of arguments in "map" directive in /etc/nginx/conf.d/default.conf:1
nginx: [emerg] invalid number of arguments in "map" directive in /etc/nginx/conf.d/default.conf:1
Et le Dockerfile exact que j'utilise, au cas où vous voudriez répliquer ma configuration (enregistrer default.conf
comme conf.templates/default.conf
par rapport au Dockerfile:
FROM nginx
COPY conf /etc/nginx/conf.templates
CMD /bin/bash -c "envsubst < /etc/nginx/conf.templates/default.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
La commande envsubst
remplace toutes les occurrences de $vars
, comprenant $http_upgrade
et $connection_upgrade
. Vous devez fournir une liste de variables à remplacer, par exemple:
envsubst '${API_LOCATION},${UI_LOCATION}' < /etc/nginx/conf.templates/default.conf
Voir aussi: Remplacer uniquement des variables spécifiques par envsubst
De plus, dans le docker-compose
configuration vous devez utiliser le double $$
escape pour désactiver la substitution de variable:
FROM nginx
COPY conf /etc/nginx/conf.templates
CMD /bin/bash -c "envsubst '$${API_LOCATION},$${UI_LOCATION}' < /etc/nginx/conf.templates/default.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"