apache:企业常用的web服务。用来提供http://(超文本传输协议)
Apache HTTP Server(简称Apache),是一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
一、apache部署安装
[root@dns ~]# yum install httpd -y ##安装apache软件
[root@dns ~]# yum install httpd-manual -y ##安装apache手册
[root@dns ~]# systemctl start httpd ##打开服务
[root@dns ~]# systemctl enable httpd
[root@dns ~]# firewall-cmd --permanent --add-service=http ###打开加强性火墙的http服务
[root@dns ~]# firewall-cmd --reload
[root@dns ~]# cd /var/www/html/ ###apache的根目录,默认发布文件位置
[root@dns html]# vim /var/www/html/index.html ###apache默认发布文件
##h1字体设置
测试:网页浏览 172.25.254.128 显示/var/www/html/index.html 内容
二、apache信息及更改
1. 更改默认发布文件
原文件: /var/www/html/index.html
默认发布文件是访问apache时没有指定文件名称时默认访问的文件
这个文件可以有多个,有访问顺序
[root@dns html]# vim /etc/httpd/conf/httpd.conf ##修改主配置文件
164 DirectoryIndex test.html index.html ##在164行添加test.html;默认先访问test.html,没有时再访问index.html
[root@dns html]# systemctl restart httpd.service
[root@dns html]# vim /www/html/test.html
测试:网页浏览 172.25.254.128 显示/var/www/html/test.html 内容
2.更改默认发布目录
原目录:/var/www/html/
[root@dns html]# vim /etc/httpd/conf/httpd.conf
[root@dns html]# mkdir -p /westos/html
[root@dns html]# ls -Zd /var/www/html/ ###查看与httpd服务匹配的文件安全上下文
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@dns html]# semanage fcontext -a -t httpd_sys_content_t '/westos(/.*)?' ##更改/westos及他下面所有文件的安全上下文
[root@dns html]# restorecon -FvvR /westos/ ###重新加载安全上下文
[root@dns html]# systemctl restart httpd.service
[root@dns html]# vim /westos/html/index.html
[root@dns html]# rm -fr test.html
测试:网页浏览 172.25.254.128 显示 /westos/html/index.html 内容
3.更改服务端口
默认端口为80
[root@dns html]# vim /etc/httpd/conf/httpd.conf
##将监听端口更改为8090
[root@dns html]# systemctl restart httpd.service
[root@dns html]# firewall-cmd --permanent --add-port=8090/tcp ###打开加强性火墙的8090端口
[root@dns html]# firewall-cmd --reload
[root@dns html]# netstat -antlupe | grep httpd ##查询httpd监听端口
测试:网页浏览 172.25.254.128:8090
四、apache的虚拟主机(一个IP做多个服务器)
虚拟主机允许您从一个 httpd 服务器同时为多个网站提供服务。在本节中 , 我们将了解基于名称的虚拟主机其中多个主机名都指向同一个 IP 地址 , 但是 Web 服务器根据用于到达站点的主机名提供具有不同内容的不同网站。
1)恢复
[root@dns html]# vim /etc/httpd/conf/httpd.conf
[root@dns html]# systemctl restart httpd.service
2)主站点及默认站点
[root@dns html]# vim /etc/httpd/conf.d/adefault.conf ##配置默认文件
[root@dns html]# vim /westos/html/index.html
[root@dns html]# systemctl restart httpd.service
3)指定的子站点
[root@dns html]# mkdir -p /var/www/virtual//music##建立虚拟机主机默认发布的目录
[root@dns html]# mkdir -p /var/www/virtual//news
[root@dns html]# vim /var/www/virtual//music/index.html ##建立虚拟机主机默认发布的文件
vim /var/www/virtual//news/index.html
[root@dns conf.d]# vim /etc/httpd/conf.d/news.conf
[root@dns conf.d]# cp music.conf news.conf
[root@dns conf.d]# vim news.conf
[root@dns html]# systemctl restart httpd.service
检测:在浏览器主机上做本地解析
[root@foundation68 ~] #vim /etc/hosts ##在访问主机进行域名解析
四、访问控制
Apache 无格式文件用户身份验证,在此配置中 , 用户账户和密码存储在本地 .htpasswd 文件中。 处于安全原因 , 该文件不能保存在网站的 DocumentRoot 中 ,而应保存在 Web 服务器不提供服务的一些目录中。
[root@dns html]# mkdir /var/www/html/westos
[root@dns html]# vim /var/www/html/westos/index.html
1. 设置允许、禁止名单
[root@dns conf.d]# vim /etc/httpd/conf/httpd.conf ##修改主配置文件时要将之前添加进去的所有内容都删除,再将注释的内容还原
###允许除68外的所有
注:Order Allow,deny ##顺序,先读谁;后读的会覆盖先读的
[root@dns conf.d]# systemctl restart httpd.service
测试:真机68网页浏览:172.25.254.128/westos :用虚拟机网页浏览:http://172.25.254.128/westos :
[root@dns conf.d]# vim /etc/httpd/conf/httpd.conf
###禁止除68外的所有
[root@dns conf.d]# systemctl restart httpd.service
测试:真机68网页浏览:172.25.254.128/westos :用虚拟机网页浏览:http://172.25.254.128/westos :
2.加密访问
[root@dns html]# mkdir /var/www/virtual//music/html/admin/
[root@dns admin]# vim /var/www/virtual//music/html/admin/index.html
[root@dns conf.d]# cd /etc/httpd/
[root@dns httpd]# htpasswd -cm /etc/httpd/userpass admin ##c创建;m指定文件;用户名
[root@dns httpd]# htpasswd -muserpass tom ##取消c,否则覆盖了admin用户
[root@dns httpd]# cat /etc/httpd/userpass ##查看apache的用户
admin:$apr1$Audn1L2O$rfbIN2fRXIs8t8G9is2W5.
tom:$apr1$zaJD2jc8$jJdijeiEeS4C9eAskUmv6/
[root@dns httpd]# vim /etc/httpd/conf/httpd.conf
注: AuthUserFile "/etc/httpd/userpass" ###认证文件
AuthName "Please input username and password" ##用户访问时提示语句
AuthType basic ##认证类型:基础认证
# Require vaild-user ##/etc/httpd/userpass文件的所有人都可访问
Require user admin ##只有admin用户可输入密码访问
[root@dns httpd]# systemctl restart httpd.service
检测:浏览器上 /admin
<shift> + <ctrl> + <delete>##登陆一次后,再访问时不提供;此操作可清楚缓存好的密码
五、apache支持语言
1.php ##语言
[root@dns httpd]# vim /var/www/html/index.php ####在默认发布目录下建立文件作为php测试页
[root@dns httpd]# yum install php -y
[root@dns httpd]# systemctl restart httpd.service
测试:浏览器上 http://172.25.254.128/index.php
2.cgi ##通用网关接口
通用网关接口 (CGI) 是网站上放置动态内容的最简单的方法。CGI 脚本可用于许多目的 , 但是谨慎控制使用哪个 CGI 脚本,以及允许谁添加和运行这些脚本十分重要。编写质量差的 CGI脚本可能为外部攻击者提供了破坏网站及其内容安全性的途径。
因此 , 在 Web 服务器级别和 SELinux 策略级别 , 都存在用于限制 CGI 脚本使用的设置.
[root@dns httpd]# mkdir /var/www/html/cgi
[root@dns conf.d]# semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?' ##更改安全上下文,与apache服务可匹配
[root@dns conf.d]# restorecon -RvvF /var/www/html/cgi/ ###刷新
[root@dns conf.d]# vim /var/www/html/cgi/index.cgi ##写cgi脚本
##显示时间
[root@dns httpd]# chmod +x /var/www/html/cgi/index.cgi ##给脚本执行权限
[root@dns conf.d]# vim /etc/httpd/conf.d/adefault.conf
注:
<Directory "/var/www/html/cgi"> ##指定目录
Options +ExecCGI ###目录中的所有cgi脚本都要执行
AddHandler cgi-script .cgi ###包含cgi-script字样及以.cgi结尾的都是cgi脚本
[root@dns conf.d]# systemctl restart httpd.service
测试:浏览器上 172.25.254.128/cgi/index.cgi
六、https
本来浏览器直接 可访问;但https:// 不可访问;因为无法直接加载证书(无网络认可)
http传输是明文的;https传输方式是加密传输,客户端把数据传给服务端是带锁的。
1.制作apache访问证书
如果加密的通信非常重要 , 而经过验证的身份不重要 , 管理员可以通过生成 self-signed certificate 来避免与认证机构进行交互
所带来的复杂性。使用 genkey 实用程序 ( 通过 crypto-utils 软件包分发 ),生成自签名证书及其关联的私钥。为了简化起见 ,genkey 将在“正确”的位置 (/etc/pki/tls 目录 ) 创建证书及其关联的密钥。相应地 , 必须以授权用户 (root) 身份运行该实用程序。
1)下载mod-ssl协议
mod-ssl是一种以openss的工具箱为基础,专门为apache提供密码保护,ssl(安全套接层)和tls(传输套接层)安全的协议
[root@dns conf.d]# yum install mod_ssl -y
[root@dns conf.d]# firewall-cmd --permanent --add-service=https ###在加强性火墙上打开https服务
[root@dns conf.d]# firewall-cmd --reload ###重新加载
[root@dns conf.d]# netstat -antlupe | grep httpd ###443加密端口打开
tcp6 0 0 :::443 :::* LISTEN 0 136071 16345/httpd
tcp6 0 0 :::80 :::* LISTEN 0 136059 16345/httpd
2)下载crypto-utils
crypto-utils提供纯java的加密API,用来简化公私钥和证书储存、对称和非对称加密方法的封装
[root@dns conf.d]# yum install crypto-utils -y
3)生成自签名证书及关联密钥
[root@dns conf.d]# genkey
存放位置>选择密钥大小(1024)>等待(开发者)、去random取数据(敲击apache服务器)>给CA颁布证书(no,因收费)>是否给证书加密(不选)>填信息
4)[root@dns conf.d]# vim /etc/httpd/conf.d/ssl.conf ##查看安装证书及其私钥
101 SSLCertificateFile /etc/pki/tls/certs/.crt ###证书地址
108 SSLCertificateKeyFile /etc/pki/tls/private/.key ###钥匙地址
[root@dns conf.d]# systemctl restart httpd.service
5)浏览器中https:// I understand risks > 下载证书 > 完成
##可以看到看到网址前面有一个小锁
2.设定https虚拟主机并设定网页重写
1)[root@dns conf.d]# mkdir -p /var/www/virtual//login
2)[root@dns conf.d]# vim /var/www/virtual//login/index.html
login 's page
3)[root@dns conf.d]# vim /etc/httpd/conf.d/login.conf
注:
<VirtualHost *:80>##设置访问80端口时自动跳转到443端口访问页面
ServerName
RewriteEngine on##网页重启功能开启
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] 中:
^(/.*)$ ##客户主机在浏览器中输入的所有字符
https:// ##强制客户加密访问
%{HTTP_HOST} ##客户请求信息
$1 ##表示^(/.*)$的值
[redirect=301] ##临时重写,只转换
[redirect=301] ##永久重写,所有输入都转换到加密访问
[root@dns conf.d]# systemctl restart httpd.service
测试:浏览器上搜 可直接重启到
七、squid代理(翻墙)
squid可以做代理也可以做缓存。squid不仅可以做正向代理,又可以做反向代理。
正向代理,squid后面是客户端,客户端上网要通过Squid去上;反向代理,squid后面是服务器,服务器返回给用户数据需要走squid。
1.正向代理:客户已知代理主机,主动指定 ##此操作,主机68为代理,128为客户,服务端为某网站
[代理]
[root@foundation68 ~]# yum install squid.x86_64 -y
[root@foundation68 ~]# vim /etc/squid/squid.conf
注:http_access allow all ##代理接口3128允许所有人访问
http_port 3128
cache_dir ufs /var/spool/squid 100 16 256 ##代理取数据存放目录,此目录有16的一级目录,每个一级目录下有256个子目录
[root@foundation68 ~]# systemctl restart squid.service
[客户]
[root@dns mysqladmin]# ping ##网不通
[root@dns mysqladmin]# firefox & ##打开虚拟机浏览器
Edit----perferences---设置--网络---connecyion(建立)---manual---真机ip、端口---use---可进入网站
注意:此时虚拟机是不可以上网的,但它可把请求发给代理,代理将数据缓存到/var/spool/squid目录,虚拟机通过看代理主机的3128端口获取信息,进入网页
还原:
[root@foundation68 ~]# rpm -e squid
[root@foundation68 ~]# rm -fr /etc/squid/squid.conf.rpmsave
2.反向解析:企业服务端指定客户访问代理,客户并不知道
eg:腾讯的web机制------------------------------ 本次实验
总服务端有几台服务器(轮询)为缓解压力------- 128主机、112主机
代理,每个省份都有------------------------- desktop:228主机
客户访问腾讯实际到达代理的80端口----------- 68主机做客户访问
[总服务端]:有apache服务
[代理]:无apache服务,有80端口
[root@mm ~]# yum install squid.x86_64 -y ##安装服务
帮助手册: /usr/share/doc/squid-3.3.8/squid.conf.documented
[root@mm ~]# vim /etc/squid/squid.conf
56 http_access allow all
59 http_port 80 vhost vport ##80 虚拟域 虚拟端口
60 cache_peer 172.25.254.128 parent 80 0 proxy-only round-robin weight=2 name=web1
##缓存 代理主机 父级(服务) 端口 当代理挂了不通知 代理 调用 权重 代替此行所有
61 cache_peer 172.25.254.112 parent 80 3130 proxy-only round-robin name=web2 ##0 不通知;3130通知其他,要挂了
62 cache_peer_domain web1 web2 ##访问时,轮叫web1、web2
64 cache_dir ufs /var/spool/squid 100 16 256
[root@mm ~]# systemctl restart squid
[root@mm ~]# systemctl stop firewalld.service
[客户]:有apache服务
[root@foundation68 ~]# vim /etc/hosts
172.25.254.228
浏览器: 轮询:权重决定了访问两次128主机,一次112主机