为了使用 Apache 将流量传递到端口 80 上的 JBoss/TomCat,我们曾经安装并配置mod_jk
。
nginx 有等效产品吗?基本上希望所有 80 端口流量都传递到 jboss。
答案1
对于 nginx,请查看其文档这里. 内置代理支持。
在下面来自他们网站的示例中,您将看到特定端口 80 的流量被发送到单身的在端口 8080 上运行的 servlet 容器。
请注意,如果你想运行多种的后端 servlet 容器(用于负载平衡、扩展等...),您应该查看上游公平模块它将把流量发送到最不繁忙的后端服务器。默认情况下,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;
}
}
答案2
另一种方法就像在像Apache维基页面。
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 和 proxypasshttp://我的应用:8080/我的应用;
同样,此配置将所有内容映射到 Java 应用程序,当您拥有由 Struts 等 MVC 框架映射的良好 URL 时,这很有用。
答案3
您不必使用 mod_jk,您可以使用 mod_proxy,即通过 HTTP 而不是 AJP 传递流量。如果 nginx 具有代理功能,那么应该也可以正常工作。
答案4
现在有一个相当新的 ajp_modulenginx。我没有这方面的经验,但我认为会话粘性,尤其是持久后端连接对 Tomcat 非常有用。遗憾的是,这两种方法(http 代理或 ajp 代理)对于长时间运行的查询(comet)或大型文件传输(上传)来说都不够灵活。
https://github.com/yaoweibin/nginx_ajp_module#readme
lighttpdBTW 有一个通用代理模块,可以处理 FCGI、HTTP、CGIS 和 AJP13 编码。这看起来是一种更好的方法(但我认为从阅读中可以看出,它在非典型的长/大请求/响应模式方面具有相同的限制)。