配置LNMT,LAMT反向代理

2017-11-05  本文已影响0人  不知岁月惜

如何使用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.*" %>
                        <html>
                                <head>
                                        <title>Test Page</title>
                                </head>
                                <body>
                                        <% out.println("hello node1.com");   显示内容
                                        %>
                                </body>
                                </html>
解析虚拟机
 打开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    创建配置文件
<VirtualHost *:80>       所有端口
        ServerName node1.com   主机名
        ProxyRequests off        关闭正向代理
        ProxyVia on          添加via:主机名
        ProxyPreserveHost on        后端有虚拟主机可以开启
        <proxy *>        授权所有代理访问
                Require all granted        允许所有请求访问资源
        </Proxy>
        ProxyPass / http://127.0.0.1:8080/       
        ProxyPassReverse / http://127.0.0.1:8080/
        <Location />
                Require all granted        
        </Location>
</virtualhost>
注意:
在使用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
<VirtualHost *:80>
        ServerName node1.com
        ProxyRequests off
        ProxyVia on
        ProxyPreserveHost on
        <proxy *>
                Require all granted
        </Proxy>
        ProxyPass / ajp://127.0.0.1:8009/     把http修改成ajp
        ProxyPassReverse / ajp://127.0.0.1:8009/         把http修改成ajp
        <Location />
                Require all granted
        </Location>
</virtualhost>
进入 Host Manager 打开Server Status 状态
ajp 连接器已经连接
完成OK
上一篇下一篇

猜你喜欢

热点阅读