Comment configurer nginx
tant que proxy inverse pour example.com
sur une application web tomcat
exécutée localement à l’adresse http://127.0.0.1:8080/blah/
sans casser la pageContext
?
Il existe une application Web tomcat 7 , blah
, déployée avec un fichier .war
et située dans /var/lib/tomcat7/webapps/blah/
.
tomcat
fonctionne localement et est accessible à l’ http://127.0.0.1:8080
. Plusieurs applications Web sont en cours d’exécution et sont accessibles à l’adresse suivante:
http://127.0.0.1:8080/blah/
http://127.0.0.1:8080/foo/
http://127.0.0.1:8080/bar/
Le port 8080
est bloqué à l’extérieur par le pare-feu.
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 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/; } }
blah
? Sous /etc/nginx/sites-enabled/
un fichier de site supplémentaire est configuré pour router http://blah.com
vers 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 un blah
supplémentaire au chemin de contexte, créant une page 404
car path /blah/blah/
n’existe pas, ce qui est logique. Existe-t-il un moyen simple dans nginx
de transmettre blah.com
à la racine de l’application Web?
Dans l’application Web, j’utilise ${pageContext.request.contextPath}/path
pour les chemins relatifs à la ressource Webapp. Je pensais que c’était la bonne façon de gérer les chemins de tomcat internes mais cela pourrait-il faire partie du problème? Je crois que c’est la raison pour laquelle j’obtiens le blah
supplémentaire sur la route, créant la page 404
.
window.location.href = "https://stackoverflow.com/questions/19866203/nginx-configuration-to-pass-site-directly-to-tomcat-webapp-with-context/${pageContext.request.contextPath}/form" Load BLAH If you are not redirected automatically, follow this link.
Cette page est bien reçue 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, notamment le pointage blah.com
vers la racine tomcat. Cela fonctionne dans le sens où vous pouvez accéder à blah
via blah.com/blah/
mais ce n’est pas vraiment ce que nous voulons.
De plus, il est tout à fait acceptable (et souhaitable) de pouvoir toujours accéder à blah
via example.com/blah/
.
Évidemment, ceci est pour un novice de nginx
mais aidez-moi (et les futurs novices) à clarifier les choses car la solution claire me échappe et les docs de nginx
utilisent également cette aide.
Une solution possible consiste à créer un hôte virtuel dans tomcat
et à définir blah
comme étant l’application ROOT
sur le nouvel hôte. nginx
transmettra les demandes de tomcat
à tomcat
sur localhost, y compris l’en-tête de l’hôte demandé et tomcat gérera le rest dans le bon contexte.
Ajoutez une entrée Host
à la partie Engine
de $CATALINA_HOME/conf/server.xml
www.blah.com
Créez le répertoire appBase
$CATALINA_HOME/blahApps/
Configurez le context
avec $CATALINA_HOME/blahApps/ROOT/META-INF/context.xml
Déployez blah
sur $CATALINA_HOME/blahApps/ROOT
. Cela peut être aussi simple que de changer blah.war
en ROOT.war
.
nginx
est toujours copacétique Juste les requêtes de proxy pour blah.com
à localhost et tomcat
prendront en charge le rest:
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:
Pas:
1) Installer Oracle JDK
http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
2) aptitude installer tomcat7
3) Configurer mon contexte 3.1) – dans / etc / tomcat7 / Catalina / localhost add mi_context_file.xml
WEB-INF/web.xml
3.2) créer mon dossier de site et extraire mon contexte
3.3) Ajoutez ces lignes pour configurer 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 le gestionnaire Tomcat7 et vérifiez les journaux tomcat ou redémarrez votre contexte depuis l’URL du gestionnaire Tomcat.
3.5) Entrez dans votre contexte d’application tomcat:
http://yoursite/MiContext
4) références Nginx:
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, alors je laisse le dossier. J’utilise Ubuntu 14.04, j’ai installé tomcat avec sudo apt-get install tomcat7
.
J’ai déjà un fichier war-demo.war généré avec lein (application clojure), et installé (chargé) à partir de l’application Web du gestionnaire de tomcat. La guerre est copiée dans /usr/lib/tomcat7
.
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; } }
/var/lib/tomcat7/conf
C’est ça, je n’avais pas besoin d’autre configuration. Dans /var/lib/tomcat7/conf/Catalina
, nous avons le répertoire clojure2.example.com. Je pourrais peut-être append plus de configuration dans le répertoire.
Ma façon de régler ceci: similaire aux autres, mais avec quelques différences Système – Ububtu 14.04
1) Créez un hôte virtuel pour l’application. Vous devez append HOST au server.xml dans / etc / tomcat7
2) Placez votre application dans le dossier “webapps” de / var / lib / tomcat7
3) Démarrez tomcat – après cela, vous pourrez visiter votre application localement en entrant yourapp.com:8080 (le port est nécessaire en supposant que tomcat ne fonctionne pas sur le port 80 car ce port – 80 – est écouté par NGINX)
3) Allez dans 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; } }
4) Redémarrer NGINX