【apache源码安装与配置】

本文详细介绍了Apache源码在Linux环境下的编译安装步骤,包括环境准备、httpd配置、虚拟主机配置、访问控制及https服务配置。在虚拟主机配置中,分别讲解了相同IP不同端口、不同IP相同端口以及相同IP相同端口不同域名的配置方法。在https服务配置中,提到了证书的生成与配置,并指出生产环境中通常购买证书。

apache源码安装与配置

1.apache源码编译安装

1.1 环境准备

  • 网卡配置 vim wget 以及依赖包openssl-devel pcre-devel expat-devel libtool gcc
[root@rookie ~]# yum  -y install wget vim  
[root@rookie ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@rookie ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
[root@rookie ~]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
[root@rookie ~]# wget https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
[root@rookie ~]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc make --allowerasing
[root@rookie ~]# useradd -r -M -s /sbin/nologin apache 
[root@rookie ~]# id apache
[root@rookie ~]# grep apache /etc/group

1.2 编译安装apache 顺序为apr—>arp-util----->httpd

//全部解压缩
[root@rookie ~]# ls
anaconda-ks.cfg  apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.53.tar.gz
[root@rookie ~]# tar -xf apr-1.7.0.tar.gz 
[root@rookie ~]# tar -xf apr-util-1.6.1.tar.gz 
[root@rookie ~]# tar -xf httpd-2.4.54.tar.gz 
[root@rookie ~]# ls
anaconda-ks.cfg  apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.53.tar.gz
apr-1.7.0        apr-util-1.6.1    httpd-2.4.54

//apr配置文件更改和编译
[root@rookie ~]# cd apr-1.7.0
[root@rookie apr-1.7.0]# vim configure
 # $RM "$cfgfile"        //将此行加上注释,或者删除此行
[root@rookie apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@rookie apr-1.7.0]# make && make install


//编译安装apr-util
[root@rookie ~]# cd apr-util-1.6.1
[root@rookie apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@rookie apr-util-1.6.1]# make && make install

//编译安装httpd 
[root@rookie apr-util-1.6.1]# cd ../httpd-2.4.54
[root@rookie httpd-2.4.54]# ./configure --prefix=/usr/local/apache  --enable-so --enable-ssl --enable-cgi --enable--rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most  --enable-mpms-shared=all --with-mpm=prefork 
....
 Server Version: 2.4.54
    Install prefix: /usr/local/apache
    C compiler:     gcc
    CFLAGS:          -g -O2 -pthread  
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE  
    LDFLAGS:           
    LIBS:             
    C preprocessor: gcc -E
[root@rookie httpd-2.4.54]# make && make install

2. httpd配置

2.1 设置环境变量 头文件 man文档

//环境变量设置
[root@rookie ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@rookie ~]# source /etc/profile.d/apache.sh 
[root@rookie ~]# which httpd 
/usr/local/apache/bin/httpd
[root@rookie ~]# which apachectl
/usr/local/apache/bin/apachectl

//头文件设置
[root@rookie ~]# ln -s /usr/local/apache/include/ /usr/include/apache 
[root@rookie ~]# ll /usr/include/|grep apache
lrwxrwxrwx.  1 root root     26 4月  16 00:10 apache -> /usr/local/apache/include/ 

//man文档
[root@rookie ~]# vim /etc/man_db.conf
MANDATORY_MANPATH                       /usr/local/apache/man  //需要添加的一行

在这里插入图片描述

2.2 服务启动与开机自启

//关防火墙
[root@rookie ~]# systemctl disable --now firewalld
[root@rookie ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; >
   Active: inactive (dead)
//立即生效
[root@rookie ~]# setenforce 0
[root@rookie ~]# getenforce 
Permissive
//设置永久生效
[root@rookie ~]# vim /etc/selinux/config
SELINUX=disabled 		//将enforcing 修改为 disabled

//启动服务
[root@rookie ~]# ss -antl
State  Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process                                                        
LISTEN 0       128            0.0.0.0:22          0.0.0.0:*                                                                   
LISTEN 0       128               [::]:22             [::]:*
[root@rookie ~]# apachectl start
[root@rookie ~]# ss -antl
State  Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process                                                        
LISTEN 0       128            0.0.0.0:22          0.0.0.0:*                                                                   
LISTEN 0       128               [::]:22             [::]:*                                                                   
LISTEN 0       128                  *:80                *:* 

在这里插入图片描述

//修改配置文件
[root@rookie ~]# cd /usr/local/apache/conf
[root@rookie conf]# vim httpd.conf
#ServerName www.example.com:80   // 此行取消注释

//设置开机自启 写一个server文件 可以直接复制其他的文件更改 
[root@rookie conf]# cd /usr/lib/systemd/system
[root@rookie system]# ls sshd.service 
sshd.service
[root@rookie system]# cp sshd.service httpd.service
[root@rookie system]# vim httpd.service
[Unit]
Description=httpd server daemon
After=network.target sshd-keygen.target

[Service]
Type=forking
ExecStart=/usr/lcoal/apache/bin/apachectl start 
ExecStop=/usr/lcoal/apache/bin/apachectl stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
  • 最后删除行 修改参数后的文件如图
    在这里插入图片描述
[root@rookie ~]# systemctl daemon-reload
[root@rookie ~]# systemctl status  httpd 
httpd.service - httpd server daemon
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disa>
   Active: inactive (dead)

root@rookie ~]# systemctl start httpd
[root@rookie ~]# ss -antl
State  Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process                                                        
LISTEN 0       128            0.0.0.0:22          0.0.0.0:*                                                                   
LISTEN 0       128               [::]:22             [::]:*                                                                   
LISTEN 0       128                  *:80                *:*                                                                   
[root@rookie ~]# systemctl status httpd 
httpd.service - httpd server daemon
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disa>
   Active: active (running) since Sat 2022-04-16 10:55:45 CST

[root@rookie ~]# systemctl enable httpd
[root@rookie ~]# systemctl status httpd 
 httpd.service - httpd server daemon
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor pre>
   Active: active (running) since Sat 2022-04-16 10:55:45 CST; 1min 35s ago

3. 虚拟主机配置

3.1 配置相同ip 不同端口号的虚拟主机

//进入并修改虚拟主机文件
[root@rookie ~]# cd /usr/local/apache/conf/extra
[root@rookie extra]# ls
[root@rookie extra]# vim httpd-vhosts.conf
  • 配置文件修改后如图
    在这里插入图片描述
//放网站的目录也要建好

[root@rookie ~]# cd /usr/local/apache/htdocs/
[root@rookie htdocs]# ls
index.html
[root@rookie htdocs]# mkdir test.example.com
[root@rookie htdocs]# ls
index.html  test.example.com


//取消注释/usr/local/apache/conf/httpd.confz中 关于配置文件的# Virtual hosts行  使得上面修改的文件能包含进来 ,让配置文件生效
[root@rookie htdocs]# vim  /usr/local/apache/conf/httpd.conf

在这里插入图片描述

//重启访问 此时网页为空
[root@rookie htdocs]# systemctl restart httpd
[root@rookie htdocs]# systemctl status httpd
 httpd.service - httpd server daemon
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-04-16 12:31:51 CST; 4s ago

在这里插入图片描述

  • 进入网站 没有命令首页文件(index.html)添加内容时,效果如下图
[root@rookie apache]# cd /usr/local/apache/htdocs/test.example.com/
[root@rookie test.example.com]# ls
[root@rookie test.example.com]# echo "wow wow wow" > xyx.html
[root@rookie test.example.com]# ls
xyx.html

在这里插入图片描述

![在这里插入图片描述]

  • 更名后首页效果图
[root@rookie test.example.com]#  mv xyx.html index.html
[root@rookie test.example.com]# ls
index.html

]
)

  • 建一个新网站 但因为此时只配置了一个虚拟主机,两个网站访问都是同一个页面
