Configuration Nginx pour passer le site directement à tomcat webapp avec contexte
tl; dr version
Comment avez-vous d'installation nginx
comme un proxy inverse pour example.com
locale running tomcat
webapp http://127.0.0.1:8080/blah/
sans briser le <!--7?
Tomcat Setup
Il existe un tomcat 7 webapp,blah
, déployé avec un .war
le fichier et assis dans /var/lib/tomcat7/webapps/blah/
.
tomcat
fonctionne localement et accessible à http://127.0.0.1:8080
. Plusieurs webapps sont en cours d'exécution et peuvent être consultés à:
http://127.0.0.1:8080/blah/
http://127.0.0.1:8080/foo/
http://127.0.0.1:8080/bar/
Port 8080
est bloqué extérieurement par le pare-feu.
Nginx Setup
nginx
s'exécute sur le serveur en tant que gatekeeper. Un site est activé pour accéder à toutes les applications web locales tomcat mentionnées ci-dessus. Cela fonctionne très bien pour example.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/;
}
}
Question: comment configurer un site supplémentaire pour y accéder blah
directement?
/etc/nginx/sites-enabled/
un fichier de site supplémentaire est mis en place pour la route http://blah.com
http://127.0.0.1:8080/blah/
mais il y a des problèmes.
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/;
}
}
cette configuration ajoute unblah
au chemin du contexte, créant un 404
page parce que le chemin d'accès /blah/blah/
n'existe pas, ce qui est logique. Y a-t-il un moyen simple à l'intérieur de nginx
pour
pass blah.com
à la racine webapp?
dans le webapp, j'utilise ${pageContext.request.contextPath}/path
pour les chemins relatifs à la ressource webapp. Je pensais que c'était l' bonne façon de gérer les chemins tomcat internes, mais cela pourrait-il faire partie du problème? Je crois que c'est la raison pour laquelle je reçois le supplément blah
dans la route, créant le 404
page.
<%@ 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>
cette page est activée alright mais la redirection va à /blah/blah/form
au lieu de /blah/form
où le servlet existe réellement.
j'ai également essayé d'autres approches, y compris le pointage blah.com
à la racine de tomcat. Cela fonctionne dans le sens où vous pouvez obtenir blah
par blah.com/blah/
mais c'est pas vraiment ce que nous voulons.
de plus, il est tout à fait acceptable (et souhaité) d'être encore en mesure d'accéder blah
par example.com/blah/
.
Évidemment, c'est pour un nginx
novice, mais pour m'aider (et novices) ceci parce que la solution évidente est d'éluder moi et l' nginx
docs utiliser l'aide aussi.
4 réponses
une solution possible est decréer un virtual host à l'intérieur de tomcat
et définissez blah
ROOT
app sur le nouvel hôte. nginx
va passer encore passer les demandes d' tomcat
sur localhost y compris l'en-tête hôte demandé et tomcat traitera le reste avec le contexte correct.
configurer L'hôte virtuel
Ajouter un
Host
entréeEngine
partie de$CATALINA_HOME/conf/server.xml
<Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host> <Host name="blah.com" appBase="blahApps" unpackWARS="true" autoDeploy="true"> <Alias>www.blah.com</Alias> </Host> </Engine>
Créer
appBase
répertoire$CATALINA_HOME/blahApps/
Configurer le
context
$CATALINA_HOME/blahApps/ROOT/META-INF/context.xml
<Context path="/" antiResourceLocking="false" />
Déployer
blah
$CATALINA_HOME/blahApps/ROOT
. Cela peut être aussi simple que changerblah.war
ROOT.war
.
assurez-vous que nginx
est encore copacetic
Juste des demandes de proxy pour blah.com
localhost tomcat
va prendre soin de la repos:
server {
listen 80;
server_name blah.com www.blah.com;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Ce Travail pour moi:
Environnement:
- Amazon AWS
- Ubuntu 14.04 TLS / 64 Bits
- Nginx
- Tomcat 7
- Oracle JDK 1.7
Mesures:
1) installer Oracle JDK
http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
2) aptitude install tomcat7
3) Configurer mon contexte 3,1) - dans / etc/tomcat7/Catalina / localhost ajouter mi_context_file.xml
<Context path="/MyContext" docBase="local_path_to_my_context_files" privileged="true" reloadable="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
3.2) créer mon dossier de site et extraire mon contexte
3.3) ajoutez ces lignes à setup my_site:
server {
listen 80;
server_name my_site;
#
access_log /my_site_log/access-timed-combined.log timed_combined;
error_log /my_site_log/error.log;
#
root /my_site_folder;
index index.html index.jsp;
#
location @MyContext {
sendfile off;
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
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_max_temp_file_size 0;
#this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
#
location ~ "^/MyContext/*" {
try_files $uri @MyContext;
}
}
3.4) redémarrez nginx et tomcat7. Si votre contexte ne démarre pas, entrez dans tomcat7 manager et vérifiez les journaux tomcat ou redémarrez votre contexte à partir de l'url tomcat manager.
3.5) entrez dans le contexte de votre application tomcat:
http://yoursite/MiContext
4) Nginx références:
Running Jenkins behind Nginx
https://wiki.jenkins-ci.org/display/JENKINS/Running+Jenkins+behind+Nginx
Load Balancing Apache Tomcat with nginx
http://blogs.mulesoft.org/load-balancing-apache-tomcat-with-nginx/
Nginx + Apache Tomcat Configuration Example
http://www.mkyong.com/nginx/nginx-apache-tomcat-configuration-example/
Configuring Nginx for Apache Tomcat 7
http://blog.rezajp.info/posts/configuring-nginx-for-apache-tomcat-7/
Install Tomcat with Nginx on Ubuntu 13.04 (Server)
http://www.laurii.info/2013/10/install-tomcat-nginx-ubuntu-server-13-04/
Nginx - Java servers like Jetty, GlassFish and Tomcat
http://wiki.nginx.org/JavaServers
Nginx - JavaHandler
http://wiki.nginx.org/JavaHandler
Virtual Host + Nginx + Tomcat
http://www.javacodegeeks.com/2013/02/virtual-host-nginx-tomcat.html
je pourrais résoudre le même problème avec quelques modifications, donc je laisse le dossier.
J'utilise Ubuntu 14.04, j'ai installé tomcat avec sudo apt-get install tomcat7
.
j'ai déjà une guerre de démonstration.la guerre de fichier généré avec lein (clojure application), et installé (chargé) à partir de tomcat manager webapp. La guerre est copié dans /usr/lib/tomcat7
.
créer un fichier conf de nginx
server {
listen 80;
server_name clojure2.example.com;
location / {
proxy_pass http://127.0.0.1:8008/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Modifier le serveur.xml /var/lib/tomcat7/conf
<Host name="clojure2.example.com" appBase="wardemo"
unpackWARS="true" autoDeploy="true">
</Host>
guerre de la copie le fichier
- Créer un wardemo-répertoire dans le répertoire `/var/lib/tomcat7
- copiez la war-demo.la guerre dans le wardemo répertoire RACINE.la guerre
c'est ça, je n'ai pas besoin de configuration. /var/lib/tomcat7/conf/Catalina
, nous avons clojure2.example.com répertoire. Je peux peut-être ajouter plus de configuration dans le répertoire.
ma façon de l'accorder: semblable aux autres, mais avec quelques différences Le Système Ububtu 14.04
1) Créer un hôte virtuel pour l'application. Vous devez ajouter HOST au serveur.xml dans /etc/tomcat7
<Host name="yourapp.com" appBase="webapps/yourapp" unpackWars="true" autoDeploy="true">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="virtual_log." suffix=".txt" timestamp="true" />
<Context path="" docBase="path to your war" debug="0" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="virtual_log." suffix=".txt" pattern="common" />
</Host>
3) Démarrer tomcat - après cela, vous serez en mesure de visiter votre application en entrant yourapp.com: 8080 (port est nécessaire en supposant que tomcat ne fonctionne pas sur 80 port comme ce port - 80-est écoutée par NGINX)
3) Allez à la configuration de Nginx et placez-y les lignes suivantes
server {
listen 80;
server_name yourapp.com;
root /var/lib/tomcat7/webapps/yourapp
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name rootapp.com; # this is app that is ROOT
root /var/lib/tomcat7/webapps
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}