
Tengo configurado DNS dinámico y quiero poder acceder a diferentes computadoras desde fuera de mi casa. Actualmente tengo una Raspberry Pi que ejecuta nginx en 192.168.1.2, con mi enrutador en 192.168.1.1. También tengo el puerto 80 reenviado desde el enrutador a la raspberry pi, por lo que simplemente presionar la URL DNS dinámica me muestra la página phpinfo() en mi página de inicio de pi.
A continuación, quiero poder mydns.com/device1
mantener esa URL mientras redirijo bajo el capó al otro dispositivo.
En otras palabras, veré http://mydns.com/device1
, pero accederé http://192.168.1.3
internamente. Además, si escribo, mydns.com/device1/login
se redirigirá internamente a http://192.168.1.3/login
.
Estoy tratando de usar sub_filter
así:
sub_filter_once off;
sub_filter_types text/html;
sub_filter ""http://192.168.1.3" "http://192.168.1.2"
proxy_pass http://192.168.1.3/;
proxy_set_header Host $host;
Esto está funcionando hasta cierto punto, pero no del todo. Las rutas no redirigen, por ejemplo, archivos en subcarpetas. Por ejemplo:
Quiero esto:
http://mydns.com/device1/style/basic.css
Pero entiende esto:
http://mydns.com/style/basic.css
Esto provoca un error 404, como se puede ver en la vista Consola en Chrome. Recibo este error:
Failed to load resource: the server responded with a status of 404 (Not Found)
Esto está en el camino: http://mydns.com/style/basic.css
pero necesito http://mydns.com/device1/style/basic.css
.
Puedo acceder al archivo CSS en la barra de direcciones escribiendo http://mydns.com/device1/style/basic.css
. así que sé que es accesible, simplemente no puedo hacer que NGINX reenvíe/reescriba estas carpetas.
¿Alguien puede ayudar? Gracias
Respuesta1
Podría tener varias razones:
- o algo reescribe su URI antes de ingresar a la ubicación con proxy_pass;
- o se suministra como sub-URI coincidente en algunas ubicaciones procesadas anteriormente;
- o (en su versión de nginx) la barra diagonal
/
después de IP en la directiva proxy_pass hace que nginx tome la barra diagonal como un URI de proxy y la reescriba antes de enviarla.
No se puede ver qué sucede exactamente de tu lado sin ver toda tu configuración. O puede intentar habilitar el registro de depuración (para ver qué causa esto).
De todos modos, en relación con los motivos mencionados anteriormente, tienes 3 formas de resolverlo:
- o evitará la reescritura o tendrá que agregar algo adicional
rewrite ... break
antes de proxy_pass para extender el URI; - o puede intentar definirlo como
proxy_pass http://192.168.1.3/device1/;
o con alguna variable (de mapeo) similarproxy_pass http://192.168.1.3/$device/;
o incluso con un URI originado completo comoproxy_pass http://192.168.1.3$request_uri;
(tenga en cuenta que no hay ningún/
aquí). - o puede intentar eliminar la barra diagonal, de modo que
proxy_pass http://192.168.1.3;
(sin barra diagonal) en lugar deproxy_pass http://192.168.1.3**/**;
(con barra diagonal).
En este caso, "el URI de solicitud se pasa al servidor en la misma forma en que lo envía un cliente cuando se procesa la solicitud original" (si no se realizan reescrituras), o "el URI de solicitud normalizado completo se pasa al procesar el URI modificado" (si se produjeron algunas reescrituras o si tiene algunas ubicaciones provisionales con alias ytry_files ... @proxy
aprobadas).
Echa un vistazo acontraseña_proxydocumentación para todas las variantes posibles del uso de proxy_pass.