[root@rookie htdocs]# ls
index.html  test.example.com
[root@rookie htdocs]# mkdir blog.example.com
[root@rookie htdocs]# cd blog.example.com
[root@rookie blog.example.com]# ls
[root@rookie blog.example.com]# echo "good day to you" > index.html
[root@rookie blog.example.com]# ls
index.html
 

)

  • 改配置文件/usr/local/apache/conf/extra/httpd-vhosts.conf 设置两个网站并设置监听
[root@rookie ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf 
[root@rookie ~]# systemctl restart httpd
[root@rookie ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process 
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*            
LISTEN 0      128             [::]:22           [::]:*            
LISTEN 0      128                *:80              *:*            
LISTEN 0      128                *:81              *:*

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.2 配置不同ip 相同端口号的虚拟主机

  • 先加ip 让网卡至少有两个ip
[root@rookie ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:84:66:3b brd ff:ff:ff:ff:ff:ff
    inet 192.168.177.128/24 brd 192.168.177.255 scope global dynamic noprefixroute ens33
       valid_lft 995sec preferred_lft 995sec 
       
[root@rookie ~]# ip addr add 192.168.177.129/24 dev ens33
[root@rookie ~]# ip a s ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:84:66:3b brd ff:ff:ff:ff:ff:ff
    inet 192.168.177.128/24 brd 192.168.177.255 scope global dynamic noprefixroute ens33
       valid_lft 928sec preferred_lft 928sec
    inet 192.168.177.129/24 scope global secondary ens33
       valid_lft forever preferred_lft forever

  • 改配置文件/usr/local/apache/conf/extra/httpd-vhosts.conf
    在这里插入图片描述
  • 重启后验证
[root@rookie ~]# systemctl restart httpd

在这里插入图片描述

在这里插入图片描述

3.3 配置相同ip 相同端口号 不同域名的虚拟主机 (生产中常用)

  • 改配置文件/usr/local/apache/conf/extra/httpd-vhosts.conf
    在这里插入图片描述

  • 真机上C:\windows\system32\drivers\etc\hosts 加域名映射关系
    请添加图片描述
    请添加图片描述

在这里插入图片描述

4. 访问控制配置

  • 访问控制法则:
法则功能
Require all granted允许所有主机访问
Require all deny拒绝所有主机访问
Require ip IPADDR只有此ip可访问
Require not ip IPADDR只有此ip不可访问
Require host HOSTNAME只有此主机名可访问
Require not host HOSTNAME只有此主机名不可访问
IPADDR的类型HOSTNAME的类型
IP:192.168.1.1FQDN:完全限定域名
Network/mask:192.168.1.0/255.255.255.0DOMAIN:指定域内的所有主机
Network/Length:192.168.1.0/24
Net:192.168

- 注意:httpd-2.4版本默认是拒绝所有主机访问的,所以安装以后必须做显示授权访问

  • 限制此ip访问test.example.com
//修改配置文件
[root@rookie ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf 
[root@rookie ~]# systemctl restart httpd
[root@rookie ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process 
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*            
LISTEN 0      128                *:80              *:*            
LISTEN 0      128             [::]:22           [::]:*

请添加图片描述

  • 意味着其他ip可以访问test和blog两个网站 192.168.177.1网段只可以访问blog

在这里插入图片描述

  • 虚拟机可以访问
[root@rookie ~]# vim /etc/host
host.conf  hostname   hosts      
[root@rookie ~]# vim /etc/hosts
192.168.177.128 test.example.com blog.example.com 
[root@rookie ~]# curl test.example.com
wow wow wow
[root@rookie ~]# curl blog.example.com
good day to you

5. https服务配置

  • 前置准备:更改主配置文件,启用ssl模块
[root@rookie ~]# cd /usr/local/apache/conf/
[root@rookie conf]# vim httpd.conf
LoadModule ssl_module modules/mod_ssl.so    //取消注释这一行

5.1 生成证书(生产中一般是购买证书)

  • CA生成一对密钥
[root@rookie conf]# cd /etc/pki/
[root@rookie pki]# mkdir CA
[root@rookie pki]# cd CA
[root@rookie CA]# mkdir private
[root@rookie CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
[root@rookie CA]# ls private/
cakey.pem

  • CA生成自签署证书
[root@rookie CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
[root@rookie CA]# ls
cacert.pem  private
[root@rookie CA]# mkdir certs newcerts crl
[root@rookie CA]# touch index.txt && echo 01 > serial
  • 客户端(例如httpd服务器)生成密钥
[root@rookie apache]# cd /usr/local/apache/conf
[root@rookie conf]# mkdir ssl
[root@rookie conf]# cd ssl
[root@rookie ssl]# (umask 077;openssl genrsa -out httpd.key 2048)

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:runtime
Organizational Unit Name (eg, section) []:runtime
Common Name (eg, your name or your server's hostname) []:test.example.com
Email Address []:1@2.com

[root@rookie ssl]# ls
httpd.key
  • 客户端生成证书签署请求
[root@rookie ssl]# openssl req -new -key httpd.key -days 365 -out httpd.csr

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:runtime
Organizational Unit Name (eg, section) []:runtime
Common Name (eg, your name or your server's hostname) []:test.example.com
Email Address []:1@2.com

[root@rookie ssl]# ls
httpd.csr  httpd.key

  • CA签署客户端提交上来的证书
[root@rookie ssl]# openssl ca -in httpd.csr -out httpd.crt -days 365
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries

[root@rookie ssl]# rm -f httpd.csr 
[root@rookie ssl]# ls
httpd.crt  httpd.key

5.2 配置https

  • 改配置文件 打开ssl模块
[root@rookie ~]# vim /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-ssl.conf   //查找ssl.conf 取消此行注释

[root@rookie ~]# cd /usr/local/apache/conf
[root@rookie conf]# ls extra/
[root@rookie conf]# vim extra/httpd-ssl.conf
  • 这个配置文件有两处需要更改 如下图
    请添加图片描述
    请添加图片描述
  • 检查语法是否有问题
[root@rookie extra]# httpd -t
AH00526: Syntax error on line 92 of /usr/local/apache/conf/extra/httpd-ssl.conf:
//再次修改
[root@rookie extra]# vim /usr/local/apache/conf/httpd.conf 

  • 找到此行 取消注释
    在这里插入图片描述
[root@rookie extra]# httpd -t
Syntax OK

5.3 重启服务 设置hosts以便域名访问(生产无需此步)

[root@rookie ~]# systemctl restart httpd
[root@rookie ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process 
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*            
LISTEN 0      128                *:80              *:*            
LISTEN 0      128             [::]:22           [::]:*            
LISTEN 0      128                *:443             *:* 


//删除之前设置的访问限制
[root@rookie ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf 
Require not ip 192.168.177.1   //此行删除
[root@rookie ~]# systemctl restart httpd
[root@rookie ~]# ss -antl
  • 可以看到 自己配置的证书 只有QQ浏览器可以认证 其他浏览器不通过
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值