关于作者
周李杰,最后一批90后,现居湖北武汉
孤独患者,懒癌中期,无脑幻想者。但却人畜无害,无需远离。
兴趣众多,然无一精通。正努力成为一个有趣的人。
1 2
| > print("👆以上是不完整的我") //请我吃大餐将会了解更多 >
|
[TOC]
httpd简介
Apache HTTP Server(简称Apache或httpd)是Apache软件基金会的一个开放源代码的网页服务器软件,旨在为unix,windows等操作系统中提供开源httpd服务。由于其安全性、高效性及可扩展性,被广泛使用,自1996年4月以来,Apache一直是Internet上最流行的HTTP服务器。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器等编译到httpd的相关模块中。
apache
httpd版本
在CentOS6.X的版本中默认是提供httpd-2.2版本的rpm包
在CentOS7.X的版本中默认师提供httpd-2.4版本的rpm包
本篇博文主要介绍httpd-2.4
httpd的特性
工作模型 |
工作方式 |
prefork |
多进程模型,预先生成进程,一个请求用一个进程响应 一个主进程负责生成n个子进程,子进程也称为工作进程 每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达 最大不会超过1024个 |
worker |
基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程) |
event |
基于事件的驱动,一个进程处理多个请求 |
httpd-2.4新增的模块
- mod_proxy_fcgi 反向代理时支持apache服务器后端的模块
- mod_ratelimit 提供速率限制功能的模块
- mod_remoteip 基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制
httpd基础
httpd自带的工具程序
htpasswd basic认证基于文件实现时,用到的帐号密码生成工具
htpasswd httpd自带的服务控制脚本,支持start,stop,restart
apxs 由httpd-devel包提供的,扩展httpd使用第三方模块的工具
rotatelogs 日志滚动工具
suexec 访问某些有特殊权限配置的资源时,临时切换至指定用户运行的工具
ab apache benchmark,httpd的压力测试工具
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
辅助配置文件
web相关的命令
curl
- curl是基于URL语法在命令行方式下工作的文件传输工具
- 支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议
- 功能有很多:https认证、http的POST/PUT等方法、ftp上传、kerberos认证、http上传、代理服务器、cookies、用户名/密码认证等
- 最常用于下载
1 2 3 4 5 6 7 8 9 10
| [root@server222 ~]
[root@server222 ~] % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 13560 100 13560 0 0 15741 0 --:--:-- --:--:-- --:--:-- 15730 [root@server222 ~] anaconda-ks.cfg initial-setup-ks.cfg 模板 图片 下载 桌面 blog.html 公共 视频 文档 音乐
|
httpd
1 2 3 4 5 6 7
| httpd [options] -l 查看静态编译的模块,列出核心中编译了哪些模块 -M 输出一个已经启用的模块列表 -v 显示httpd的版本,然后退出 -V 显示httpd和apr/apr-util的版本和编译参数,然后退出 -X 以调试模式运行httpd,ctrl+c退出 -t 检查配置文件是否有语法错误
|
编译安装httpd-2.4
准备环境
- 需yum安装Development Tools
- 需yum安装openssl-devel、pcre-devel、expat-devel、libtool
- 需编译安装apr-1.4、apr-util-1.4(1.4以上版本)
- 编译安装httpd-2.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| [root@server222 ~]
[root@server222 ~] [root@server222 ~] uid=990(apache) gid=985(apache) 组=985(apache)
[root@server222 ~]
[root@server222 ~]
[root@server222 ~] [root@server222 ~] [root@server222 ~]
[root@server222 ~] [root@server222 apr-1.7.0] 查找/$cfgfile
保存并退出 [root@server222 apr-1.7.0] [root@server222 apr-1.7.0]
[root@server222 apr-1.7.0] [root@server222 apr-util-1.6.1] [root@server222 apr-util-1.6.1]
[root@server222 apr-util-1.6.1] [root@server222 httpd-2.4.39] > --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@server222 httpd-2.4.39]
[root@server222 httpd-2.4.39] [root@server222 httpd-2.4.39] [root@server222 httpd-2.4.39] /usr/local/apache/bin/httpd [root@server222 httpd-2.4.39] AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::1bd0:d77:f2c2:6f3%ens33. Set the 'ServerName' directive globally to suppress this message httpd (pid 104458) already running # 出现报错 解决 [root@server222 httpd-2.4.39]# vim /etc/httpd24/httpd.conf 查找 /ServerName www.example.com # ServerName www.example.com:80 //将前面的注释取消掉 保存并退出 [root@server222 httpd-2.4.39]# /usr/local/apache/bin/apachectl start httpd (pid 104458) already running [root@server222 httpd-2.4.39]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* LISTEN 0 5 192.168.122.1:53 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::111 :::* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::* # 可以看到80 端口已经启用 # 关闭防护墙和SElinux [root@server222 httpd-2.4.39]# systemctl stop firewalld.service [root@server222 httpd-2.4.39]# setenforce 0
|
打开火狐输入IP地址

