编译 apache 和 mod_jk 模块实现与 Tomcat 协同

  1. 首先下载apache的源码进行编译:http://httpd.apache.org/docs/current/install.html

    • 下载apache源码,configure时

      ./configure --prefix=/opt/apache2.4/
      

      但提示没有APR,故根据提示下载APR和APR-util:http://apr.apache.org/download.cgi

      但下载的都是源码包,需要编译,不过比较简单:

      //centos里面没有buildtool需要添加:
      yum groupinstall "Development Tools" 
      yum install pcre-devel -y
      
       ./configure 
         make
         make install
      

      在编译util的时候需要指定apr路径:

      ./configure --with-apr=/usr/local/apr/
      

      至此编译安装apr相关的两个软件完成。

      下面来继续编译apache:

      ./configure --prefix=/opt/apache2.4    //注意前面apache2.4后不要带/。。。
      //等配置完成
      make
      //等编译完成
      make install
      //完成。
      

      至此,apache编译安装完成。

      为方便启动,可用将bin设置到path中, 方法如下:

      # 在 ~/.bashrc 最后一行添加:
      export PATH="$PATH:your path1:your path2 …"//这里添加的是apache的bin目录
      # 然后
      source ~/.bashrc
      

      需要开机启动的话:在/etc/rc.local里添加脚本的完整路径,并且不要忘了修改权限:

      比如startupapache.sh脚本,添加到rc.local中,脚本内容如下:

      一定要记住修改新建的脚本本身的权限,卡这里好久

      /xxx/xxx/apachectl start       //此时环境变量还没初始化,故需要使用绝对路径!
      

      这个文件就是开启启动时执行的。

      不过编译后的不支持php,需要安装php支持模块:

      安装后在httpd.conf里面加入LoadModule,但是提示php支持模块线程不安全,需要重新编译,只有自己编译php了。。。

      编译之后再loadModule

      编译php:

      先卸载掉之前的php所有东西:

      apt-get remove php*
      

      卸载完成后,准备编译php:

      获取php源码:

      http://php.net/downloads.php
      

      下载下来的源码包。

      接下来踩坑继续:ls

      遇到没有libxml2,好吧,安装。。。提示安装了最新版

      yum install libxml2-devel
      sudo apt-get install libxml2-dev
      

      然后是没有xml2-config,好吧,继续:说是在libxml2-dev包中,好吧,apt-get安装。

      安装好了没问题了。开始编译。

      //按官方的来:http://php.net/manual/en/install.unix.apache2.php
      //官方说先要编译安装apache,之前就做好了。
      cd ../php-NN
      ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
      //但是貌似在最新的php7上面这个enable不识别,没有清除干净的话使用apt-get remove *php*来清除之前残留,find / -name *php*只会出现源码包
      make
      make install
      //尼玛买个256MB的VPS编译php都内存不够,擦了!stop掉tomcat和apache重新开始编译。。\
      但是编译出来还是出错,后面查php的bug库发现由于内存少于512MB时都会出现这个bug,
      //之后是设置php.ini
      cp php.ini-development /usr/local/lib/php.ini
      //再之后是为apache添加php模块:
      LoadModule php7_module modules/libphp7.so
      
      http://php.net/manual/en/install.unix.apache2.php
      

      安装官方文档所说的一步一步来即可编译并配置好php。

      配置apache的php:

      坑:

      filesmatch是在Directory标签内的子标签。。。

      
          SetHandler application/x-httpd-php
      
      

      另外就是由于浏览器缓存,还以为配置没成功,结果刷新就好了。

      编译mod_jk

      http://tomcat.apache.org/connectors-doc/common_howto/quick.html
      

      坑:

      编译mod_jk时:http://tomcat.apache.org/connectors-doc/

      1. mod_jk。https://tomcat.apache.org/connectors-doc/miscellaneous/faq.html
      2. ./configure --with-apxs=/usr/sbin/apxs http://it.toolbox.com/blogs/lim/compiling-tomcat-connector-mod_jk-on-redhat-6805
      3. make
      4. make install
      5. 现在mod_jk就在apache中了。

配置步骤:

https://www.mulesoft.com/tcat/tomcat-clustering

  • step1:完成mod_jk的编译和安装(已完成)

  • step2:在httpd.conf里面配置mod_jk模块:

      # Load the mod_jk module.  
      LoadModule    jk_module  path/to/mod_jk.so
    
  • step3:配置其他Apache端的配置

    1. 配置worker文件目录:

      JkWorkersFile /path/to/httpd/conf/workers.properties
      
    2. 配置worker们的共享内存路径:

        JkShmFile /path/to/log/httpd/mod_jk.shm
      
    3. 配置日志文件:

       JkLogFile  /path/to/log/httpd/mod_jk.log
      
    4. 配置日志级别:

      JkLogLevel    level
      
    5. 配置日志的时间戳格式:

       JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
      
    6. 加载worker(即Tomcat实例,下一步就是配置它):

      JkMount  /examples/* worker1
      //这个配置的意思是:所有example应用的请求都交给对应的worker1
      

    汇总起来就是下面的内容:

      # Load mod_jk module
      # Update this path to match your modules location
      LoadModule    jk_module  modules/mod_jk.so
      # Declare the module for  (remove this line for Apache 2.x)
      AddModule     mod_jk.c
      # Where to find workers.properties
      # Update this path to match your conf directory location (put workers.properties next to httpd.conf)
      JkWorkersFile /etc/httpd/conf/workers.properties
      # Where to put jk shared memory
      # Update this path to match your local state directory or logs directory
      JkShmFile     /var/log/httpd/mod_jk.shm
      # Where to put jk logs
      # Update this path to match your logs directory location (put mod_jk.log next to access_log)
      JkLogFile     /var/log/httpd/mod_jk.log
      # Set the jk log level [debug/error/info]
      JkLogLevel    info
      # Select the timestamp log format
      JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
      # Send everything for context /examples to worker named worker1 (ajp13)
      JkMount  /examples/* worker1
    

  • step4:配置workers.properties文件:

    这个文件中就是所有的和HTTPD服务器进行交流的Tomcat实例配置。

    下面来看看workers.properties文件的配置:

     #定义一个真实的worker,如果有多个,以逗号分隔。
      worker.list=worker1
      # Set properties for worker1 (ajp13)
      worker.worker1.type=ajp13
      worker.worker1.host=localhost
      worker.worker1.port=8009
    

    下面就来启动一下apache和Tomcat试试效果。

你可能感兴趣的:(编译 apache 和 mod_jk 模块实现与 Tomcat 协同)