微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nginxconfiguration通过上下文将站点直接传递给tomcat webapp

tl; dr版本

你如何设置Nginx作为example.com的反向代理到本地运行的tomcat webapp在http://127.0.0.1:8080/blah/而不会破坏pageContext ?

Tomcat安装程序

一个tomcat 7 webapp, blah ,部署在一个.war文件中,坐在/var/lib/tomcat7/webapps/blah/ 。

tomcat在本地运行,可在http://127.0.0.1:8080访问。 多个webapps正在运行,可以在以下位置访问:

http://127.0.0.1:8080/blah/

http://127.0.0.1:8080/foo/

http://127.0.0.1:8080/bar/

端口8080由防火墙在外部阻止。

删除密码保护.htaccess(Nginx

哪些Web服务器支持HTTP / 2

与Capistrano 3一起部署到Unicorn服务器时出错

棘轮+ Nginx + SSL /安全websocket

如何检查套接字是否存活(连接)在带有多个节点和socket.io-redis的socket.io中

Nginx安装程序

Nginx作为网守在服务器上运行。 一个站点可以访问上面提到的所有本地tomcat web应用程序。 这适用于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/; } }

问:如何configuration一个额外的网站直接访问blah ?

在/etc/Nginx/sites-enabled/一个额外的站点文件被设置为http://blah.com路由到http://127.0.0.1:8080/blah/但有问题。

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/; } }

这个设置为上下文path添加了额外的内容,创build了一个404页面,因为path /blah/blah/不存在,这是有道理的。 在Nginx一个简单的方法将blah.com传递给webapp root?

在web应用程序中,我使用${pageContext.request.contextpath}/path作为webapp资源的相对path。 我认为这是处理内部tomcatpath的正确方法,但这可能是问题的一部分? 我相信这就是为什么我在路由中获得额外的blah ,创build404页面

<%@ 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>

这个页面没什么问题,但redirect到/blah/blah/form而不是/blah/form ,其中servlet实际存在。

我也尝试了其他的方法包括把blah.com指向tomcat根本身。 这是可以通过blah.com/blah/得到的,但这不是我们想要的。

另外,通过example.com/blah/仍然可以访问blah是完全可以接受的(并且是期望的)。

显然,这是一个Nginx新手,但帮助我(和未来的新手)明确这一点,因为明确的解决scheme是逃避我和Nginx文档也使用的帮助。

Nginx + webapp2 + Python的问题

用乘客识别瓶颈

未知指令“perl_modules”

使用JRuby和Rails 3.2

如何在Nginx中设置向前保密,以便具有认ATS设置的iOS9(Xcode7)应用程序可以连接到我的服务器?

一个可能的解决方案是在tomcat 创建一个虚拟主机 ,并在新主机上将ROOT应用设置为blah 。 Nginx会将仍然通过的请求传递给本地主机上的tomcat ,包括请求的主机头信息,tomcat将用正确的上下文处理其余的信息。

设置虚拟主机

将Host项添加到$CATALINA_HOME/conf/server.xml的Engine部分

<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>

创建appBase目录$CATALINA_HOME/blahApps/

使用$CATALINA_HOME/blahApps/ROOT/meta-inf/context.xml配置context

<Context path="/" antiResourceLocking="false" />

部署$CATALINA_HOME/blahApps/ROOT 。 这可能就像将blah.war更改为ROOT.war一样简单。

确保Nginx仍然是复合的

只是代理请求blah.com到本地主机和tomcat将照顾其余:

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; } }

这为我工作:

环境:

亚马逊AWS

Ubuntu 14.04 TLS / 64位

Nginx

雄猫7

Oracle JDK 1.7

脚步:

1)安装Oracle JDK

http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html

2)aptitude安装tomcat7

3)配置我的上下文3.1) – 在/ etc / tomcat7 / Catalina / localhost中添加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)创建我的网站文件夹并提取我的上下文

3.3)添加这行到设置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)重新启动Nginx和tomcat7。 如果你的上下文没有开始进入Tomcat7管理器,并检查tomcat日志或从tomcat管理器url重新启动你的上下文。

3.5)在你的tomcat应用上下文中输入:

http://yoursite/MiContext

4)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

我可以用一些修改解决同样的问题,所以我离开了记录。 我使用Ubuntu 14.04,我用sudo apt-get install tomcat7安装了tomcat。

我已经有一个由lein(clojure应用程序)生成的war-demo.war文件,并从tomcat的管理器webapp安装(加载)。 战争被复制到/usr/lib/tomcat7 。

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; } }

修改/var/lib/tomcat7/conf的server.xml

<Host name="clojure2.example.com" appBase="wardemo" unpackWARS="true" autoDeploy="true"> </Host>

复制战争文件

在`/ var / lib / tomcat7中创建一个wardemo目录

将wardemo目录中的war-demo.war复制为ROOT.war

就是这样,我不需要其他配置。 在/var/lib/tomcat7/conf/Catalina ,我们有clojure2.example.com目录。 我可能能够在目录中添加一些更多的配置。

我的调整方式:类似于其他人,但有一些区别系统 – Ububtu 14.04

1)为应用程序创建虚拟主机。 您需要将HOST添加到/ etc / tomcat7中的server.xml中

<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>

2)将你的应用程序放到/ var / lib / tomcat7的“webapps”文件夹中

3)启动tomcat – 在此之后,您将能够在本地访问您的应用程序进入yourapp.com:8080(端口需要假设tomcat不在80端口上,因为这个端口正在被Nginx监听)

3)转到Nginx配置并放置在下面的行

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)重新启动Nginx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