Creé este sencillo ejemplo para corregir y comprobar los errores que tengo en otro proyecto más complejo. Así que tengo un archivo docker-compose con 1 servidor web y 2 aplicaciones y un archivo nginx conf.
Tenga en cuenta que lo estoy probando con Docker Quick Start Terminal para Windows 10 Home Edition , pero lo probé incluso en Ubuntu 18.04 y el resultado es el mismo.
Ir a: http://192.168.99.100:8080/
Salida predeterminada:
¡Funciona!
El único problema aquí es con app2, ya que no puedo acceder a app2 .
Ir a http://192.168.99.100:8080/app2 .
Error:
Extraviado
La URL solicitada no se encontró en este servidor.
No entiendo por qué no puedo hacer eso y dónde está el error.
location /app2 después de location / , pero nada cambiólocation /app2 a location /foo , incluso aquí el mismo resultado.location / no funciona. (por ejemplo location /bar location /foobar location /test ) Cambie location / para referir la aplicación 2 en lugar de la aplicación 1, y funciona, pero de esta manera no puedo llegar a la aplicación 1.
location / { proxy_pass http://app2:80 ; }location / { proxy_pass http://app2:80 ; }ubicación /aplicación1 { contraseña_proxy http://aplicación1:80 ; }
docker-compose.yml
version: "3.7" services: web: image: nginx:alpine volumes: - ./nginx.conf:/etc/nginx/nginx.conf ports: - 8080:80 networks: - app1_net - app2_net app1: image: httpd:latest networks: - app1_net app2: image: httpd:latest networks: - app2_net networks: app1_net: app2_net: nginx.conf
events {} http { server{ listen 80; listen [::]:80; server_name localhost; location /app2 { proxy_pass http://app2:80; } location / { proxy_pass http://app1:80; } } }Esta es la forma correcta, use una expresión regular para permitir la navegación de subcarpetas y una coincidencia perfecta en /app2 para redirigir el tráfico en http://app2 :
location ~ ^/app2/(.*)$ { proxy_pass http://app2/$1; } location = /app2 { proxy_pass http://app2/; } location / { proxy_pass http://app1; }He agregado otra respuesta de stackoverflow aquí.
Se resume aquí:
/appx-uri/bla/blo/bli a /appx-uri/bla/blo/bli/ en lugar de /bla/blo/bli/ que es el comportamiento predeterminado de nginx ./repairapp/static/ . Agregar la directiva rewrite ^/repairapp/([^static].*[^/])$ /repairapp/$1/ permanent; en el bloque del servidor lo arregla.
entonces tengo
rewrite ^/repairapp/([^static].*[^/])$ /repairapp/$1/ permanent;location /repairapp/static/ {location /repairapp/ {