简略解释选项含义:
–enable-so 启用动态支持
–with-zlib 使用zlib压缩库,将数据压缩再传输
–enable-modules=most 启用哪些模块
–enable-mpms-shared=all 把哪些模块做成动态共享模块
httpd常用配置
yum安装:/etc/httpd/conf.modules.d/00-mpm.conf:切换使用MPM(工作模型)
源码安装:就在主配置文件中(/etc/httpd/httpd.conf)
- 模块文件在/usr/local/apache/modules中以.so结尾的文件
查看配置文件/etc/httpd/httpd.conf
1 2 3 4 5 6 7 8 9 10 11 12
|
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
|
访问控制法则
法则 |
功能 |
Require all granted |
允许所有主机访问 |
Require all denied |
拒绝所有主机访问 |
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访问
1 2 3 4 5 6 7 8 9 10 11 12
| [root@server222 ~]
<VirtualHost 192.168.176.222:80> DocumentRoot "/usr/local/apache/htdocs" <Directory /usr/local/apache/htdocs> <RequireAll> Require all granted Require not ip 192.168.176.111 </RequireAll> </Directory> </VirtualHost> [root@server222 ~]
|
在本地主机访问:

虚拟主机有三类:
1 2 3 4 5 6 7 8
| [root@server222 ~] [root@server222 ~] 119 DocumentRoot "/home/wwwroot" 120 121 122 123 124 <Directory "/home/wwwroot">
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~]
Listen 80 Listen 81 [root@server222 ~] [root@server222 ~] <VirtualHost 192.168.176.222:80> DocumentRoot "/home/wwwroot/80" ServerName "www.123.com" <Directory "/home/wwwroot/80"> AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.176.222:81> DocumentRoot "/home/wwwroot/81" ServerName "www.abc.com" <Directory "/home/wwwroot/81"> AllowOverride None Require all granted </Directory> </VirtualHost> [root@server222 ~] [root@server222 ~]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| [root@server222 ~] [root@server222 ~] IPADDR0=192.168.176.222 IPADDR1=192.168.176.223 IPADDR2=192.168.176.224 PREFIX=24 GATEWAY=192.168.176.2 DNS1=192.168.176.2 IPV6_PRIVACY=no [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] <VirtualHost 192.168.176.222> DocumentRoot /home/wwwroot/10 ServerName www.123.com <Directory /home/wwwroot/10 > AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.176.223> DocumentRoot /home/wwwroot/20 ServerName www.456.com <Directory /home/wwwroot/20 > AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.176.224> DocumentRoot /home/wwwroot/30 ServerName www.789.com <Directory /home/wwwroot/30 > AllowOverride None Require all granted </Directory> </VirtualHost> [root@server222 ~] [root@server222 ~]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| [root@server222 ~] 192.168.176.222 www.123.com www.abc.com [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] [root@server222 ~] <VirtualHost 192.168.176.222> DocumentRoot "/home/wwwroot/123" ServerName "www.123.com" <Directory "/home/wwwroot/123"> AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.176.222> DocumentRoot "/home/wwwroot/abc" ServerName "www.abc.com" <Directory "/home/wwwroot/abc"> AllowOverride None Require all granted </Directory> </VirtualHost> [root@server222 ~] [root@server222 ~]
|
练习
1.编译安装httpd-2.4
2.配置三种不同风格的虚拟主机
3.写博客,要写明环境背景、配置步骤,要有验证截图
打赏