如何使用NGINX反向代理用户请求至Tomcat的http连接器的8080端口完成反向代理 (一)
LNMT:Linux Nginx MySQL Tomcat
Client (http) --> nginx (reverse proxy)(http) --> tomcat (http connector)
虚拟机node1(CentOS 7系统)即作为nginx服务器,又作为Tomcat服务器,客户端发来的请求首先经由nginx处理,如果为静态内容则直接由nginx响应,如果为动态内容,则由nignx反代至后端的Tomcat服务器;
在node1服务器上安装nginx
yum install nginx -y
编辑nginx的配置文件/etc/nginx/conf.d/default.conf,在虚拟主机server中定义来自客户端请求的
所有内容全部反代至后端的Tomcat服务器
cd /etc/nginx/
vim nginx.conf
location / {
proxy_pass http://127.0.0.1:8080;
}
或者:
location / {
proxy_pass http://node1.com:8080;
}
保存退出后检查nginx语法,没问题后启动nginx服务
nginx -t
nginx -s reload
在浏览器中直接请求,可以正常访问资源
vim nginx.conf
server_name _;
index index.jsp index.html; 添加默认主页格式
root /usr/share/tomcat/webapps/ROOT; 根目录下添加静态页面
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:8080;
}
nginx -t
systemctl restart nginx.service
在自定义的Tomcat的虚拟主机的目录 /usr/share/tomcat/webapps/ROOT中添加一张静态资源图片,也可以正常访问,
cp /usr/share/wallpapers/CentOS7/contents/images/2560x1600.jpg /usr/share/tomcat/webapps/ROOT/a.jpg
在虚拟机里面搜索移动到ROOT下面
如上是把整个客户端请求的内容无论动静都反代至后端的服务器,现在通过在nginx的配置文件中定义实现动静分离,即:静态资源由nginx直接响应,动态资源由Tomcat响应。nginx配置文件修改如下:
vim nginx.conf
location ~* \.(jsp|do)$ { 重新定义一个虚拟主机,把jsp、do结尾的反代至后端Tomcat主机
proxy_pass http://node1.com:8080;
检测nginx语法,重载nginx服务
nginx -t
nginx -s reload
新增虚拟主机
mkdir -pv /data/webapps
mkdir -pv /data/webapps/ROOT/{lib,classes,WEB-INF} 创建根路径
vim index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
Test Page
<% out.println("hello node1.com"); 显示内容
%>
解析虚拟机
打开windonws系统目录:c:/windows/system32/drivers/etc找到hosts文件,打开hosts文件并在
最后面添加一条虚拟机记录
172.18.70.40 node1.com
elinks:linux系统中打开纯文本网页界面
参数:
-dump 打开纯文本界面后直接退出不进入交互模式
-source 打开网页的源代码
yum install elinks
elinks -dump http://node1.magedu.com:8080/ 可以看到jsp内容
hello node1.com
如何配置httpd反向代理 LAMT:Linux Apache(httpd) MySQL Tomcat (二)
httpd的代理模块:
proxy_module 反代模块
proxy_http_module:适配http协议客户端;
proxy_ajp_module:适配ajp协议客户端;
工作流程(结合方式)
Client (http) --> httpd (proxy_http_module)(http) --> tomcat (http connector)
Client (http) --> httpd (proxy_ajp_module)(ajp) --> tomcat (ajp connector)
Client (http) --> httpd (mod_jk)(ajp) --> tomcat (ajp connector)
编辑httpd的配置文件,在/etc/httpd/conf.d中定义一个虚拟主机,配置使用proxy_module和proxy_http_module模块反代
proxy_http_module代理配置
cd /etc/httpd/conf.d/
vim http-tomcat.conf 创建配置文件
所有端口
ServerName node1.com 主机名
ProxyRequests off 关闭正向代理
ProxyVia on 添加via:主机名
ProxyPreserveHost on 后端有虚拟主机可以开启
授权所有代理访问
Require all granted 允许所有请求访问资源
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
Require all granted
注意:
在使用nginx做反代时,proxy_pass [保留主机名做反代项后端Tomcat请求,所以Tomcat能够根据反代时的
主机名来判定,前端反代服务器请求的是Tomcat的哪个虚拟主机;(http://node1.com:8080/)
但是,在使用httpd做反代时,不能通过反代(ProxyPass)时使用的主机名来判定后端Tomcat使用什么
虚拟主机来响应。所以,这里的ProxyPass和ProxyPassReverse使用主机名或者IP地址是没有任何区别
的,反代到后端都为ip地址,Tomcat无法判断使用哪个虚拟主机响应,只能使用默认的虚拟主机响应。
为了能够使后端Tomcat能够使用不同的虚拟主机来响应,就要打开
ProxyPreserveHost,保留请求时的主机名,这时客户端在浏览器中键入的主机名将会请求反代至
后端的Tomcat,然后Tomcat分别对应不同的虚拟主机来响应请求。
检测语法,启动httpd服务,在浏览器中请求
httpd -t
systemctl restart httpd.service
OK
proxy_ajp_module代理配置
自从Apache2.2出来后,又多了种选择,那就是 proxy-ajp 和 http-proxy。大家知道Apache里的proxy
模块,可以实现双向代理功能,功能非常强大。其实从连接器的实现原理上来说,用proxy模块来
实现是非常自然的。proxy模块的功能无非就是把相关的请求发给特定的主机再返回结果。那连接器的
功能需求就是要把所有对Servlet/JSP的请求都转给后台的Tomcat。而且所FreeBSD邮件列表
上说,使用proxy-ajp要比 mod_jk的效率要高。看来,使用Apache自带模块,要比另外编译的来得可靠。
cd /etc/httpd/conf.d/
cp http-tomcat.conf ajp-tomcat.conf
vim ajp-tomcat.conf
ServerName node1.com
ProxyRequests off
ProxyVia on
ProxyPreserveHost on
Require all granted
ProxyPass / ajp://127.0.0.1:8009/ 把http修改成ajp
ProxyPassReverse / ajp://127.0.0.1:8009/ 把http修改成ajp
Require all granted
进入 Host Manager 打开Server Status 状态
ajp 连接器已经连接
完成OK