本篇博客内容主要有:
apache的简介和安装
apache实现文件共享
apache虚拟主机功能
apache访问控制IP
apache用户认证
http 工作状态码
一.apache简介
apache : 意为充满补丁的服务器(a patchy server) , 它是一个web网站服务器软件 , 用来发布网站信息资源 , 给用户提供网页服务
工作端口:TCP 80
其他的web服务器软件除了apache , 常见的还有nginx , tomcat(java) , iis(windows).....
相比其他web软件其优点有:安装配置方便简单 , 兼容性好 , windows和linux系统都支持apache , 稳定性高 , 安全可靠 , 支持模块扩展
apache架构基本为:lamp(Linux + Apache + Mysql + PHP)
工作过程:
第1步、连接过程:客户端通过浏览器输入的URL采用HTTP协议与服务器之间通过TCP三次所握手建立连接。
第2步、请求过程:向服务器请求网站的主页资源,通常默认主页为index.html、index.php、index.jsp等文件名。
第3步、应答过程:服务器将主页文件传送给客户机浏览器。如果主页不存在,会显示网页不存在。
第4步、关闭连接:为了避免一直占用服务器资源,数据传送完毕会自动关闭TCP连接。
apache部署流程
此实验在主机node12上进行(192.168.11.12)
systemctl stop firewalld && setenforce 0 #关闭防火墙和selinux
yum install -y httpd httpd-manual #安装httpd软件 ,手册(可不安装)
systemctl start httpd && systemctl enable httpd #启动服务
ss -anput | grep :80 #查看80端口是否开启
测试:
apache的默认网站目录为: /var/www/html/ , 在此可以设置一个简单的主页进行测试
date > /var/www/html/index.html
curl 192.168.11.12 #linux用curl访问网站 , curl最小版linux系统需要安装
windows直接用浏览器地址栏输入ip即可访问
httpd主配置文件
rpm -qc httpd #查看配置文件
其中/etc/httpd/conf/httpd.conf为主配置文件
httpd.conf配置文件组成:全局设置、模块设置、虚拟主机设置、目录访问权限设置。
全局设置:Listen监听端口、Root默认网站根目录、Directory目录权限等设置
模块设置:IfModule各种功能模块设置,如基于用户认证的访问模块、fastcgi通用网关接口模块、PHP模块等。
虚拟主机设置:<VirtualHost ip:port>主页目录、管理员邮箱设置</VirtualHost>
目录访问权限设置:<Directory 目录路径>访问权限设置</Directory>
line |
配置选项 |
功能解释 |
31 |
ServerRoot "/etc/httpd" |
apache工作目录 |
Include conf.d/*.conf |
包含的配置文件(可在此存放虚拟主机配置文件) |
|
42 |
Listen 80 |
监听所有IP的80号端口 |
56 |
Include conf.modules.d/*.conf |
包含的配置文件 |
66 |
User apache |
apache服务进程的用户账号。ps -u apache |
67 |
Group apache |
apache服务进程的组账号。ps -g apache |
86 |
ServerAdmin root@localhost |
管理员邮箱 |
102 |
<Directory /> |
/根目录访问权限设置 |
103 |
AllowOverride none |
不启用htaccess访问控制功能 |
104 |
Require all denied |
拒绝任何人访问 |
105 |
</Directory> |
目录权限设置的结束标记 |
119 |
DocumentRoot "/var/www/html" |
默认网站主页的根目录 |
124 |
<Directory "/var/www"> |
/var/www目录的访问权限设置 |
125 |
AllowOverride None |
不启用htaccess访问控制功能 |
127 |
Require all granted |
允许任何人访问 |
128 |
</Directory> |
目录权限设置的结束标记 |
131 |
<Directory "/var/www/html"> |
/var/www/html目录的访问权限设置 |
144 |
Options Indexes FollowSymLinks |
启用索引和符号链接功能,允许无主页时显示文件列表(Indexes仅用于实现文件共享) |
151 |
AllowOverride None |
不启用htaccess访问控制功能 |
156 |
Require all granted |
允许任何人访问 |
Order allow,deny Allow from all Deny from 192.168.10.60 |
访问规则控制的顺序,先允许,后拒绝 允许任何IP的客户机访问此目录 拒绝192.168.10.60的客户机访问此目录 |
|
157 |
</Directory> |
目录权限设置的结束标记 |
163 |
<IfModule dir_module> |
关于dir_module这个模块设置 |
164 |
DirectoryIndex index.html index.php |
指定默认主页文件名的检索先后顺序 |
165 |
</IfModule> |
模块设置的结束标记 |
171 |
<Files ".ht*"> |
.ht*文件访问的权限设置 |
172 |
Require all denied |
拒绝任何人访问 |
173 |
</Files> |
文件访问权限设置的结束标记 |
182 |
ErrorLog "logs/error_log" |
错误访问日志文件,完整路径为/etc/httpd/logs/error_log |
CustomLog logs/access_log combined |
默认网站的访问日志 |
|
189 |
LogLevel warn |
日志文件等级为warn警告级 |
191 |
<IfModule log_config_module> |
日志配置模块设置 |
202 |
</IfModule> |
|
217 |
CustomLog "logs/access_log" combined |
CustomLog访问日志格式 |
218 |
</IfModule> |
模块设置的结束符 |
220 |
<IfModule alias_module> |
alias别名模块设置 |
247 |
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" |
设置/var/www/cgi-bin/目录的别名为/cgi-bin |
249 |
</IfModule> |
|
276 |
ServerName www.example.com:80 |
默认网站的域名和端口号(用域名访问此网站) |
261 |
<IfModule mime_module> |
mime_module模块设置 |
266 |
TypesConfig /etc/mime.types |
|
283 |
AddType application/x-compress .Z |
|
284 |
AddType application/x-gzip .gz .tgz |
|
305 |
AddType text/html .shtml |
|
306 |
AddOutputFilter INCLUDES .shtml |
|
307 |
</IfModule> |
|
316 |
AddDefaultCharset UTF-8 |
默认的字符编码为UTF-8,win7采用GB2312编码(即GBK) |
348 |
EnableSendfile on |
允许发送文件。实现文件下载 |
353 |
IncludeOptional conf.d/*.conf |
包含conf.d目录下的*.conf配置文件,虚拟主机配置文件可以保存在此处。 |
二.apache实现文件共享
实例 : 对镜像进行共享
httpd想要共享的话,需废掉welcome.conf(默认主页)并保证/var/www/html没有其他.html文件
mv /etc/httpd/conf.d/welcome.conf{,.bak} #对welcome.conf文件改名为.bak
满足上述条件时 :
第一步 , 在/var/www/html/下创建需要分享的文件的挂载目录
mkdir /var/www/html/iso
mount /dev/sr0 /var/www/html/iso #将镜像挂载到/var/www/html/iso目录
systemctl restart httpd #重启服务
第二步 , 在浏览器地址栏输入IP:192.168.11.12验证效果
三.虚拟主机设置
虚拟主机即在一台服务器上发布多个不同的网站 , 通常有以下三种解决方法:
基于端口的虚拟主机 | 服务器只有一个IP,但每个网站绑定在不同的端口上 . 例如:80 , 8081 , 8082等 |
基于IP的虚拟主机 | 服务器网卡设置多个IP地址 , 每个网站绑定在不同的IP地址上 |
基于域名的虚拟主机(最常用) | 服务器只有一个IP地址 , 给服务器设置多个主机名 , 每个网站绑定在不同主机名上 |
基于端口的虚拟主机:
第一步 : 前期准备工作 , 设置3个网站目录 , 分别设置简单的主页
第二步 : 编辑创建文件/etc/httpd/conf.d/gg.conf , 内容为
第三步 : 保存文件退出后 , 重启服务 , 进行访问测试
基于IP的虚拟主机
第一步 : 前期准备工作 , 给主机临时添加两个虚拟IP , 查看效果如下图:
第二步 : 编辑配置文件 /etc/httpd/conf.d/gg.conf 文件
第三步 : 重启服务 , 进行测试
基于域名的虚拟主机
第一步 : 因为是测试 , 可以修改本地域名解析文件/etc/hosts
第二步 , 重启服务进行测试
可以看到 , 三个域名指向的是同一个IP
四 . 访问控制IP
第一步 : 把上面的/etc/hosts文件改回 , 编辑主配置文件/etc/httpd/conf/httpd.conf , 添加如下内容:
第二步 : 重启服务 , 用192.168.11.11(node11)和192.168.11.14(node14)两台主机进行访问
结果为192.168.11.11成功访问 , 192.168.11.14读取的只是apache的默认主页文件 , /gg/www/目录读取不到
五 . 用户认证
apache的用户认证:是指客户端在访问网站时会提示输入用户名和密码 , 通过验证后才能显示网页内容
用户认证工具 : htpasswd
查htpasswd文件由哪个包提供: yum provides htpasswd
安装htpasswd工具的软件 : yum install -y httpd-tools
第一步 : 创建基于用户认证的账号 :
htpasswd -cm /etc/httpd/htuser tom #创建tom用户 , 并生成htuser账号文件 和 登录密码
cat /etc/httpd/htuser #查看htuser文件
第二步 : 编辑主配文件/etc/httpd/conf/httpd.conf文件(也可以在/etc/httpd/conf.d)
第三步 : 重启服务 , 进行测试
没有输入正确的认证用户账号密码时会报错
六 . http工作状态码
常见的代码如下:
代码 |
含义 |
100 |
请求已接收 , 客户端可以继续发送请求 |
101 |
Switching Protocals服务器根据客户端的请求切换协议 |
200 |
一切正常 |
201 |
服务器已经创建了文档 |
202 |
已经接受了请求 , 但尚未处理完成 |
203 |
文档正常返回 , 但一些头部信息可能不正确 |
300 |
客户端请求的资源可以在多个位置找到 |
301 |
客户端请求的资源可以在其他位置找到 |
305 |
请求代理服务 |
400 |
请求语法错误 |
401 |
访问被拒绝 |
401.1 |
登录失败 |
403 |
资源不可用 |
403.6 |
IP地址被拒绝 |
404 |
无法找到指定资源 |
406 |
指定资源已找到 , 但MIME类型与客户端要求不兼容 |
407 |
要求进行代理身份验证 |
500 |
服务器内部错误 |
500.13 |
服务器太忙 |
501 |
服务器不支持客户端的请求功能 |
502 |
网关错误 |
503 |
服务不可用 |
504 |
网关超时 , 服务器处于维护或负载过高无法响应 |
505 |
服务器不支持客户端请求的HTTP版本 |