centos8 编译安装 httpd-2.4.43

安装apache 需先安装 三个组件才可以:

apr、apr-util 和 pcre;

下载地址 https://gitee.com/daxuesi/apache-installation-package

下载 安装包文件后,上传至 linux 上

1.安装apr

  1. [root@xt test]# tar -zxf apr-1.4.5.tar.gz  
  2. [root@xt test]# cd  apr-1.4.5  
  3. [root@xt apr-1.4.5]# ./configure --prefix=/usr/local/apr  
  4. [root@xt apr-1.4.5]# make && make install  

2.安装apr-util

  1. [root@xt test]# tar -zxf apr-util-1.3.12.tar.gz  
  2. [root@xt test]# cd apr-util-1.3.12  
  3. [root@xt apr-util-1.3.12]# ./configure --prefix=/usr/local/apr-util 
  4. -with-apr=/usr/local/apr/bin/apr-1-config  
  5. [root@xt apr-util-1.3.12]# make && make install 

3.安装pcre

  1. [root@xt test]#unzip -o pcre-8.10.zip  
  2. [root@xt test]#cd pcre-8.10  
  3. [root@xt pcre-8.10]#./configure --prefix=/usr/local/pcre
  4. [root@xt pcre-8.10]#make && make install 

4. 将apr和apr-util 放到 apache安装目录下的srclib下 去掉版本号 改名为apr和apr-util

5.相关软件安装

注意:--with-z-dir=/usr/local/zlib命令使用zlib压缩网络数据 ;系统环境在未安装 zlib 的情况下 ,需要安装 zlib 程序

5.1安装 zlib

  1. [root@xt test]# tar -zxf zlib-1.2.11.tar.gz 
  2. [root@xt test]# cd  zlib-1.2.1 
  3. [root@xt apr-1.4.5]# ./configure --prefix=/usr/local/zlib  
  4. [root@xt apr-1.4.5]# make && make install

5.2 安装openssl  注意,必须在 apache之前安装不然缺少lib库 红色的部分不能缺少不然apache无法加载ssl库

  1. [root@xt test]# tar -zxf openssl-1.0.2j.tar.gz
  2. [root@xt test]# cd  openssl-1.0.2j
  3. [root@xt apr-1.4.5]# ./config --prefix=/usr/local/ssl -g3 shared zlib-dynamic enable-camellia
  4. [root@xt apr-1.4.5]# make && make install

 

6. 通过命令执行下面脚本运行  

./configure --prefix=/usr/local/apache --sysconfdir=/usr/local/apache/conf --enable-so --enable-ssl --with-ssl=/usr/local/ssl --enable-track-vars --enable-rewrite --with-z-dir=/usr/local/zlib --enable-mods-shared=most--with-included-apr --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre

注意:记得命令中每个--前面必须要有空格 不然 加了相当于没加

–prefix: httpd-2.4程序安装路径
–sysconf: 配置文件安装路径
–enable:所有的–enable后面都是模块,这里表示编译时启动这些模块。

7.运行安装命令 make 和 make install  

不报错说明安装完成;

 

8.进入 /usr/local/apache/bin 目录下,运行命令启动服务

./apachectl -f  /usr/local/apache/conf/httpd.conf -k start

 

9.出现错误:

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

解决方案:

进入配置文件目录/conf目录下
修改ServerNamewww.exam.com:80 前面的#去掉
改成ServerName 127.0.0.1:80 即可 
 
cd  /usr/local/apache/conf;
vim httpd.conf 
 

 

 :wq 退出

9.1 配置文件问题 

如果配置文件配置在 etc/httpd下面而不是apache/conf 不是/etc/httpd的httpd.conf 而是 conf目录下的httpd.conf 不然无效
 强烈建议最好配置文件安装在apache/conf目录下 不然会出现加loadmodule 失败的各种问题
配置集群
打开httpd.conf 
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
前面#去掉
 如果红色部分不加上 可能启动不报任何错误 但是看日志error文件会出现以下错误
 
10.判断是否启动直接看log下或者httpd/run目录下是否有httpd.pid文件 或者 ps -ef | grep httpd或者 netstat -aon | grep 端口号
11.访问https://ip/正常访问 解决
####################################################
其他配置 问题(部分拷贝其他博客,未作验证) :
如果不加载lbmethod 这几个模块 下面集群的lbmethod就没法使用
 如果需要配置粘性session 集群 如果将proxy放在virtualhost外 粘性session无效
