本篇博客内容主要有:
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版本 |