Apache 的管理及优化 web
实验环境的搭建:
在当前主机中配置好软件仓库,可以在当前主机搭建本地软件仓库,也可以编写文件来访问远程主机的软件仓库。
1. Apache 的作用
在 web 被访问时通常使用 http:// 的方式;
http:// 表示超文本传输协议,需要软件来提供;
目前常见的软件如下:
Apache
nginx
stgw
jfe
Tengine
如输入命令 curl -I www.163.com ,即可查看 163 邮箱所用到的提供超文本服务的软件是 web;
输入命令 curl -I www.baidu.com ,即可查看百度所用到的提供超文本服务的软件是 bfe;
输入命令 curl -I www.Taobao.com ,即可查看淘宝所用到的提供超文本服务的软件是 Tengine;
输入命令 curl -I www.qq.com ,即可查看 qq 所用到的提供超文本服务的软件是 isa;
2. Apache 的安装
dnf install httpd.x86_64 -y
输入命令 dnf search httpd ,在软件库中找到 httpd 服务相关的软件包;
输入命令 dnf install httpd.x86_64 -y ,安装 httpd 服务;
3. Apache 的启用
在安装完成之后此服务并不会自动开启:
输入命令 systemctl enable --now httpd ,开启服务;
输入命令 systemctl status httpd ,查看服务是否已经成功开启;
在服务开启的情况下,设定火墙策略:
输入命令 firewall-cmd --permanent --add-service=http ,设定火墙策略,添加 http 服务到策略中;
输入命令 firewall-cmd --reload ,刷新火墙,让火墙策略生效;
输入命令 firewall-cmd --list-all ,查看所有的火墙策略;
当看到 services: 中有了 http 说明已经设定成功;表示 httpd 服务在火墙策略中对外开放。
当 http 设定好火墙策略时,在访问网页时会出现 Apache 服务的默认网页,如图所示:
4. Apache 的基本信息
- 服务名称: httpd
- 配置文件:
/etc/httpd/conf/httpd.conf ##主配置文件
/etc/httpd/conf.d/*.conf ##子配置文件 - 默认发布目录: /var/www/html
- 默认发布文件: index.html
- 默认端口:
80 #http
443 #https - 用户: apache
- 日志: /etc/httpd/logs
输入命令 rpm -qc httpd ,来查看此服务的配置文件;
输入命令 netstat -antlupe | grep httpd 来过滤显示 httpd 服务的端口信息;
5. Apache 的基本配置
- Apache 端口配置
输入命令 getenforce 查看系统的加强型火墙的状态,多看到的信息为 Disabled,表示火墙关闭,不会影响后续实验;当火墙开启时,需要编辑配置文件 /etc/selinux/config ,将火墙关闭,再重启系统即可;
输入命令 vim /etc/httpd/conf/httpd.conf,编辑主配置文件,修改内容如下图所示,表示将端口信息从 80 修改为 8080 ;
配置文件编辑完毕保存后,输入命令 systemctl restart httpd ,重启 httpd 服务,当文件内容书写不符合语法时会报错,按照报错信息进行修改,再次重启服务即可;
输入命令 netstat -antlupe | grep httpd 查看修改之后的端口信息;
由于该服务默认使用的是 80 端口,修改之后就不能访问网页;此时需要做如下设定:
输入命令 firewall-cmd --add-port=8080/tcp ,添加 8080 端口被允许;
输入命令 firewall-cmd --list-all ,查看端口信息;
当显示 ports:8080/tcp 表示设定成功,8080 不受 selinux 的限制;
此时再访问时只需加上端口就可以访问;
- 默认发布文件
输入命令 cd /var/www/html ,进入到默认发布目录;
输入命令 vim kkk,在默认发布目录中写入一个文件;
输入命令 vim index.html ,在默认发布目录中书写默认发布文件;默认发布文件必须命名为 index.html,而且默认发布文件必须在默认目录中;
以上书写内容如下图所示:
输入命令 systemctl restart httpd 重启 httpd 服务,此时在网页中输入当前主机的 ip 就可以访问到默认发布文件;
而要访问 kkk ,这个文件就需要在 ip 后加上该文件名称;
更改默认发布文件的名称:
输入命令 vim /etc/httpd/conf/httpd.conf 对主配置文件惊醒更改,内容如下所示; 表示默认发布文件有两个, 为westos 和 index.html;当 kkk 不存在时,访问 index.html ;当 kkk 存在时,直接访问 kkk。
在编写完毕之后,输入命令 systemctl restart httpd 重启 httpd 服务,此时在网页中输入当前主机的 ip 就默认访问的是 kkk 文件;
当输入命令 rm -fr kkk,删除该文件之后,再次访问即可访问 index.html 的内容。
- 默认发布目录
- 默认发布目录 /var/www/html
- 建立默认发布文件和默认发布目录
mkdir /var/www/kkk ,建立新的发布目录
vim /var/www/kkk/index.html,在新的发布目录中建立发布文件;
文件内容为 /var/www/kkk’s page; - vim /etc/httpd/conf/httpd.conf 编辑主配置文件,内容如下所示,第 123 行表示更改默认发布目录为 /var/www/kkk/ ,第125 行表示对于更改目录进行授权访问,否则访问不到;
- 输入命令 systemctl restart httpd ,重启 httpd 服务;
再次访问网页时即可看到更改后的默认发布文件内容。
6. Apache 访问控制
- 基于 IP
输入命令 mkdir /var/www/html/westos,新建目录;
输入命令 vim /var/www/html/westos/index.html,在新建的目录中编写发布文件;
默认在访问网页时,谁都可以看;
输入命令 vim /etc/httpd/conf/httpd.conf ,编辑主配置文件,设定的用户可以访问;第 130 行表示发布目录,第 131 行表示 allow 和 Deny 的读取顺序,第 132 行表示允许任何人访问 westos,第 133 行表示不允许 1号主机访问;
因为先读 allow 后读 Deny ,那么Deny 里面的信息会覆盖 allow 中的信息。当在1号主机中访问发布目录时会提示如下图所示的内容:
当在其他主机中访问时没有限制;
此时如果做如下设置则表示 第133行表示禁止所有用户访问 westos,第132行允许1号主机访问 westos ;此处 131 行表示先读 Deny 的信息,限制所有用户;再读 allow 的信息,允许 1 号主机访问,此时会覆盖 Deny 的信息,只允许1号主机访问;
- 基于用户认证
建立认证文件
输入命令 htpasswd -cm /etc/httpd/.htpasswd admin ;
当认证文件不存在时,需要加-c参数。c 表示创建 ,m 表示设定用户密码;新建的用户在系统存不存在没有关系,只是在完成认证时用到的用户身份而以;
输入命令 htpasswd -m /etc/httpd/.htpasswd zxk123 ;
再次建立的时候,当认证文件存在时,加 -c参数,会删除原有内容。
输入命令 vim /etc/httpd/conf/httpd.conf ,编辑主配置文件;
131 行表示指定认证文件,132 行表示指定认证提示,133 行表示指定认证类型,134 行表示指定认证用户,认证文件中 admin用户可通过认证,135 行表示认证文件中的所有用户都可以通过;
注:134 和 135 行的内容只能写一个
输入命令 systemctl restart httpd 重启 httpd 服务;
此时在访问网页时需要输入用户名和密码;
此时再打开网页时,只允许 admin 用户通过认证;
当密码输入正确后,便可访问;
再次访问时,便不再需要。
清空密码:
浏览器信息清空,按 ctrl+shift+del ,删除完毕之后,再次访问又要输入用户名称和密码;
7. Apache 的虚拟主机
- 默认 Apache 只能发布一个页面;如果要发布多个,可以用多个主机搭建多个 Apache,但是很浪费资源;可以选择搭建 Apache 的虚拟主机的。
- 编写主页内容
输入命令 mkdir -p /var/www/westos.org/{linux,shell,python} 建立需要发布的主页;
输入命令以下命令来编写三个主页的内容;
echo linux.westos.org > /var/www/westos.org/linux/index.html
echo shell.westos.org > /var/www/westos.org/shell/index.html
echo python.westos.org > /var/www/westos.org/python/index.html
- 在浏览器所在主机中书写本地解析
输入命令 vim /etc/hosts,书写本地解析地址;输入内容为:
192.168.122.200 linux.westos.org shell.westos.org python.westos.org www.westos.org
此时访问网页时,不管是输入 linux.westos.org shell.westos.org python.westos.org www.westos.org 中的哪一个访问的都是默认的测试页。
- 虚拟主机的搭建
输入命令 cd /etc/httpd/conf.d/ 进入到 httpd 服务的子配置目录;
输入命令 vim vhost.conf ,编辑子配置文件;
前 4 行表示 Apache 默认主机,第2、3行表示的分别是默认发布目录和默认主机的日志类型;后面第 6 至 22 行与此类似,表示 Apache 虚拟主机,其中第 7、13、19 表示虚拟主机域名,第8、14、20表示虚拟主机默认发布目录,第 9、15、21表示虚拟主机日志, combined 表示混合形日志;
在编辑完毕之后,保存退出,输入命令 systemctl restart httpd,重启服务;
当文件内容编辑的有语法问题时,重启服务会报错,
- 输入命令 > /var/log/messages,清空日志,再次重启,查看日志信息,找到报错点,进行修改;
- 重启失败时,根据提示输入journalctl -xe 查看报错信息,找到报错点,进行修改;
当重启服务完成之后,此时访问网页时即可访问多个页面,多个站点对应多个访问页面。
如果此时某一个页面访问不了,在 /etc/httpd/logs 目录中,输入命令 ls,查看对应为网页的日志信息即可。
8. Apache 的语言支持
- php
输入命令 vim /var/www/html/index.php,编辑发布文件内容如下所示;
在编辑完成之后,此是访问发布文件时,会提示没有这个服务;
输入命令 dnf install php -y,安装 php 插件;
安装完成之后,输入命令 systemctl restart httpd,重启服务,此时再次访问发布文件时,会有如图所示的信息:
- cgi
输入命令 dnf install httpd-manual -y ,安装 apache 的文档;
安装完成之后,输入命令 systemctl restart httpd ,重启服务;在网页访问时可以访问 apache 的手册;在手册中可以找到 cgi 手册;查看其用法。
输入命令 mkdir /var/www/html/cgidir,新建发布目录;
输入命令 vim /var/www/html/cgidir/index.cgi,编辑发布文件内容;
此时在网页中访问之前输入 chmod +x index.cgi,给发布文件执行权限;在访问时效果如图所示,只会看到代码,而不是执行之后的结果;
不能发布需要编写文件
输入命令 vim /etc/httpd/conf.d/vhost.conf ,编辑主配置文件;内容为第 5 至 8 行,第 5 行为发布目录,第 6 行为执行 cgi 程序,第 7 行为参数触发器;
编写完成之后,输入命令 systemctl restart httpd ,重启服务,此时在网页中访问 http://192.168.122.200/cgi/index.cgi,会只显示执行之后的内容,Hello, World。
- wsgi
- 书写 wsgi 的测试文件
输入命令 vim /var/www/html/wsgi/index.wsgi,编辑发布文件;
输入命令 chmod +x index.wsgi,给发布文件执行的权限;
输入命令 vim /etc/httpd/conf.d/vhost.conf ,编辑主配置文件,书写内容如下所示:
<VirtualHost *:80>
ServerName wsgi.westos.org
WSGIScriptAlias / /var/www/html/wsgi/index.wsgi
在当前主机的系统中,默认是没有安装 wsgi 的插件,输入命令 dnf search wsgi,查找该软件;
输入命令 dnf install python3-mod_wsgi.x86_64 -y,安装插件;
输入命令 systemctl restart httpd,重启服务;
浏览器所在的主机中,编辑本地解析文件,内容如下所示:
192.168.122.200 linux.westos.org shell.westos.org python.westos.org www.westos.org wsgi.westos.org
此时访问网页即可看到如图所示的效果:
9. Apache 的加密访问 https://系统默认不支持
当我们在访问其他 ip 时,默认是明文的;如果企业中在进行数据传输时,也是明文的,那对企业来说是非常不安全的行为;此时,需要对数据进行加密传输。
1.安装加密时用到的 mod_ssl 插件
输入命令 dnf install mod_ssl -y,在安装完成之后,在 /etc/httpd/conf.d 目录中可以看到生成的加密文件 ssl.conf;
输入命令 systemctl restart httpd,重启服务;
输入命令 firewall-cmd --permanent --add-service=https,设置火墙策略,
输入命令 firewall-cmd --reload ,重新加载火墙策略;
输入命令 firewall-cmd --list-all,查看设置的火墙策略是否已经生效;当 https 出现时,说明火墙策略已经生效。
此时访问时便会提示没有锁;
按照提示点击 Advanced 之后, 再点击 Accept the Risk and Continue下载锁,完成之后便可看到网址前面有锁子的标志;
但是该锁的生成是系统给的,安全性很差;
此时要加载自己的锁,就需要将之前生成的锁删除;在浏览器右上角选择 Preference- ->Privacy&Securit- ->View Certificat- ->Server,选中自己点击 delete,刷新浏览界面,又回到警告界面;
- 生成 key
输入命令 mkdir -p /etc/httpd/webkey/ ,建立 key 目录;
输入命令 openssl genrsa -out /etc/httpd/webkey/www.westos.org.key 2048 ,生成 key;
输入命令 ls /etc/httpd/webkey/www.westos.org.key
/etc/httpd/webkey/www.westos.org.key,查看 key;
输入命令 penssl req -new -key /etc/httpd/webkey/www.westos.org.key -out /etc/httpd/webkey/www.westos.org.csr ,生成签证请求证书;
其中 :
Country Name (2 letter code) [XX]:CN ##表示选择国家
State or Province Name (full name) []:shannxi ##表示选择省
Locality Name (eg, city) [Default City]:xi’an ##表示选择市
Organization Name (eg, company) [Default Company Ltd]:westos ##表示设置公司
Organizational Unit Name (eg, section) []:www.westos.org ##表示设置部门
Common Name (eg, your name or your server’s hostname) []:www.westos.org ##表示设置域名
Email Address []: ##表示设置邮箱
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ##表示设置密码
An optional company name []: ##此处不再添加,直接回车,即可设置完毕。
- 对密码设置进行授权
此处模仿 CA 机构进行授权,只是为了达到实验的效果,现实中的授权机构是需要收钱的;
输入命令 openssl x509 -req -days 365 -in /etc/httpd/webkey/www.westos.org.csr -signkey /etc/httpd/webkey/www.westos.org.key -out /etc/httpd/webkey/www.westos.org.crt 来对其授权;
- 指定主机
输入命令 mkdir /var/www/westos.org/login -p,建立发布目录;
输入命令 echo login.westos.org > /var/www/westos.org/login/index.html,导入发布内容;
输入命令 vim /etc/httpd/conf.d/vhost.conf ,编辑主配置文件内容如下所示,第36 行表示开启 SSL ,第 37 行表三加密证书,第 38 行表示加密公钥;
编辑完成之后,输入命令 systemctl restart httpd,重启服务;
浏览器主机中编辑本地解析文件,内容如下所示:
192.168.122.200 linux.westos.org shell.westos.org python.westos.org www.westos.org wsgi.westos.org login.westos.org ##添加要发布的文件 login.westos.org ;
此时在访问 http://login.westos.org 时,会自动生成锁;
但是直接访问 login.westos.org 不用密码,也可以访问,是因为端口设置的问题;通过以下设置自动转到 443 端口;
输入命令 vim /etc/httpd/conf/httpd.conf,编辑配置文件内容如下所示:
输入命令 systemctl restart httpd,重启服务;
此时在访问 login.westos.org 会自动跳转至 http://login.westos.org 加密访问。
此时再查看锁信息时,便可以看到自己生成的 key 和认证机构的认证信息。