Configuração do Nginx para passar o site diretamente para o webcat do tomcat com contexto
Como você configuranginx
como um proxy reverso paraexample.com
para um funcionamento localtomcat
webapp emhttp://127.0.0.1:8080/blah/
sem quebrar opageContext
?
Existe umTomcat 7 aplicativo web,blah
, implantado com um.war
arquivo e sentado em/var/lib/tomcat7/webapps/blah/
.
tomcat
está sendo executado localmente e acessível emhttp://127.0.0.1:8080
. Várias aplicações web estão em execução e podem ser acessadas em:
http://127.0.0.1:8080/blah/
http://127.0.0.1:8080/foo/
http://127.0.0.1:8080/bar/
Porta8080
está bloqueado externamente pelo firewall.
nginx
está sendo executado no servidor como o gatekeeper. Um site está habilitado para acessar todos os webapps do tomcat local mencionados acima. Isso funciona bem 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/;
}
}
Pergunta: como configurar um site adicional para acessarblah
diretamente?Debaixo/etc/nginx/sites-enabled/
um arquivo de site adicional está configurado para rotearhttp://blah.com
parahttp://127.0.0.1:8080/blah/
mas há 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 configuração adiciona um extrablah
para o caminho do contexto, criando um404
página porque caminho/blah/blah/
não existe, o que faz sentido. Existe uma maneira simples dentronginx
passarblah.com
para a raiz do webapp?
Dentro do webapp, estou usando${pageContext.request.contextPath}/path
para caminhos relativos ao recurso webapp. Eu pensei que esta era a maneira correta de lidar com os caminhos internos do Tomcat, mas isso poderia ser parte do problema? Eu acredito que é por isso que estou recebendo o extrablah
na rota, criando o404
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 foi atingida, mas o redirecionamento vai para/blah/blah/form
ao invés de/blah/form
onde o servlet realmente existe.
Eu também tentei outras abordagens, incluindo apontandoblah.com
para a própria raiz do tomcat. Isso funciona no sentido de que você pode chegar ablah
através dablah.com/blah/
mas isso não é realmente o que queremos.
Além disso, é completamente aceitável (e desejado) ainda poder acessarblah
através daexample.com/blah/
.
Obviamente, isso é para umnginx
novato, mas ajude-me (e futuros novatos) a esclarecer isso porque a solução clara está me iludindo eonginx
docs também usam a ajuda.