在httpd.conf最下面添加
 
 
<VirtualHost *:8888>  
    ServerAdmin lixin1112003@126.com  
    ServerName localhost  
    ServerAlias localhost  
    ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID|jsessionid nofailover=On  
    ProxyPassReverse / balancer://cluster/  
    #ErrorLog "/logs/error.log"  
    #CustomLog "/logs/access.log" common  
    <proxy balancer://cluster>  
   BalancerMember ajp://localhost:8019 loadfactor=1 route=tomcat_a  smax=5 max=20 ttl=120 retry=300 timeout=15  
   BalancerMember ajp://localhost:9019 loadfactor=1 route=tomcat_b  smax=5 max=20 ttl=120 retry=300 timeout=15  
   ProxySet lbmethod=byrequests  
    </proxy>  
</VirtualHost>   
说明 :
lbmethod=byrequests(根据请求数来均衡)
bytraffic(根据传送的字节数来均衡 也就是流量)
bybusyness (根据执行请求的平衡)
 具体参数干嘛用的 直接参考 http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
8888是上面配置的端口
Listen 8888
 
如果需要重新编译apache 安装 直接删除掉开始的usr/local/apache
然后就编译运行 安装过程只生成了 文件 没有任何其他服务生成  不像rpm包
注意一个问题 不要再相同的解压好了的包重新编译 不然配置是无效的
最好删除掉重新解压一份在配置 编译
 
如果需要配置ssl
打开httpd.conf 去掉注释
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
 
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
 
打开httpd-ssl.conf
找到
SSLCertificateFile "/root/qymg/server.cer"
SSLCertificateKeyFile "/root/qymg/server.key"
改成你的证书路径
在<VirtualHost _default_:443>
下面加上
ServerAdmin lixin1112003@126.com  
    ServerName localhost  
    ServerAlias localhost  
    ProxyRequests Off 
    ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID|jsessionid nofailover=On  
    ProxyPassReverse / balancer://cluster/  
    #ErrorLog "/logs/error.log"  
    #CustomLog "/logs/access.log" common  
    <proxy balancer://cluster>  
   BalancerMember ajp://localhost:8019 loadfactor=1 route=tomcat_a  smax=5 max=20 ttl=120 retry=300 timeout=15  
   BalancerMember ajp://localhost:9019 loadfactor=1 route=tomcat_b  smax=5 max=20 ttl=120 retry=300 timeout=15  
   ProxySet lbmethod=byrequests  
    </proxy> 
 
启动 apachectl -k start 报错
Syntax error on line 21 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/libexec/libssl.so into server: libssl.so.1.0.0.: cannot open shared object file: No such file or directory
因为我们加载的模块是 mod_ssl.so
通过命令查询 mod_ssl.so依赖哪些库
[root@tianchi154 modules]# ldd mod_ssl.so
     
        linux-vdso.so.1 =>  (0x00007fffdabfa000)
        libssl.so.1.0.0 => not found
        libcrypto.so.1.0.0 => not found
        libuuid.so.1 => /lib64/libuuid.so.1 (0x00002ac2a25e7000)
        librt.so.1 => /lib64/librt.so.1 (0x00002ac2a27eb000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ac2a29f5000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ac2a2c2d000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002ac2a2e48000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ac2a304d000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003ebc400000)
 
发现libssl.so.1.0.0和libcrypto.so.1.0.0找不到
通过 whereis libssl.so.1.0.0命令找不到这个库 说明环境变量没有
最后发现这两个库是openssl的两个库
到openssl目录的lib下发现有这两个库
如果要让mod_ssl.so找到这两个库必须将ssl/lib添加到 LD_LIBRARY_PATH变量下
~/.bashrc(每次登录每次打开shell读取一次) 或者 ~/.bash_profile(每次登录读取一次)添加语句
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib
重新打开shell 输入 echo $LD_LIBRARY_PATH 可以看到路径ok
在执行 apachectl -k start

 

posted @ 2020-12-30 18:29  神笔码靓  阅读(413)  评论(0)    收藏  举报