Estoy usando express con express-http-proxy como proxy para algunas de mis aplicaciones. Tengo subdominios específicos como parte de mi aplicación de los que quiero obtener el valor.
Por ejemplo, hago una solicitud a mi proxy a través de curl
curl google.com --proxy https://subdomainX.localhost:8000 Quiero leer el valor de subdomainX . Sin embargo, la solicitud Express solo tiene la URL y los valores de host del dominio al que me estoy dirigiendo (google.com en este caso).
Quiero leer el requisito de mi propio servidor si esto es posible.
Este es el siguiente código de servidor de muestra:
import express from "express"; import proxy from "express-http-proxy"; const proxyApp = express(); proxyApp.use((req, res, next) => { // I'd like to get the subdomain subdomainX here // so I can perform logic with it const subdomain = req.headers.host // this is google.com if (subdomain === "subdomainX") { next(); return; } res.send("Not authorized"); }); proxyApp.use( proxy( (req) => { return req.protocol + "://" + req.get("host"); }, { https: true, } ) );El cliente resuelve el nombre de host del proxy en una dirección IP a través del servidor de nombres de dominio y luego se conecta a esa dirección IP. Luego usa esta conexión para enviar una solicitud HTTP que parece
GET http://google.com HTTP/1.1 Host: google.comy no contiene ningún rastro del nombre de host del proxy.
Solo el servidor de nombres de dominio conoce el nombre de host del proxy, no el servidor proxy en sí.
Pero si su aplicación puede especificar diferentes nombres de host de proxy para diferentes solicitudes, podría igualmente especificar un encabezado adicional en la solicitud y "puede realizar la lógica con" ese encabezado. El cliente entonces
curl google.com -H "X-Proxy-Subdomain:subdomainX" --proxy https://localhost:8000y su proxy eliminaría ese encabezado antes de reenviar la solicitud a google.com.
Una observación adicional: el código que proporcionó anteriormente solo funciona si el cliente realiza una solicitud HTTP. Si el cliente realizó una solicitud HTTPS, el proxy solo podría verla en el evento de connect , no en las funciones de middleware.