Estoy intentando implementar una aplicación en Internet a través del proxy inverso nginx. Mi aplicación está completamente en contenedores y mi archivo de configuración nginx en / etc / nginx / sites-available coincide con el ejemplo de shinyproxy aquí: https://www.shinyproxy.io/security/
servidor {
escucha 80;
server_name shinyproxy.yourdomain.com;
reescribir ^ (. *) https: // $ nombre_servidor $ 1 permanente;
}
servidor {
escuchar 443;
server_name shinyproxy.yourdomain.com;
access_log /var/log/nginx/shinyproxy.access.log;
error_log /var/log/nginx/shinyproxy.error.log error;
ssl encendido;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/certs/yourdomain.com.crt;
ssl_certificate_key /etc/ssl/private/yourdomain.com.key;
localización / {
proxy_pass http://127.0.0.1 : 8080 /;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_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;
}
}
Mi dominio tiene certificación https y si visito mi dominio veo el mensaje "¡Bienvenido a nginx!" pantalla. Sin embargo, después de iniciar mi aplicación para escuchar en el puerto 8080 con el comando:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
si visito mi dominio, todavía veo el mensaje "¡Bienvenido a nginx!" pantalla. Nginx no está transfiriendo mi dominio a mi aplicación brillante. ¿Alguna idea sobre por qué el proxy inverso no funciona? ¿Lancé mi aplicación brillante en contenedor en el puerto incorrecto?
Su directiva proxy_pass de motor inverso se está enrutando a la red local de la máquina host (127.0.0.1). Cuando coloca sus aplicaciones en contenedores, está pasando de una red de host local a una red de ecosistema de Docker. Por lo tanto, es importante cómo inicie y publique su shinyproxy en el host. Consulte este artículo sobre redes en la ventana acoplable
Gracias por la ayuda. Todavía no he encontrado una solución después de leer el artículo y resolver más problemas. ¿Necesito cambiar la parte 127.0.0.1 del pase de proxy? ¿O necesito hacer girar mi contenedor docker para escuchar en otro lugar que no sea 8080: 8080?
¿Cómo empiezas tu shinyproxy?
Hola @ lucius-verus-fan
Solo para estar seguro, con el siguiente comando está intentando iniciar ShinyProxy, ¿verdad?
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
Entonces, ¿ wind_container
es un contenedor de cliente que creó con ShinyProxy?
En ese caso, no creo que el problema tenga que ver con la red Docker, la parte -p 8080:8080
del comando asegura que el puerto 8080 se reenvíe a su máquina local, independientemente de en qué red Docker se esté ejecutando el contenedor.
En cambio, creo que el error está en su configuración de nginx, debe cambiar estas líneas para que coincidan con su configuración:
server_name shinyproxy.yourdomain.com;
rewrite ^(.*) https://$server_name$1 permanent;
# a few lines lower
server_name shinyproxy.yourdomain.com;
Debe especificar el nombre de dominio correcto de su servidor allí. Ahora le está diciendo a nginx que procese cualquier solicitud en shinyproxy.yourdomain.com
como una solicitud a ShinyProxy, cualquier otra solicitud resultará en un 404. Por lo tanto, dado que no accede a ella por encima de shinyproxy.yourdomain.com
nginx dará eres un 404.
Hola @LEDfan y @jaysnm
El comando que estoy usando para iniciar ShinyProxy es:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
La configuración de nginx que adjunté en mi primer comentario no es la configuración de nginx que estoy usando, ese es el ejemplo que se da en el sitio web shinyproxy. Adjuntaré el archivo de configuración de nginx que estoy usando a continuación.
server {
listen 80;
server_name windts.app www.windts.app;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name windts.app www.windts.app;
access_log /var/log/nginx/shinyproxy.access.log;
error_log /var/log/nginx/shinyproxy.error.log error;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/certs/windts.app.crt;
ssl_certificate_key /etc/ssl/private/windts.app.key;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_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;
}
}
Al visitar el dominio windts.app o www.windts.app , se le envía a la página de bienvenida de Nginx en lugar de pasar a la aplicación shinyproxy. La aplicación se ejecuta correctamente tanto a nivel local como en un servidor remoto. Es simplemente una cuestión de conectar el dominio al contenedor que ejecuta la aplicación shinyproxy.
He resuelto el problema. Nginx no mostraba la aplicación shinyproxy porque me había olvidado de vincular mi archivo de configuración nginx en / etc / nginx / sites-available / a / etc / nginx / sites-enabled. Después de vincular mi configuración en ambos directorios con el comando ls -s
y eliminar el archivo de configuración predeterminado de / etc / nginx / sites-enabled, la aplicación shinyproxy se mostró en mi dominio.
Para el registro, es ln -s
[sic], pero gracias por compartir los comentarios y es bueno que tu problema esté resuelto.
Comentario más útil
He resuelto el problema. Nginx no mostraba la aplicación shinyproxy porque me había olvidado de vincular mi archivo de configuración nginx en / etc / nginx / sites-available / a / etc / nginx / sites-enabled. Después de vincular mi configuración en ambos directorios con el comando
ls -s
y eliminar el archivo de configuración predeterminado de / etc / nginx / sites-enabled, la aplicación shinyproxy se mostró en mi dominio.