Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

736
Vistas
Cómo configurar nginx X-Forwarded-Port para que sea el puerto de solicitud original

Estoy usando nginx en un escenario de proxy inverso estándar, para pasar todas las solicitudes a /auth a otro host, sin embargo, estoy tratando de usar puertos no estándar.

Mi objetivo final es tener el encabezado X-Forwarded-Port establecido en el puerto en el que entra la solicitud.

Aquí está mi bloque de ubicación en nginx.conf:

 location /auth/ { proxy_pass http://otherhost:8090; 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; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port <VAR>; }

Este nginx se ejecuta en un contenedor acoplable, que está configurado para reenviar solicitudes de 8085 a 80 en el contenedor, de modo que el proceso de nginx escucha en 80:

0.0.0.0:8085->80/tcp

Cuando presiono la URL:

http://localhost:8085/autorización/

Me redirigen correctamente a http://otherhost:8090 , pero falta el encabezado X-Forwarded-Port o es incorrecto.

Donde tengo <VAR> en el bloque original, he intentado lo siguiente:

  • $server_port : este es el puerto en el que nginx está escuchando (80), no el puerto de solicitud.

  • $pass_port : parece ser nulo en mi configuración, por lo que nginx elimina el encabezado.

  • $http_port : este es un puerto aleatorio por solicitud.

  • $remote_port : este es un puerto aleatorio por solicitud.

Puedo cambiar mi configuración en el momento de la implementación para codificar en el puerto conocido de las solicitudes entrantes, pero idealmente podría cambiar el puerto frontal sin ningún cambio en la configuración de nginx.

Revisé la lista de variables nginx pero no puedo encontrar nada como $request_port . ¿Hay alguna forma de lograr mi intención?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La única solución que he encontrado es usar una regla de map para obtener el puerto de la variable http_host , por ejemplo

 map $http_host $port { default 80; "~^[^\:]+:(?<p>\d+)$" $p; }
over 4 years ago · Santiago Trujillo Denunciar

0

Esta es una idea aproximada para escribir Nginx conf, pero estoy seguro de que esto puede ayudarlo en la redirección

 server { listen 80; server_name host.docker.internal; # By default land on localhost:80 to root so in root we copied UI build to the ngnix html dir. # have a look to docker-compose uiapp service. location / { root /usr/share/nginx/html; index index.html index.htm; } # after location add filter, from which every endpoint starts with or comes in endpoint # so that ngnix can capture the URL and reroute it. # like /backend/getUserInfo/<UserId> # In above example /backend is that filter which will be captured by Ngnix and reroute the flow. location /backend { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_pass http://<ContainerName>:<PortNumber>; # In our case Container name is as we setup in docker-compose `beservice` and port 8080 proxy_pass http://beservice:8080; } }

Para más detalles puedes echar un vistazo a este proyecto

https://github.com/dupinder/NgnixDockerizedDevEnv

over 4 years ago · Santiago Trujillo Denunciar

0

Dentro del contenedor no puede acceder a la configuración externa. Y nginx no admite el uso de variables de entorno dentro de la mayoría de los bloques de configuración.

Pero si usa poco , puede definir sus puertos, rutas, etc. en un archivo env simple. Esta definición utilizada por la configuración de docker-compose o la variable env también. Por ejemplo

yourconfig.env

 PROJECT_HOME=.. MAGIC_DOCKER_PORT=8085

archivo poco.yml (configuración principal de su proyecto, definir planes)

 version: '3.0' maintainer: "youremail@yourdomain.com" environment: include: docker/conf/yourconfig.env plan: live: description: "your plan to run live" docker-compose-file: - docker/dc-proxy.yml - docker/dc-other-service.yml # you can define other plans to run local/dev env

y en el archivo de composición docker/dc-proxy.yml (parte relevante):

 version: '3' services: proxy: image: nginx:alpine env_file: conf/yourconfig.env ports: - ${MAGIC_DOCKER_PORT}:80 command: /bin/sh -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"

y, por último, la parte relevante de su plantilla de configuración de /etc/nginx/conf.d/mysite.template

 listen ${MAGIC_DOCKER_PORT}; ... location /auth/ { ... proxy_set_header X-Forwarded-Port ${MAGIC_DOCKER_PORT}; ... }

Utilizo la siguiente estructura de carpetas para organizar archivos. No es obligatorio, pero es fácil de usar para mí porque la estructura de cada proyecto es la misma.

 / docker <- all of docker related files here conf <- env files, service configs, etc scripts <- shell scripts which used by containers dc-*.yml <- separate all services into single compose files poco.yml <- main config, "start here" point project-related-files <- separated by each service

Explicación

Defina un par clave-valor en el archivo .env. Poco lo usa para crear archivos docker-compose, y se usa para crear una variable de entorno en el contenedor nginx. Después de eso, use envsubst para completar la plantilla de configuración de nginx y, por último, inicie el servicio de nginx

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda