httpd结合tomcat:

前提:httpd版本2.4以上,编译安装

httpd:192.168.223.136 tomcat:192.168.223.146

tomcat简单创建一个额外的webapps:

  [root@wadeson tomcat]# mkdir /data/webapps/{ROOT,WEB-INF,META-INF,classes,lib} -pv
  mkdir: 已创建目录 "/data"
  mkdir: 已创建目录 "/data/webapps"
  mkdir: 已创建目录 "/data/webapps/ROOT"
  mkdir: 已创建目录 "/data/webapps/WEB-INF"
  mkdir: 已创建目录 "/data/webapps/META-INF"
  mkdir: 已创建目录 "/data/webapps/classes"
  mkdir: 已创建目录 "/data/webapps/lib"
  vim /data/webapps/ROOT/index.jsp
 
  <Engine name="Catalina" defaultHost="192.168.223.146"> 替换默认的host主机
    <Host name="192.168.223.146" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
      <Context path="" docBase="ROOT" reloadable="true"/>
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
          prefix="192.168.223.146_access_log" suffix=".txt"
          pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>
  [root@wadeson data]# tree webapps/
  webapps/
  ├── classes
  ├── lib
  ├── META-INF
  ├── myapp
  │   └── login.jsp
  ├── ROOT
  │   └── index.jsp
  └── WEB-INF
 
httpd实现tomcat反代的几种方式:
1、基于http协议
  需要使用的模块:主模块:proxy_module、子模块:proxy_module_http
  1、在主配置文件httpd.conf开启下面两个模块:

  LoadModule proxy_module modules/mod_proxy.so
  LoadModule proxy_http_module modules/mod_proxy_http.so
  2、开启后打开虚拟主机的支持文件:

  # Virtual hosts
  Include /etc/httpd2.4/extra/httpd-vhosts.conf
  3、然后编辑vhosts文件:
  <VirtualHost *:80>
    ServerName 192.168.223.136              这里只是httpd服务器的ip
    proxyVia On                     如果设置为On每个请求和应答都会对应当前主机得到一个"Via:"头。(此选项可以不用设置)
    ProxyRequests Off           关闭正向代理
    ProxyPreserveHost On       当启用时,此选项将把传入请求的"Host:"行传递给被代理的主机,而不是传递在ProxyPass中指定的主机名,默认为off(此选项可以不用设置)
    <Proxy *>        设置代理权限,所有的都给代理至后端服务器
      Require all granted
    </Proxy>
    ProxyPass / http://192.168.223.146:8080/           
    ProxyPassReverse / http://192.168.223.146:8080/
    <Location />
      Require all granted
    </Location>
  </VirtualHost>
 
2、httpd与tomcat结合使用ajp协议:
  1、开启必须要支持的proxy模块
  LoadModule proxy_module modules/mod_proxy.so
  LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
 
  2、开启后打开虚拟主机的支持文件:
  # Virtual hosts
  Include /etc/httpd2.4/extra/httpd-vhosts.conf
 
  3、然后编辑vhosts文件:
  <VirtualHost *:80>
    ServerName 192.168.223.136
    proxyVia On
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
      Require all granted
    </Proxy>
    ProxyPass / ajp://192.168.223.146:8009/            ajp协议开启的是8009端口
    ProxyPassReverse / ajp://192.168.223.146:8009/
    <Location />
      Require all granted
    </Location>
  </VirtualHost>
观察tomcat日志看见真实的ip:

