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. Django -- some config

    1.主项目下的url配置:urls.py文件 from django.contrib import adminfrom django.urls import path, includefrom dja ...

  2. Windows7 x64系统下安装Nodejs并在WebStorm下搭建编译less环境

    1. 打开Nodejs官网http://www.nodejs.org/,点“DOWNLOADS”,点64-bit下载“node-v0.10.33-x64.msi”. 2. 下载好后,双击“node-v ...

  3. 解决CMD编译中文乱码

    chcp 是MD DOS中的命令,用了显示或设置活动的代码编号的,用法查看当前编码格式(系统默认为:936  #936表示的是gb2312) chcp 修改当前编码格式(修改为utf-8) chcp ...

  4. /proc/iomem和/proc/ioports对应的fops

    /proc/iomem和/proc/ioports对应的fops static int __init ioresources_init(void) {     struct proc_dir_entr ...

  5. windows server 2008 R2域中的DC部署 分类: AD域 Windows服务 2015-06-06 21:09 68人阅读 评论(0) 收藏

    整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...

  6. CGI/FastCGI/mod_php工作原理

    先了解一下普通cgi的工作流程:web server收到用户请求,并把请求提交给cgi程序,cgi程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web server,web ser ...

  7. python基础-第五篇-5.3装饰器

    小白发呆的看着窗外,同事们陆陆续续的地来到公司,想起算法,小白就飘飘然了.突然后面传来一声呼唤,原来是小刘! 小刘:不好意思啊!堵车了,就来晚了点,不耽误你的时间,咱们就开启的今天的培训内容吧! 小白 ...

  8. 【react 分页器】 基于react-virtualized组件的分页器

    react-virtualized 组件本身没有提供分页器功能,见这个issue:https://github.com/bvaughn/react-virtualized/issues/24 如果想给 ...

  9. pandas_datareader.data 和 fix_yahoo_finance 获取金融数据

    参考:https://zhuanlan.zhihu.com/p/35360694 1.获取数据 #定义所需要的数据 gafataDict={"谷歌":"GOOG" ...

  10. 系列:每日一linux命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 一. 文件目录操作命令: 1.每天一个linux命令(1):ls命令 2 ...