Answers:
对于nginx,请在此处查看其文档。内置了代理支持。
在其站点的以下示例中,您将看到特定的端口80流量被发送到在端口8080上运行的单个 servlet容器。
请注意,如果您想运行多个后端servlet容器(用于负载平衡,扩展等),则应查看将向最繁忙的后端服务器发送流量的上游公平模块。defaul w / nginx不发货。
server {
listen 80;
server_name YOUR_DOMAIN;
root /PATH/TO/YOUR/WEB/APPLICATION;
location / {
index index.jsp;
}
location ~ \.do$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ \.jsp$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ^~/servlets/* {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
LikeApache Wiki页面中介绍了另一种类似的方法。
server {
listen myhost:80;
server_name myhost;
location / {
root /path/to/myapp/public;
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://myapp:8080;
}
}
我也已经使用/ myapp而不是root测试了它,并且也很好地工作了,将位置/ myapp和proxypass设置为http:// myapp:8080 / myapp;
同样,此配置将所有内容都映射到Java应用程序,当您拥有由Struts之类的MVC框架映射的漂亮URL时,这很有用。
您不必使用mod_jk,可以使用mod_proxy,即通过HTTP(而不是AJP)传递流量。如果nginx具有代理功能,那么它也应该工作。
现在为nginx提供了一个非常新鲜的ajp_module 。我没有经验,但是我认为会话粘性,尤其是持久的后端连接对Tomcat很有帮助。遗憾的是,这两种方法(http代理或ajp代理)对于长时间运行的查询(comet)或大型文件传输(上载)都不灵活。
https://github.com/yaoweibin/nginx_ajp_module#readme
lighttpd BTW具有通用代理模块,可以处理FCGI,HTTP,CGIS和AJP13编码。这看起来是一种更好的方法(但是我认为从阅读的角度来看,对于不典型的长/大请求/响应模式,它具有相同的限制)。