[root@wadeson logs]# tail -f 192.168.223.146_access_log.2017-08-09.txt
192.168.223.1 - - [09/Aug/2017:11:31:49 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:31:49 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:31:49 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:32:24 +0800] "GET / HTTP/1.1" 200 122
192.168.223.1 - - [09/Aug/2017:11:47:51 +0800] "GET / HTTP/1.1" 200 122
192.168.223.1 - - [09/Aug/2017:11:47:52 +0800] "GET / HTTP/1.1" 200 122
192.168.223.1 - - [09/Aug/2017:11:47:54 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:48:13 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:48:13 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127
192.168.223.1 - - [09/Aug/2017:11:48:14 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 127

nginx与tomcat进行结合:

nginx:192.168.223.136,tomcat:192.168.223.146

server {
  listen 80;
  server_name 192.168.223.136;

  location / {

    root html;
    index index.html index.htm;
    proxy_pass http://192.168.223.146:8080;
  }

nginx日志如下:

192.168.223.1 - - [09/Aug/2017:13:43:26 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 112 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
192.168.223.1 - - [09/Aug/2017:13:43:30 +0800] "GET / HTTP/1.1" 200 107 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
192.168.223.1 - - [09/Aug/2017:13:46:11 +0800] "GET /myapp/login.jsp HTTP/1.1" 200 112 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"

tomcat日志如下:

192.168.223.136 - - [09/Aug/2017:13:43:26 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127
192.168.223.136 - - [09/Aug/2017:13:43:30 +0800] "GET / HTTP/1.0" 200 122
192.168.223.136 - - [09/Aug/2017:13:46:11 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127

如何才能使tomcat抓捕到真实的客户端ip呢?

1、在nginx上设置:

  proxy_set_header X-Forwarded-For $remote_addr;

2、然后在tomcat日志定义处添加首部信息:

  pattern="%h %{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s %b" />

然后tomcat访问日志:

192.168.223.136 192.168.223.1 - - [09/Aug/2017:13:55:03 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127
192.168.223.136 192.168.223.1 - - [09/Aug/2017:13:55:04 +0800] "GET /myapp/login.jsp HTTP/1.0" 200 127

nginx结合tomcat实现动静分离:

location ~* \.(jsp|do)$ {
  proxy_pass http://192.168.223.146:8080;
}

访问网址:

默认首页是index.html所以访问的是nginx自己的html下的index.html

当后缀为jsp时,就请求访问tomcat了,在tomcat日志那里也可以查看:

192.168.223.136 - - - [09/Aug/2017:14:09:03 +0800] "GET /index.jsp HTTP/1.0" 200 122

利用nginx作为代理服务器,转向192.168.223.146的httpd服务器,然后通过httpd转向本地的tomcat

nginx:192.168.223.136   httpd:192.168.223.146,版本2.4以上  tomcat:192.168.223.146

配置httpd:同以上

1、基于http协议
  需要使用的模块:主模块:proxy_module、子模块:proxy_module_http
  1、在主配置文件httpd.conf开启下面两个模块:

  LoadModule proxy_module modules/mod_proxy.so
  LoadModule proxy_http_module modules/mod_proxy_http.so
  2、开启后打开虚拟主机的支持文件:

  # Virtual hosts
  Include /etc/httpd2.4/extra/httpd-vhosts.conf
  3、然后编辑vhosts文件:
  <VirtualHost *:80>
    ServerName 192.168.223.146            httpd和tomcat位于同一主机
    proxyVia On                     
    ProxyRequests Off           
    ProxyPreserveHost On      
    <Proxy *>        
      Require all granted
    </Proxy>
    ProxyPass / http://192.168.223.146:8080/           
    ProxyPassReverse / http://192.168.223.146:8080/
    <Location />
      Require all granted
    </Location>
  </VirtualHost>

http日志:

192.168.223.136 - - [09/Aug/2017:14:37:09 +0800] "GET /index.jsp HTTP/1.0" 200 122

tomcat日志:

192.168.223.146 192.168.223.136 - - [09/Aug/2017:14:37:09 +0800] "GET /index.jsp HTTP/1.1" 200 122

nginx只是做反代,没有处理请求的义务,由于后端httpd是直接反带的所以httpd默认的html下面的index.html不是tomcatwebapps下面的index.html

在tomcat的应用目录/data/webapps/ROOT下面创建一个index.html

cp index.html /data/webapps/ROOT/,然后再次访问:

查看httpd日志:

192.168.223.136 - - [09/Aug/2017:14:41:41 +0800] "GET /index.html HTTP/1.0" 200 45

查看你tomcat日志:

192.168.223.146 192.168.223.136 - - [09/Aug/2017:14:41:41 +0800] "GET /index.html HTTP/1.1" 200 45

tomcat结合httpd和nginx的更多相关文章

  1. 手动部署LNMT(Nginx+Tomcat)并实现Nginx反向代理Tomcat

    一.什么是Tomcat? 在弄清楚Tomcat之前要先了解什么是J2EE:从整体上讲,J2EE 是使用 Java 技术开发企业级应用的工业标准,它是 Java 技术不断适应和促进企业级应用过程中的产物 ...

  2. Tomcat结合Apache、Nginx实现高性能的web服务器

    一.Tomcat为什么需要与apache.nginx一起结合使用? Tomcat虽然是一个servlet和jsp容器,但是它也是一个轻量级的web服务器.它既可以处理动态内容,也可以处理静态内容.不过 ...

  3. Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群

    Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群 >>>>>>>>>>>> ...

  4. 如何在tomcat前部署一个nginx

    在tomcat应用已经发布后,如何在tomcat前部署一个nginx,可以正常访问jsp,静态资源(html,css,js) 这里tomcat的端口号是8888 upstream morris { s ...

  5. Linux笔记 #09# Tomcat多开以及Nginx负载均衡简单例子

    索引 Tomcat怎样多开.. 1.添加环境变量(最基础.关键的步骤!) 2.改catalina.sh 3.改相关端口 Nginx负载均衡简单例子 Tomcat怎样多开.. 演示一下如何开两个(开n个 ...

  6. 浅谈tomcat 、apache、 nginx的区别及优缺点

    (~~排版垃圾~~,此文纪念自己18年6月所作为,如有不适合之处,请告知.) 本文主要说明tomcat .apache. nginx的定义.区别及优缺点 一. 定义: 1. Apache Apache ...

  7. httpd或Nginx负载均衡tomcat

    实验环境:CentOS7 #两台tomcat的基本配置如下: [root@webapps localhost]#setenforce 0 [root@webapps localhost]#iptabl ...

  8. tomcat部署虚拟主机-搭建两个应用以及httpd和Nginx的反向代理

    实验环境:CentOS7 前提:已经安装好tomcat,未安装请查看http://www.cnblogs.com/wzhuo/p/7111135.html: 目的:基于主机名访问两个应用: [root ...

  9. 02 . Tomcat多实例并用Nginx反代

    Tomcat虚拟主机 ​ 一个应用程序在某一个端口启动运行产生了一系列的进程就是一个实例,让tomcat启动两个不同的相互独立的进程,产生两个不同的套接字,分别运行在不同的端口,让不同的端口响应不同的 ...

随机推荐

  1. 给vmware虚拟机设置Ip,使用xshell远程连接Centos

    参考下面两位的分享才弄好,发表之前先对原作者表示感谢! 给Centos配置网络以及使用xshell远程连接Centos http://www.cnblogs.com/fuly550871915/p/4 ...

  2. 在Ubuntu上搭建hive环境

    一.准备软件 二.安装虚拟机 1.新建虚拟机向导 2.安装客户机操作系统 3.用户名密码设置 4.设置虚拟机名称和保存位置 5.处理器设置 6.设置虚拟机内存 7.然后一直next下去(有的根据自己的 ...

  3. 启动原生Hadoop集群或伪分布环境

    一:启动Hadoop 集群或伪分布安装成功之后,通过执行./sbin/start-all.sh启动Hadoop环境 通过jps命令查看当前启动进程是否正确~ [root@neusoft-master ...

  4. Exchange OAB(Offline Address Book)

    If Outlook is left running constantly in Cached Exchange Mode, it updates the Offline Address Book a ...

  5. Supervisor快速上手指南(转)

    原文:http://maemual.me/index.php/archives/8/ Supervisor是一个进程控制程序.用于监控管理你需要的程序. 当你有一个程序,需要长期在后台运行,并且希望能 ...

  6. 11个你应该知道的django博客引擎

    这段时间一直在学python和django,准备写个小小的blog巩固下自己学到的东西,看到了GAE上的一些程序,大部分都是纯python的,想找一些基于django的,还真是难.无意中搜索到一篇文章 ...

  7. Flask之flask-migrate

    简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用fl ...

  8. 10张Gif动图让你弄懂递归等概念

    图像(包括动图)是传递信息的一种高效方式,往往能增强表象.记忆与思维等方面的反应强度.所谓一图胜千言,说的就是这个道理. 今天为大家整理了十张动图GIFS,有助于认识循环.递归.二分检索等概念的具体运 ...

  9. jango模板语言初识

    一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  10. K近邻python

    有一个带标签的数据集X,标签为y.我们想通过这个数据集预测目标点x0的所属类别. K近邻算法是指在X的特征空间中,把x0放进去,然后找到距离x0最近的K个点.通过这K个点所属类别,一般根据少数服从多数 ...