如何设置nginx为example.com本地运行的tomcatwebapp 的反向代理http://127.0.0.1:8080/blah/而不打破pageContext?
存在一个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被防火墙外部阻止.
nginx作为网守在服务器上运行.一个站点可以访问上面提到的所有本地tomcat webapps.这适用于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/;
}
}
Run Code Online (Sandbox Code Playgroud)
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/;
}
}
Run Code Online (Sandbox Code Playgroud)
此设置blah为上下文路径添加了额外内容,404因为路径/blah/blah/不存在而创建页面,这是有意义的.是否有一种简单的方法nginx可以传递blah.com给webapp根目录?
在webapp中,我正在使用${pageContext.request.contextPath}/pathwebapp资源的相对路径.我认为这是处理内部tomcat路径的正确方法,但这可能是问题的一部分吗?我相信这就是为什么我blah在路线中获得额外的东西,创建404页面.
<%@ 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>
Run Code Online (Sandbox Code Playgroud)
此页面被击中好吗但重定向去/blah/blah/form的,而不是/blah/form在servlet的实际存在.
我也尝试过其他方法,包括指向blah.comtomcat root本身.这可以在你可以blah通过的意义上起作用,blah.com/blah/但这并不是我们想要的.
另外,仍然能够访问blah通道是完全可接受的(并且是期望的)example.com/blah/.
显然,这是一个nginx新手,但帮助我(和未来的新手)清楚这一点,因为明确的解决方案是逃避我,nginx文档也使用帮助.
bnj*_*jmn 33
一个可能的解决方案是创建一个虚拟主机内tomcat,并设置blah为ROOT在新主机上的应用程序.nginx将仍传递请求传递给tomcatlocalhost,包括请求的主机头,tomcat将使用正确的上下文处理其余的请求.
添加Host条目到的Engine部分$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>
Run Code Online (Sandbox Code Playgroud)创建appBase目录$CATALINA_HOME/blahApps/
配置contextwith$CATALINA_HOME/blahApps/ROOT/META-INF/context.xml
<Context path="/"
antiResourceLocking="false" />
Run Code Online (Sandbox Code Playgroud)部署blah到$CATALINA_HOME/blahApps/ROOT.这可能是由于改变简单blah.war到ROOT.war.
nginx仍然是copacetic只需代理blah.com对localhost的请求,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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这项工作对我来说:
环境:
脚步:
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>
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
3.4)重启nginx和tomcat7.如果您的上下文未开始进入Tomcat7管理器并检查tomcat日志或从tomcat manager url重新启动您的上下文.
3.5)输入您的tomcat应用程序上下文:
http://yoursite/MiContext
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43455 次 |
| 最近记录: |