Configuración de Nginx para pasar el sitio directamente a tomcat webapp con contexto
¿Cómo se configuranginx
como un proxy inverso paraexample.com
a un local corriendotomcat
aplicación web enhttp://127.0.0.1:8080/blah/
sin romper elpageContext
?
Existe untomcat 7 Aplicación Web,blah
, desplegado con un.war
archivo y sentado en/var/lib/tomcat7/webapps/blah/
.
tomcat
se está ejecutando localmente y accesible enhttp://127.0.0.1:8080
. Se están ejecutando varias aplicaciones web y se puede acceder a ellas en:
http://127.0.0.1:8080/blah/
http://127.0.0.1:8080/foo/
http://127.0.0.1:8080/bar/
Puerto8080
Está bloqueado externamente por el firewall.
nginx
se está ejecutando en el servidor como el controlador de acceso. Un sitio está habilitado para acceder a todas las aplicaciones web de tomcat locales mencionadas anteriormente. Esto funciona bien paraexample.com
:
server {
listen 80;
server_name example.com;
root /var/lib/tomcat/webapps/ROOT/;
location / {
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://127.0.0.1:8080/;
}
}
Pregunta: cómo configurar un sitio adicional para accederblah
¿directamente?Debajo/etc/nginx/sites-enabled/
un archivo de sitio adicional está configurado para enrutarhttp://blah.com
ahttp://127.0.0.1:8080/blah/
Pero hay problemas.
server {
listen 80;
server_name blah.com *.blah.com;
root /var/lib/tomcat/webapps/blah/;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/blah/;
}
}
Esta configuración añade un extrablah
a la ruta de contexto, creando un404
página porque ruta/blah/blah/
No existe, lo que tiene sentido. ¿Hay una manera simple dentro denginx
pasarblah.com
a la raíz de la aplicación web?
Dentro de la aplicación web, estoy usando${pageContext.request.contextPath}/path
para rutas relativas al recurso webapp. Pensé que esta era la forma correcta de manejar las rutas internas de Tomcat, pero ¿podría ser esto parte del problema? Creo que es por eso que estoy recibiendo el extrablah
en la ruta, creando el404
página.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="0; url=${pageContext.request.contextPath}/form">
<script type="text/javascript">
window.location.href = "${pageContext.request.contextPath}/form"
</script>
<title>Load BLAH</title>
</head>
<body>
<p>If you are not redirected automatically, follow this <a href="${pageContext.request.contextPath}/form">link</a>.</p>
</body>
</html>
Esta página está bien, pero la redirección va a/blah/blah/form
en lugar de/blah/form
Donde realmente existe el servlet.
También he intentado otros enfoques incluyendo apuntandoblah.com
a la propia raíz del gato. Esto funciona en el sentido de que puedes llegar ablah
víablah.com/blah/
Pero eso no es realmente lo que queremos.
Además, es completamente aceptable (y deseado) aún poder accederblah
víaexample.com/blah/
.
Obviamente, esto es para unnginx
principiante, pero ayúdeme (y futuros novatos) a aclarar esto porque la solución clara me está eludiendo a mí y alnginx
Los docs usan la ayuda también.