精华内容
参与话题
问答
  • 对Apache CXF的理解(一)

    2011-03-28 16:56:47
    1.它实现了JAX-WS APIS,可以方便地构建webservice,使用者不再面向wsdl,wsdl是很难生成和读懂。 2.内部集成了spring。 3.实现了数据绑定,可以和多种数据类型绑定(不太懂). 4.支持RESTfule服务开发。 5....

    CXF能做什么:

    1.它实现了JAX-WS APIS,可以方便地构建webservice,使用者不再面向wsdl,wsdl是很难生成和读懂的。

    2.内部集成了spring。

    3.实现了数据绑定,可以和多种数据类型绑定(不太懂).

    4.支持RESTfule服务的开发。

    5.CXF支持多样化的web service规格,包括:WS-Addressing,WS-Policy,WS-ReliableMessaging和WS-Security。

    总之,支持开发各类web service,让开发变得更容易。(让学习变得更复杂)

    如何将现有应用与CXF集成:

    1.从传输层的角度:CXF可以和不同传输协议一起工作,例如:HTTP,JMS,甚至LOCAL,而local就是说,传输不需要跨机器,只是在内存中进行,那么你可以配置local transport,避免对象的序列化。

    2.从绑定层的角度:bindings映射一个特别服务消息给特定的协议。CXF支持不同的绑定,比如SOAP绑定,它是缺省的。还有诸如Pure XML binding,他传输一个原始的xml而不像SOAP那样有个信封。还有HTTP Binding.

    3.消息拦截和修改:

      JAX-WS Handlers:用来处理消息,可惜修改接收到消息的内容。

      Interceptors:提供了访问CXF能提供所有特性的机制。

    4.发送二进制数据:CXF提供了一个机制,通过MTOM标准发送二进制数据,XML消息中正常的二进制数据会被BASE64编码,这会导致处理开销增大,也会导致消息长度增大,采取MTOM可以允许你发送大于内存的消息。

    转载于:https://blog.51cto.com/nepoulia/528842

    展开全文
  • NameVirtualHost *:80 ServerAdmin cozo@etang.com  DocumentRoot "c:/wamp/www/test_perl"  ServerName www.somedomain.com  ServerAdmin cozo@etang.com  DocumentRoot "c:/wamp/www/stats"  ServerName
    NameVirtualHost *:80 

    <VirtualHost 192.168.0.121:80>
      ServerAdmin cozo@etang.com
      DocumentRoot "c:/wamp/www/test_perl"
      ServerName www.somedomain.com
    </VirtualHost>
    <VirtualHost 192.168.0.120:80>
      ServerAdmin cozo@etang.com
      DocumentRoot "c:/wamp/www/stats"
      ServerName www.apachestats.com
    </VirtualHost>


    做如上的虚拟主机定义以后,所有发往.121的请求会由绑定该IP的虚拟主机来处理(如果有多个虚拟主机的话),如果没有符合的域名,则使用第一个虚拟主机(该IP的)。所有发往.120的请求由绑定120的虚拟主机来处理。如果使用localhost或者127.0.0.1来访问,所有的虚拟主机都不符合,就会使用全局定义里面的DocRoot来应答。
    如果只有一个IP地址,也符合上面的描述。

    如果上面的VirtualHost后面绑定的是*:80,则所有的请求都会查找该虚拟域名,如果都没有,则使用第一个虚拟主机的配置。

    安全方面:
    如果将所有的网站文件都存放在一个大目录下,则应该在该目录下建两个子目录,使用Directory的定义让这两个子目录一个限制可访问的IP,一个没有限制。基目录权限是可以继承的。
    所有公开的网站放到公开的目录之中,并为其定义虚拟主机,而无须再定义目录权限,除非有特别需要(比如CGI权限)。所有不能公开的网站放到限制的目录之中,并为其定义虚拟主机。
    最后定义一个非法域名的虚拟主机,绑定*:80,放在第一个虚拟主机位置上,并在其目录内放置一个错误页面或者是自己常用的目录,这样使用任意能够找到该机器的IP地址来访问就可以到达这个目录。
    展开全文
  • Nginx的理解 - -相对于Apache 概要:nginx的源码安装,参数配置,make,nginx与Apache的区别,四层均衡负载均衡,七层负载均衡。线程与进程首先,我们还是通过实验Nginx的配置进行剖析,了解Nginx都可以实现什么...


    对Nginx的理解

                                 - -相对于Apache


        概要:nginx的源码安装,参数配置,make,nginx与Apache的区别,四层均衡负载均衡,七层负载均衡。线程与进程

    首先,我们还是通过实验对Nginx的配置进行剖析,了解Nginx都可以实现什么功能。

        第一部分:实验

        ##获得nginx包,并解压:

    wpsE7EA.tmp

        README文件是自述文件。也就是服务该如何配置的文件,相当于使用指南:

    wpsE81A.tmp

    wpsE81B.tmp

        他说要到网上查看如何安装和配置:

        首先指导我们进行源代码安装:

    wpsE81C.tmp

        解压后文件是6.2M:

    wpsE81D.tmp

        用帮助查看怎么用源代码安装:

    wpsE82E.tmp

        帮助里会告诉我们怎么安装我们需要的服务,比如ssl,和http

    wpsE82F.tmp

        还可以指定nginx的用户和组:

    wpsE830.tmp

        还有安装路径的前缀:

    wpsE831.tmp

        然后就可以开始安装:

    wpsE832.tmp

        安装完成后会显示需要依赖软件,所以,我们要安装依赖软件,并且结尾应该是devel:

    wpsE842.tmp

        再安装,再查看依赖性,解决依赖:

    wpsE843.tmp

        直到解决所有依赖性,然后就完成了第一步,接下来是

        Make  make install

        当然 这三步也可以一次完成:

    wpsE844.tmp

        在第一步完成后会生成makefiel文件,指导make的运行:

    wpsE845.tmp

    wpsE846.tmp

    wpsE857.tmp

        我们现在安装的nginx是5.5M,是因为debug(排除程序故障,是及其重要的编译操作)的原因。

    wpsE858.tmp

        开启nginx,查看端口:

    wpsE859.tmp

        用命令和浏览器可以查看现在nginx开启:

    wpsE85A.tmp

    wpsE85B.tmp

        关闭并且删除nginx:

    wpsE86B.tmp

    wpsE86C.tmp

        Make  clean  相当于删除makefiel然后把解压包也删了,从头开始做,

    wpsE86D.tmp

        解压,进入解压包:

    wpsE86E.tmp

        之前我们做的安装完成后,会有nginx的版本号,这样很不安全,下面是在安装时去除版本号:

    wpsE86F.tmp

    wpsE870.tmp

    wpsE871.tmp

        在下面的文件中编辑GCC,在安装过程中不进行Debug,这样nginx将会很小。

    wpsE872.tmp

    wpsE883.tmp

    wpsE884.tmp

        然后就是源码安装:

    wpsE885.tmp

    wpsE886.tmp

        进入安装位置,查看端口:

    wpsE887.tmp

        检查,可以访问,并且包很小:

    wpsE888.tmp

        安装好之后,我们必须在nginx下的sbin下执行./nginx才能开启nginx,为了不麻烦,我们可以将要执行的目录链接到环境变量下,这样就可以在任何位置执行并开启nginx了

    wpsE899.tmp

        当你再查询nginx的位置时显示的是链接的位置:

    wpsE89A.tmp

        这样我们就可以在任何位置进行nginx的开启,关闭看,重新加载。

        下面来配置nginx的动态模块,这样在你安装nginx的时候,如果是动态模块,那么你就可以在需要的时候打开,不需要的时候关闭。然而它支持的动态模块有限,这里我们以mail为例,相对于这一点,Apache的配置文件中是已经内置了动态模块:

    wpsE89B.tmp

    wpsE89C.tmp

    wpsE8AC.tmp

        一个安装包可以安装多次但每次都必须make clean,目的是刷新删除makefile这个文件(这个文件是每次在第一步后在安装包中生成的,用来指导make,而不是在安装位置)

    wpsE8AD.tmp

        Nginx  --help可以查看怎么设置安装:

    wpsE8AE.tmp

        动态模块是在静态模块后面加上dynamic:

        这里我们安装两个动态库,并解决依赖性:

    wpsE8AF.tmp

        Make  && make install

        这样在安装的目录下就会有modules的目录,并且在modules中有刚刚我们增加的动态模块,当我们需要启动服务时,就可以在nginx的主配置文件中加入:

    wpsE8B0.tmp

    wpsE8B1.tmp

       并且只能增加在第一行,否则 ./nginx  -t 会有语法错误。

    wpsE8B2.tmp

        这样检测语法,重新加载就可以使用mail服务了。

        ##修改nginx的用户:

        默认是nobody

    wpsE8B3.tmp

        在配置文件第一行修改:

        ###限制用户访问资源数:

        如果不限制用户访问资源数,会把内存消耗完,这样系统就会崩溃。

        把内存资源消耗完的命令:

    wpsE8B4.tmp

        意思是一个请求接着一个请求。

        Ulimit:限制用户的最大进程数,

        Ulimit  -a显示当前的所有用户的进程限制。

    wpsE8C5.tmp

        现在一个进程打开的文件个数是默认的1024个。

        我们新增一个用户,查看他的进程限制,还是 默认一个进程可以打开1024个文件。

        ##wxh可以打开最大的进程相互为100,当然,我们也可以设置最大的文件数:

    wpsE8C6.tmp

    wpsE8C7.tmp

        查看:

    wpsE8C8.tmp

        再用shell×××去测,发现他是一个循环,最多占用100个进程,然后就退出,然后再进行×××。

         ##统计访问次数:

    wpsE8C9.tmp

    wpsE8CA.tmpwpsE8CB.tmpwpsE8CC.tmp

    wpsE8DC.tmp

    wpsE8DD.tmp

        ##手写网页跳转:

    wpsE8DE.tmp

    wpsE8DF.tmp

        生成证书:

    wpsE8E0.tmp

    wpsE8E1.tmp

    wpsE8E2.tmp

    wpsE8E3.tmp

    wpsE8E4.tmp

    wpsE8E5.tmp

        ###网页重定向:

        修改发布目录

    wpsE8F6.tmp

    wpsE8F7.tmpwpsE8F8.tmpwpsE8F9.tmp

        在主机上增加解析:

    wpsE8FA.tmp

        有时会不停闪烁,加上<noscript >就行了

    wpsE8FB.tmp

        ###网页重写

    wpsE8FC.tmp

    wpsE8FD.tmpwpsE8FE.tmpwpsE8FF.tmp

        还要把之前做的重定向注释掉:

    wpsE900.tmpwpsE901.tmp

        ###虚拟主机

    wpsE902.tmp

    wpsE903.tmp

    wpsE904.tmp

    wpsE905.tmp

        ##负载均衡:

        对westos.org做负载均衡

        在server3中开启http,将昨天vanish做的虚拟主机删除,修改发布目录:

    wpsE906.tmp

        Server2也要修改发布目录:

    wpsE917.tmp

        重启两个http,检测发布目录没错:

    wpsE918.tmp

    wpsE919.tmp

        这是在虚拟主机的基础上加了负载均衡,两者不牵扯:

    wpsE91A.tmp

    wpsE91B.tmp

    wpsE91C.tmp

    wpsE91D.tmp

        检测:

    wpsE91E.tmp

    wpsE91F.tmp

        负载均衡可以加权重:

    wpsE920.tmp

        加完权重后的效果:

    wpsE921.tmp

        Backup表示此台主机并不是负载均衡主机,而是当所有其他主机都挂掉后,显示这台主机的发布目录,我们可以在这一页写上“系统正在维护”等

    Nginx的发布目录是在nginx下的html下的index.html:

    wpsE922.tmp

        还可以使用IP hash 和将某一台负载均衡器关了。

    wpsE923.tmp

    wpsE924.tmp

        增加sticky模块,把之前做的nginx删了,重新安装:

    wpsE925.tmp

    wpsE926.tmp

    wpsE927.tmp

    wpsE928.tmp

        这样就增加了一个sticky模块。

    第二部分:相关知识的补充

        ##GUN的相关知识:

        GUN计划,又叫做革奴计划,目标是创建一套完全自由的操作系统,为保证GUN软件可以自由的使用,复制修改传播,就有了GUN通用公共许可证。

    GUN计划首先完成的是开发出了许多软件包,包括强大的文字编辑器emacs,GCC(GUN编译器集合,是一套由GUN开发的编程语言编译器),以及大部分UNIX系统的程序库和工具。唯一没有完成的就是操作系统与内核。

    然后李纳斯托沃兹开发出来linux操作系统内核,并与其它GUN软件结合,尽管如此,GUN计划还是开发出自己内核。

        ##Make理解:

        在我们用源码安装nginx时只需三步就可以,这里就用到了GUN的make工具,我们在shell提示符下只需要输入make命令就可以完成自动编译,极大的提高了效率,这是因为有makefile文件,makefile文件指出了整个工程所有文件的编译顺序,编译规则(哪些文件先编译,哪些文件后编译哪些需要重新编译),makefile有自己的书写格式,关键字,函数。

    只有linux中才有makefile,window中IDE(集成开发环境)已经将makefile这个工作给做了。在UNIX下的软件编译,就需要自己写makefile。

         Makefile就像shell脚本一样,其中也可以执行操作系统的命令。

    关于程序的编译(compile)连接(link):

    编译时,编译器只检测程序的语法,和函数,变量是否被声明,如果函数未被声明,会警告,但是,仍然会生成object file(-o在window中是obj)而在连接程序时,连接器会在所有的object file中找寻函数的实现,如果找不到,就会报错。

    我们在命令行输入make,他会在当前目录下找makefiel文件或Makefile。

        下面是makefiel的详细讲解:

         http://sc.qq.com/fx/u?r=PPKILEA

        ##一线互联网公司所使用的web服务器:

    网易(163,com),新浪(sina),360用的就是nginx

    百度用的是Apache

    wpsE938.tmp

    wpsE939.tmp

        基本筛选引擎(BFE)是一种管理防火墙internet协议安全(IPsec)策略以及实施用户模式筛选的服务。停止或禁用BFE服务将大大降低系统的安全。

    腾讯用的是squid:

    wpsE93A.tmp

        淘宝用的是自己阿里的tengine

        ##Nginx的master和worker的浅析:

        Nginx开启后会在后台运行,包括一个master进程和多个worker进程。可以让他前台运行也可以关掉master进程,让其以单进程方式运行。

        Nginx有single和master两种进程模块,single模型是单进程的,容错能力差,不适合生产场景,生产场景用的master模型,即一个master进程加上N个worker进程。Master进程负责管理worker进程是master进程fork出来的,用来处理请求。

         Worker数最多只能和CPU 数相等,查看系统CPU个数用licpu.

    Nginx之所以快是因为master-worker模块和七层负载均衡。

        七层负载均衡是vanish和nginx常用的。

        ###DNS四层负载均衡与nginx七层负载均衡的异同:

        四层负载均衡是用户将数据包发到四层服务器,然后到后端服务器,后端服务器直接将数据包返回给用户,并且更改了IP数据包的地址,实现分流。四层均衡器只是起到一个转发的作用,以TCP为例,三次握手但是建立在client和server上的, 七层是后端机器要将数据包先返回给七层服务器,在返回给用户,这样效率会差一点。Client和七层服务器之间,七层服务器和server指间都会有三次握手,七层服务器相当于一个代理。

    当有***时,四层会直接发送给后端,而七层会过滤掉,这样七层就比较安全。

    七层可以实现对流量的统计,能够将访问不同内容(文字or图片)的包分发给不同的服务器。

        下面是对四层和七层的详细讲解:

         http://shikezhi.com/html/2016/nginx_0407/1099813.html

        ##同步阻塞与异步非阻塞:

        Apache 本身采用同步阻塞,也有异步非阻塞,但是与自身冲突,所以不常用。

    Nginx采用异步非阻塞:一个线程注册多个IO事件,IO事件准备完就处理,如果如果没有准备完,则阻塞一段时间,在这段是间内,如果准备问就直接处理。提升了CPU利用率和高并发的处理能力。

        总得来说就是:

        同步阻塞:是CPU处理一个进程完后才能进行下一请求。

        非阻塞:是开多个线程,但是这样会在内存占用和线程切换之间浪费开销。

        异步非阻塞:一个线程上注册多个IO,一完就处理,如果没完就阻塞一段时间,再处理。不是在线程之间切换而是在请求之间切换,就不存在线程之间切换的开销。

        在传统的同步阻塞IO模型下,七层服务器每次向后端服务器发送请求需要等待响应结果,这样CPU大部分时间都在等待IO完成,效率非常低。为了解决这个问题可以采用非阻塞的方式,七层服务器开多个工作线程,每个工作线程通过轮询的方式去检查IO事件是否完成,如果没有完成则让出CPU让其他工作线程处理。这种方式比同步阻塞的方式要好,但是只有在工作线程很多的情况下效率才比较高,而工作线程一多带来的内存开销以及线程切换的开销也非常大,阻碍了进一步提升并发处理能力。这时可以采用异步非阻塞IO模型,也就是说不再开很多个工作线程,而是由一个工作线程注册很多个IO事件,如果有IO事件准备完毕,则可以直接处理。如果没有准备完毕,则阻塞一个固定超时时间,在这个时间之内如果有多个IO事件都准备完毕了,则可以依次处理这些IO事件。从整体上来看节省了上下文切换的开销,提升了CPU的利用率,因此也提升了并发处理能力。这也是当前select/poll/epoll/kqueue这些机制的基本原理。

        在传统的同步阻塞IO模型下,七层服务器每次向后端服务器发送请求需要等待响应结果,这样CPU大部分时间都在等待IO完成,效率非常低。为了解决这个问题可以采用非阻塞的方式,七层服务器开多个工作线程,每个工作线程通过轮询的方式去检查IO事件是否完成,如果没有完成则让出CPU让其他工作线程处理。这种方式比同步阻塞的方式要好,但是只有在工作线程很多的情况下效率才比较高,而工作线程一多带来的内存开销以及线程切换的开销也非常大,阻碍了进一步提升并发处理能力。这时可以采用异步非阻塞IO模型,也就是说不再开很多个工作线程,而是由一个工作线程注册很多个IO事件,如果有IO事件准备完毕,则可以直接处理。如果没有准备完毕,则阻塞一个固定超时时间,在这个时间之内如果有多个IO事件都准备完毕了,则可以依次处理这些IO事件。从整体上来看节省了上下文切换的开销,提升了CPU的利用率,因此也提升了并发处理能力。这也是当前select/poll/epoll/kqueue这些机制的基本原理。

        Nginx与七层负载均衡参考:

        http://blog.csdn.net/xiaoao89757/article/details/450582

    21

        四七层代理区别:

    http://hi.baidu.com/aking_roc/item/3f62cb0f57b49736a3332a9e

        Nginx平台初探:

    http://tengine.taobao.org/book/chapter_02.html

    第三部分:原理讲解

        Nginx与Apache的区别:

        最大的区别是nginx占用资源少,可处理高并发,epoll的IO模型使nginx性能更高,是异步非阻塞处理请求,还是高度模块化的,配置简洁,静态性能好,本身就是就是一个反向代理器,七层负载均衡。

        而Apache能够更加稳定,少BUG模块超级多,select的IO模型使他吃力请求相对较慢,配置相对麻烦,处理动态好,rewrite功能强。

    最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 。

        好的模型是前端nginx抗高并发,后端Apache是Apache集群。

    下面是两者区别的详细介绍:

        1、nginx相对于apache的优点:

        轻量级,同样起web 服务,比apache 占用更少的内存及资源.

        抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能.

        高度模块化的设计,编写模块相对简单.

        社区活跃,各种高性能模块出品迅速啊.

        apache 相对于nginx 的优点:

        rewrite ,比nginx 的rewrite 强大.

        模块超多,基本想到的都可以找到.

        少bug ,nginx 的bug 相对较多.

        超稳定.

        存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。

        2、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue 作为开发模型.

        Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.

    作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验.

    Nginx 是一个安装非常的简单 , 配置文件非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 .

        3、Nginx 配置简洁, Apache 复杂

        Nginx 静态处理性能比 Apache 高 3倍以上

        Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用

        Apache 的组件比 Nginx 多

        现在 Nginx 才是 Web 服务器的首选

        4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

        5、nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济的方式.

        6、从个人过往的使用情况来看,nginx的负载能力比apache高很多。最新的服务器也改用nginx了。而且nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端nginx抗并发,后端apache集群,配合的也不错。

        7、nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。

        8、从我个人的经验来看,nginx是很不错的前端服务器,负载性能很好,在老奔上开nginx,用webbench模拟10000个静态文件请求毫不吃力。apache对php等语言的支持很好,此外apache有强大的支持网路,发展时间相对nginx更久,bug少但是apache有先天不支持多核心处理负载鸡肋的缺点,建议使用nginx做前端,後端用apache。大型网站建议用nginx自代的集群功能

        9、Nginx优于apache的主要两点:1.Nginx本身就是一个反向代理服务器 2.Nginx支持7层负载均衡;其他的当然,Nginx可能会比apache支持更高的并发,但是根据NetCraft的统计,2011年4月的统计数据,Apache依然占有62.71%,而Nginx是7.35%,因此总得来说,Aapche依然是大部分公司的首先,因为其成熟的技术和开发社区已经也是非常不错的性能。

        10、你对web server的需求决定你的选择。大部分情况下nginx都优于APACHE,比如说静态文件处理、PHP-CGI的支持、反向代理功能、前端Cache、维持连接等等。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。

        11、可以看一下nginx lua模块:https://github.com/chaoslaw...apache比nginx多的模块,可直接用lua实现apache是最流行的,why?大多数人懒得更新到nginx或者学新事物

        12、对于nginx,我喜欢它配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器

        13、Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧

        Ulimit的讲解:

        http://www.linuxidc.com/Linux/2012-10/72782.htm

        线程与进程的区别:

        链接:

        来源:luoweifu

        链接:blog.csdn.net/luoweifu/article/details/46595285

    转载于:https://blog.51cto.com/yaoxiaofeng/1852128

    展开全文
  • 谈谈我对apache+tomcat+jk2整合的理解

    千次阅读 2004-05-07 13:28:00
    整合目的(完全臆想) ------------------------------------------------------------------------------ apache 和 tomcat都可以做为独立WEB服务器来用,apache功能强大、高效,但并不能支持JSP及serlet,而...
    整合的目的(完全臆想) 
    ------------------------------------------------------------------------------
    apache 和 tomcat都可以做为独立的WEB服务器来用,apache功能强大、高效,但并不能支持JSP及serlet,而tomcat正相反,所以要把它们结合起来。
    通过在apache中加载整合模块和进行设置,apache就能够根据url,把不属于自己的请求转给tomcat.

    版本的选择的相关性:
    ------------------------------------------------------------------------------
    1.Apache
    httpd2.0.x,对于与apache1.3.x等版本有什么区别不知道,应该有个飞跃吧,连名字都改成httpd了。而我们选择了用JK2整合,JK2是针对apache2.0的思想开发的(英语太差,见原文:JK2 has been developed with Apache 2.0 in mind),所以选择用httpd2.0.x。

    2.整合方式-JK2
    为什么选择JK2呢?(JK is a replacement to the elderly mod_jserv. It was a completely new Tomcat-Apache plug-in that handles the communication between Tomcat and Apache.The newest JK2 is a refactoring of JK . The native part has been completly restructured and the configuration has been simplified a lot.)我只看重了最后一句话,呵呵。在JK的文档中有关于以前的整合模块及JK、JK2功能的详细描述。

    3.Tomcat5.0、J2SDK1.4.x
    能够支持JAVA,JSP,及Servlet的较新标准吧?它们之间应该有一定的关联,据说tomcat5及JDK1.4对中文的支持方式改变了不少,现在不用进行复杂的设置了就可以很好的使用中文,但对于针对以前JSP标准开发的页子的中文兼容性不太好。

    编译安装过程中的注意事项:
    -------------------------------------------------------------------------------
    1.Apache
    必须编译成允许动态加载模块的方式,即在configure时要加 --enable-so选项,因为将来要加载mod_jk2这个整合模块。
    假设apache的安装目录为PathofApache,则编译的模块在PathofApache/modules下,配置文件在PathofApache/conf下。

    2.tomcat
    只会用编译好的版本。解压、释放包就行了。(听说tomcat是JAVA写的,不知道用那个ANT编译有什么优势也没试成功过),假设tomcat安装目录为PathOfTomcat。

    3.JDK
    我用的是二进制版本,直接运行,自己解压释放包。(如果用那个RPM包我不知道JAVA_HOME怎么设,呵呵)设置JAVA_HOME和CLASSPATH环境变量。JAVA_HOME也可以不设置而在PathOfTomcat/bin/catalina.sh中赋值,CLASSPATH目前我还没设置,也许在JSP中要用到JAVA标准类的时候要用到。

    4。JK2模块编译
    假设JK2包释放后目录改名为PathOfJK2,且当前目录为PathOfJK2(
    参考JK文档,注意关于编译的部分在JK部分有说明,而默置要看JK2部分,因为不同的整合方式有很大的不同。http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/


    cd jk/native2

    chmod +755 buildconf.sh
    ./buildconf.sh (因为buildconf.sh没有执行权,所以要改,但“零二年的夏天”告诉我只要 sh buildconf.sh就可以执行了)

    ./configure --with-apxs2=PathOfApache/bin/apxs
    这个apxs在apache的安装目录的bin下,所以要先装apache。据说只有编译安装的apache才有这个文件,rpm包安装的没有这个文件,如果要给rpm包安装的apache编译整合模块,要找一个相同版本的编译一下用然后再删掉,版本号要完全相同,否则编译出来的模块不能用。
    还有两个参数我没有,英文的说明也没看太懂,就在JK的文档中有说明:
    --with-apache=DIR,DIR is the path where apache sources are located. The apache sources should have been configured before configuring mod_jk. DIR is something like: /home/apache/apache_1.3.19 It builds a static Apache module.
    --enable-EAPI,This parameter is needed when using Apache-1.3 and mod_ssl, otherwise you will get the error message: "this module might crash under EAPI!" when loading mod_jk.so in httpd. Not needed when --with-apxs has been used

    另外,我在执行configure的时候提示有错误,好像是关于路径的,我就先启动了tomcat,执行通过。(也许是我没有设置关于tomcat目录的环境变量的原因)
    make
    make install

    所有的文档都说如果发布不成功,那么要手工发布,我也是手工发布的:
    cp PathOfJK2/build/jk2/apache2/mod_jk2.so PathOfApache/modules/

    配置文件的修改
    -------------------------------------------------------------------------------
    JK2所用的配置文件有2个:
    jk2.properties,默认要放在PathOfTomcat/conf中
    workers2.properties默认要放在PathOfApache/conf中

    这两个文件的作用真的不明白,jk2.properties可能是定义tomcat与apache的通讯端口等,workers2.properties可能是告诉apache有哪些目录是tomcat支持的。

    1.在PathOfTomcat/conf中有tomcat的主配置文件server.xml和JK2的配置文件jk2.properties。
        实际上我对这两个文件没有做任何修改,而jk2.properties缺省就是空的。看了看在server.xml中起作用的可能就是在第一个后面紧挨着的对于整合在起作用吧,没有应该加上。
    <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" enableLookups="false"  redirectPort="8443" debug="0"
    protocol="AJP/1.3" />

    2.在PathOfApache/conf中有apache的配置文件httpd.conf,及JK2配置文件workers2.properties
    修改httpd.conf,只加入:LoadModule jk2_module modules/mod_jk2.so
    关于workers2.properties,引用JK文档例子中最小配置如下:
    # Define the communication channel
    [channel.socket:localhost:8009]
    info=Ajp13 forwarding over socket
    tomcatId=localhost:8009

    # Map the Tomcat examples webapp to the Web server uri space
    [uri:/examples/*]
    info=Map the whole webapp

    这个/examples应该是tomcat下的路径而不是apache的,但在这里做了映射,这个URL就能被apache接受并转给tomcat,而不用加tomcat的端口号了。
    这样就完成了一种整合方式,这可能是最简单但很少用的配置方法吧
    ——————————————————————————

    还有一种配置的方法很实用,但有一点地方不明白,适合做虚拟主机。

    1.把apache与tomcat都做虚拟主机,并且相同的主机指向相同的根目录
    2,默认情况下:jk2.properties可为空,workers2.properties不用做地址映射(?)
    3.除了做虚拟主机,还要做如下修改
    http.conf的修改
    在虚拟主机之前加入
    <Directory ~ "/WEB-INF/">
    Order allow,deny
    Deny from all
    </Directory>
    #因为apache与tomcat指向相同的目录,所在要禁止对WEB-INF的访问。

    在虚拟主机的配置中
    <Location ~ "/*.jsp|/*/servlet/*">
    JkUriSet worker ajp13:localhost:8009
    </Location>
    #这可能是做映射,将目录中的jsp和servlet由tomcat解析。

    server.xml的修改

    在虚拟主机的host中加入
    <Context path="" docBase="" debug="1"/>
    (这个tomcat很奇怪,不像apache只要指定DocumentRoot,那么网站的逻辑根目录就是DocumentRoot指定的了,而tomcat用appBase指定的应该叫什么呢?要用上面的一句将appBase指定的目录声明为根目录,appBase下其它目录默认情况下就是网站逻辑子目录)

    关于虚拟主机整合的配置,JK文档的例子说得很清楚,或看本版的一篇精华。
    ------------------------

    我就理解这么多,对于jk2.properties,workers2.properties,tomcat,apache里的配置参数根本很少了解,我想把它们理解了也许就明白了。。。。。。

    展开全文
  • 都是转载整合目的(完全臆想) ------------------------------------------------------------------------------ apache 和 tomcat都可以做为独立WEB服务器来用,apache功能强大、高效,但并不能支持JSP及...
  • 认为tomcat就是apache,或者tomcat是apache的图形界面 实际上可以认为tomcat是apache服务器的一个模块,主要支持jsp   2. 认为tomcat建好后,任何网页或者网站文件只要往webapp里面一扔就能显示...
  • 二、Apache 访问控制 三、用户授权限制 四、Apache 日志分割 4.1、 Apache 自带 rotatelogs 分割工具 4.2、 使用第三方工具 cronolog 分割 总结: 一、Apache 连接保持 HTTP 是属于应用层面向对象...
  • 整合目的(完全臆想)------------------------------------------------------------------------------apache 和 tomcat都可以做为独立WEB服务器来用,apache功能强大、高效,但并不能支持JSP及serlet,而...
  • Apache Rewrite 理解

    千次阅读 2009-03-18 13:31:00
    由于工作需要,查了一下Apache的文档,对其中反向引用和条件的执行做了理解和实验,下面是对Apache 2.2文档的摘录,并在上面做了实验的例子说明,希望能给一些需要深入理解的一些帮助。 其他部分就不做更多的说明,...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    要想真正理解Linux系统,就必须从Linux命令学起,通过基础命令学习可以进一步理解Linux系统。 不同Linux发行版命令数量不一样,但Linux发行版本最少命令也有200多个。这里笔者把比较重要和使用频率最多命令...
  • 这些源码反映了那时那景笔者未来盲目,代码热情、执着,IT憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet...
  • 一个apache有linux下并发不是很高,大约到3K样子,普通服务器都会不同程度出现问题.apache有关并发控制主要是prefork和worker二个其中一个来控制.我们可以使用httpd -l来确定当前使用MPM是prefork.c,还是...
  • apache中,通常都是在httpd.conf文件中完成服务器配置,但是对于一些管理员来说,更简单精细化控制目录可以使他们节省很多时间,于是.htaccess文件提供了这样一个功能(其实apache提供这种独立出来....
  • 深入理解Apache虚拟主机

    千次阅读 2011-01-24 17:03:00
    通常分为这样3种:基于域名,基于端口,基于IP,以及它们的混合准备工作:在apache的主目录/var/www/html/下分别建立四个文件夹s1,s2,s3,s4,在里面建立不同网站的主页文件,如s1下面建立index.html内容为this is s1, s2...
  • 不相同,为了就人们mod_rewrite是怎么认识有一个快速看法,我在twitter上搜索了一下"mod_rewrite",并且将我写这篇 文章时前几个搜索页面结果找出来: midk:啊!.hatccess和mod_rewrite是如此...

空空如也

1 2 3 4 5 ... 20
收藏数 1,697
精华内容 678
关键字:

对apache的理解