httpd

1.安装httpd

[root@localhost ~]# mount /dev/cdrom /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@localhost ~]# yum -y install openssl-devel pcre-devel expat-devel libtool wget make

 把下载的源上传到 /usr/src

解压安装包

[root@localhost src]# wget https://mirrors.bfsu.edu.cn/apache/apr/apr-1.7.0.tar.gz
[root@localhost src]# wget https://mirrors.bfsu.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
[root@localhost src]#  wget https://mirrors.bfsu.edu.cn/apache/httpd/httpd-2.4.46.tar.gz
[root@localhost src]# tar xf apr-1.7.0.tar.gz
[root@localhost src]# tar xf apr-util-1.6.1.tar.gz
[root@localhost src]# tar xf httpd-2.4.46.tar.gz

编辑,安装,配置

[root@localhost src]# cd apr-1.7.0/
[root@localhost apr-1.7.0]# vim configure
# $RM "$cfgfile" //将此行加上注释,或者删除此行

[root@localhost apr-1.7.0]#  ./configure --prefix=/usr/local/apr
[root@localhost apr-1.7.0]#  make && make install                     //安装

[root@localhost apr-1.7.0]# cd /usr/src/apr-util-1.6.1/
[root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

[root@localhost apr-util-1.6.1]# make && make install                       //安装

[root@localhost src]# cd httpd-2.4.46
[root@localhost httpd-2.4.46]#  ./configure --prefix=/usr/local/apache \

--sysconfdir=/etc/httpd24 \
--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
[root@localhost httpd-2.4.46]# make && make install   

 

 关闭防火墙

[root@localhost ~]# systemctl stop firewalld        
[root@localhost ~]# setenforce 0
 

启动httpd

[root@localhost ~]# /usr/local/apache/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
[root@localhost ~]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port   Process   
LISTEN   0        32         192.168.122.1:53             0.0.0.0:*                
LISTEN   0        128              0.0.0.0:22             0.0.0.0:*                
LISTEN   0        5              127.0.0.1:631            0.0.0.0:*                
LISTEN   0        128              0.0.0.0:111            0.0.0.0:*                
LISTEN   0        128                 [::]:22                [::]:*                
LISTEN   0        5                  [::1]:631               [::]:*                
LISTEN   0        128                 [::]:111               [::]:*                
LISTEN   0        128                    *:80                   *:*       

2. httpd简介

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。

通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中作为服务运行。

3. httpd版本

本文主要介绍httpd的两大版本,httpd-2.2和httpd-2.4。

  • CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包
  • CentOS7系列的版本默认提供的是httpd-2.4版本的rpm包

 httpd的特性

httpd有很多特性,下面就分别来说说httpd-2.2版本和httpd-2.4版本各自的特性。

版本特性
2.2事先创建进程
按需维持适当的进程
模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块
支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等
支持https协议(通过mod_ssl模块实现)
支持用户认证
支持基于IP或域名的ACL访问控制机制
支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和密码)
支持URL重写
支持MPM(Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)
2.4httpd-2.4的新特性:
MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载
支持event MPM,eventMPM模块生产环境可用
支持异步读写
支持每个模块及每个目录分别使用各自的日志级别
每个请求相关的专业配置,使用<If>来配置
增强版的表达式分析器
支持毫秒级的keepalive timeout
基于FQDN的虚拟主机不再需要NameVirtualHost指令
支持用户自定义变量
支持新的指令(AllowOverrideList)
降低对内存的消耗
工作模型工作方式
prefork多进程模型,预先生成进程,一个请求用一个进程响应
一个主进程负责生成n个子进程,子进程也称为工作进程
每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个
worker基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程)
event基于事件的驱动,一个进程处理多个请求

 

httpd-2.4新增的模块

httpd-2.4在之前的版本基础上新增了几大模块,

模块功能
mod_proxy_fcgi反向代理时支持apache服务器后端协议的模块
mod_ratelimit提供速率限制功能的模块
mod_remoteip

基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制

 

 

 rpm包安装的httpd程序环境

文件/目录对应的功能
/var/log/httpd/access.log访问日志
/var/log/httpd/error_log错误日志
/var/www/html/站点文档目录
/usr/lib64/httpd/modules/模块文件路径
/etc/httpd/conf/httpd.conf主配置文件
/etc/httpd/conf.modules.d/*.conf模块配置文件
/etc/httpd/conf.d/*.conf辅助配置文件

mpm:以DSO机制提供,配置文件为/etc/httpd/conf.modules.d/00-mpm.conf

 3.httpd命令

[root@localhost ~]# httpd -l              //查看静态编译的模块,列出核心编译了哪些模块, 不会列出使                                                            用loadmodule指令动态加载的模块
Compiled in modules:                       
  core.c
  mod_so.c
  http_core.c

 

[root@localhost ~]# httpd -M           //输出一个已经启用的模块列表,包括静态编译服务

                                                          //器中的模块作为DSO动态加载的模块
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_anon_module (shared)
 authn_core_module (shared)
 authn_dbd_module (shared)
 authn_dbm_module (shared)
....................

 

[root@localhost ~]# httpd -v                   //显示httpd的版本,然后退出
Server version: Apache/2.4.37 (centos)
Server built:   Jul 31 2020 20:44:41

 


[root@localhost ~]# httpd -V                 //显示httpd和apr/apr-util的版本和编译参数,然后退出
Server version: Apache/2.4.37 (centos)
Server built:   Jul 31 2020 20:44:41
Server's Module Magic Number: 20120211:83
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
 

4.httpd常用配置

切换使用MPM(编辑/etc/httpd/conf.modules.d/00-mpm.conf文件):

//NAME有三种,分别是:

prefork

event

worker

[root@localhost ~]# cd /etc/httpd/conf.modules.d
[root@localhost conf.modules.d]# pwd
/etc/httpd/conf.modules.d

[root@localhost conf.modules.d]# ls
00-base.conf  00-lua.conf  00-optional.conf  00-systemd.conf  10-h2.conf        README
00-dav.conf   00-mpm.conf  00-proxy.conf     01-cgi.conf      10-proxy_h2.conf
[root@localhost conf.modules.d]# vim 00-mpm.conf               //效果如下图 

 

访问控制法则:

法则功能
Require all granted允许所有主机访问
Require all deny拒绝所有主机访问
Require ip IPADDR授权指定来源地址的主机访问
Require not ip IPADDR拒绝指定来源地址的主机访问
Require host HOSTNAME授权指定来源主机名的主机访问
Require not host HOSTNAME拒绝指定来源主机名的主机访问
IPADDR的类型HOSTNAME的类型
IP:192.168.1.1
Network/mask:192.168.1.0/255.255.255.0
Network/Length:192.168.1.0/24
Net:192.168
FQDN:特定主机的全名
DOMAIN:指定域内的所有主机

 

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

虚拟主机:
虚拟主机有三类:

  • 相同IP不同端口
  • 不同IP相同端口
  • 相同IP相同端口不同域名

相同ip不同端口:

[root@localhost ~]# ls /usr/local/apache/bin/                                    //查看
ab         apxs      dbmmanage  envvars-std  htcacheclean  htdigest  httpd      logresolve
apachectl  checkgid  envvars    fcgistarter  htdbm         htpasswd  httxt2dbm  rotatelogs
[root@localhost ~]# vim /etc/profile.d/httpd.sh                                 //编辑文件
[root@localhost ~]# cat /etc/profile.d/httpd.sh                                // 查看编辑的文件
export PATH=/usr/loacl/apache/bin:$PATH
[root@localhost ~]# source /etc/profile.d/httpd.sh                                // 读
[root@localhost ~]# apachectl start                                                    //重启网站
[root@localhost ~]# cd /usr/local/apache
[root@localhost apache]# ls                                                              
bin  build  cgi-bin  error  htdocs  icons  include  logs  man  manual  modules
[root@localhost apache]# cd htdocs                                           // 进入htdocs
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# mkdir site{1,2,3}                                   //创建目录1,2,3
[root@localhost htdocs]# ls
index.html  site1  site2  site3

[root@localhost htdocs]# echo 'site1' > site1/index.html                      //把site1写入目录site1里去
[root@localhost htdocs]# echo 'site2' > site2/index.html
[root@localhost htdocs]# echo 'site3' > site3/index.html
[root@localhost htdocs]# tree
.
├── index.html
├── site1
│   └── index.html
├── site2
│   └── index.html
└── site3
    └── index.html

3 directories, 4 files

效果如下图
 

[root@localhost htdocs]# cd /etc/httpd24
[root@localhost httpd24]# pwd                                      //查看当前目录
/etc/httpd24 
[root@localhost httpd24]# ls
extra  httpd.conf  magic  mime.types  original
[root@localhost httpd24]# vim httpd.conf                               //编辑httpd.conf 
#Include /etc/httpd24/extra/httpd-vhosts.conf                       //把#删掉 

[root@localhost httpd24]# vim extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/site1"
    ServerName site1.example.com
    ErrorLog "logs/site1.example.com-error_log"
    CustomLog "logs/site1.example.com-access_log" common
</VirtualHost>

 

 

[root@localhost httpd24]# vim extra/httpd-vhosts.conf       

同一个ip端口号不同,出来的效果就不一样,如果不加端口号,那么默认的就是第一个设置的80端口

<VirtualHost *:80> 
    DocumentRoot "/usr/local/apache/htdocs/site1"
    ServerName site1.example.com
    ErrorLog "logs/site1.example.com-error_log"
    CustomLog "logs/site1.example.com-access_log" common
</VirtualHost>

listen 81                                     //加上监听81端口
<VirtualHost *:81>
    DocumentRoot "/usr/local/apache/htdocs/site2"
    ServerName site2.example.com
    ErrorLog "logs/site2.example.com-error_log"
    CustomLog "logs/site2.example.com-access_log" common
</VirtualHost>
 

[root@localhost httpd24]# source /etc/profile.d/httpd.sh     
[root@localhost httpd24]# apachectl restart                       //每次修改之后都要重启Apache
[root@localhost httpd24]# 

不同ip相同端口 

[root@localhost ~]# ip addr add 192.168.11.250/24 dev ens160           //添加一个ip地址
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:51:a3:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.134/24 brd 192.168.11.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.11.250/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::7fa:afea:b17a:44be/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
 

[root@localhost ~]# cd /etc/httpd24
[root@localhost httpd24]# vim extra/httpd-vhosts.conf 

<VirtualHost 192.168.11.134:80>                //设置两个ip,同一个端口号
    DocumentRoot "/usr/local/apache/htdocs/site1"
    ServerName site1.example.com
    ErrorLog "logs/site1.example.com-error_log"
    CustomLog "logs/site1.example.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.11.250:80>
    DocumentRoot "/usr/local/apache/htdocs/site2"
    ServerName site2.example.com
    ErrorLog "logs/site2.example.com-error_log"
    CustomLog "logs/site2.example.com-access_log" common
</VirtualHost>
 

[root@localhost httpd24]# source /etc/profile.d/httpd.sh
[root@localhost httpd24]# apachectl restart                     重启

如果不行就看看防火墙关了没

[root@localhost httpd24]# systemctl stop firewalld
[root@localhost httpd24]# setenforce 0
[root@localhost httpd24]# apachectl restart                    重启

 

 相同IP相同端口不同域名

[root@localhost httpd24]# vim extra/httpd-vhosts.conf 
[root@localhost httpd24]# apachectl restart
[root@localhost httpd24]# cat extra/httpd-vhosts.conf 

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/site1"
    ServerName site1.example.com
    ErrorLog "logs/site1.example.com-error_log"
    CustomLog "logs/site1.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/site2"
    ServerName site2.example.com
    ErrorLog "logs/site2.example.com-error_log"
    CustomLog "logs/site2.example.com-access_log" common
</VirtualHost>

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值