企业中的Apache服务(web服务器)

1 Apache(web服务器)简介

1.1 什么是Apache?
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。可以说,Web是建立在HTTP协议上通信的。
1.2 Apache服务的基本信息
默认发布目录:/var/www/html/
默认发布文件:/var/www/html/index.html (使用html语言)
主配置文件所在: /etc/httpd/conf —> httpd.conf
子配置目录:/etc/httpd/conf.d
子配置文件:/etc/httpd/conf.d/*.conf
默认监听端口:80
默认安全上下文:httpd_sys_content_t
程序开启默认用户:acaphe
apache日志:/etc/httpd/logs/ *
在这里插入图片描述

1.3 Apache的安装部署

为保证接下来安装部署的正确性,先将准备当作服务端的虚拟机重置
1.reset desktop
2.改主机名:hostnamectl set-hostname acaphe-server.westos.com
3.改ip地址 重启网络
4.打开selinux,selinux对服务会有影响,具体会介绍怎么处理影响

服务器的下载:
yum install httpd httpd-manual(手册) -y 
systemctl start httpd
systemctl enable httpd
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

在这里插入图片描述
在这里插入图片描述
1.4 Apache服务的测试

cd /var/www/html
vim index.html
<font color=red>test's page

浏览器中访问:
http://172.25.254.172            不加具体访问文件,为访问默认发布文件
http://172.25.254.172/manual     指定访问文件manual

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 Apache的配置修改

2.1 端口号的修改

ss -anutlpe | grep httpd
vim /etc/httpd/conf/httpd.conf
Listen 8080        在主配置文件的第42行,修改为8080端口
systemctl restart httpd
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

以上是当selinux为enforcing时,设置端口号为selinux允许的端口号,没有问题,直接重启即可
当设置端口号为其不包含的端口时,需要以下设置:
semanage port -l | grep http   查看允许使用的端口号
           	
第一步:setenforce 0     #在selinux为permissive的情况下
       semanage port -l | grep http
       semanage port -a -t http_port_t -p tcp 6666
第二步:setenforce 1
       systemctl restart httpd
第三步:firewall-cmd --permanent --add-port=6666/tcp
       firewall-cmd --reload

测试:http://172.25.254.172:6666

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当设置为不允许的端口号时:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2 默认发布文件的修改

默认发布文件就是访问acaphe时没有指定文件名称时默认访问的文件
这个文件可以指定多个,有访问顺序,谁在前先访问谁,当前面的文件不存在时,才会访问下一个

vim /etc/httpd/conf/httpd.conf
164行 DirectoryIndex test.html index.html
systemctl restart httpd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.3 修改默认发布目录

mkdir /demo/html -p

情况一:在selinux关闭的情况下:
vim /etc/httpd/conf/httpd.conf
119行  DocumentRoot "/demo/html"
在企业7需要对改修改的目录授权,企业6不需要
	<Directory "/demo/html">
      		Require all granted
	</Directory>
	systemctl restart httpd
将修改的默认发布目录下面建立的文件不是index.html,则添加到164行

情况二:在selinux开启的状态下:
查看安全上下文:ls -Zd /var/www/
ls -Zd /demo/html/    
修改上下文:semanage fcontext -a -t httpd_sys_content_t  '/demo/html(/.*)?'
restorecon -RvvF /demo/html

这样,就可以访问了

情况一:在selinux关闭的情况下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
情况二:在selinux开启的状态下:
在这里插入图片描述
2.4 acaphe虚拟主机的访问
希望不同站点访问不同的目录与文件,假如我有www.westos.comnews.westos.com music.westos.com 三个站点,则三个站点希望分别访问不同的页面
则配置如下:

第一步:mkdir -p /var/www/vhost/news
       vim /var/www/vhost/news/index.html
       mkdir -p /var/www/vhost/music
       vim /var/www/vhost/music/index.html


第二步:在要访问这三个站点的浏览器的本地解析文件写上解析   
vim /etc/hosts
172.25.254.172 www.westos.com news.westos.com music.westos.com

第三步:cd /etc/httpd/conf.d       子配置文件目录
vim vhost.conf   (名字可以任意)
<VirtualHost _default_:80>
	DocumentRoot /var/www/html
	CustomLog logs/default.log  combined  (表示所有类型的日志都放在该日志文件下)
</VirtualHost>

<VirtualHost   *:80>
   	ServerName news.westos.com
	DocumentRoot /var/www/vhost/news
	CustomLog logs/news.log  combined 
</VirtualHost>
<Directory "/var/www/vhost/news">
	Require all granted
</Directory>

<VirtualHost *:80>
	ServerName music.westos.com
	DocumentRoot /var/www/vhost/music
	CustomLog logs/music.log  combined 
</VirtualHost>
<Directory "/var/www/vhost/music">
	Require all granted
</Directory>

最后:
systemctl restart httpd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2.5 acaphe访问控制
2.5.1 基于ip的访问控制

cd /etc/httpd/conf.d
vim vhost.conf          #写入对目录的控制,也可以在主配置文件中写入
黑名单:
<Directory "/var/www/html">
	Order Allow,Deny     #控制读取顺序,先读allow,再读deny
	Allow from All
	Deny from 172.25.254.72
</Directory>

白名单:
<Directory "/var/www/html">
	Order Deny,Allow   控制读取顺序,先读deny,再读allow
	Allow from 172.25.254.72
	Deny from All
</Directory>

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.5.2 基于用户的访问控制

cd /etc/httpd
建立用户认证文件:htpasswd -cm .apache_auth admin   -m表示hd5加密,-c表示创建
输入密码 完成建立
当建立第二个文件htpasswd -m .apache_auth lee   若加入参数-c则会把之前的内容覆盖掉

cd /etc/httpd/conf.d
vim vhost.conf

<Directory "/var/www/html">
	AuthUserFile /etc/httpd/.apache_auth
	AuthType basic   (最基本的认证方式,用户名和密码)
	AuthName "Please input username and password"
	Require user admin   只允许admin访问
</Directory>


<Directory "/var/www/html">
	AuthUserFile /etc/httpd/.apache_auth
	AuthType basic   (最基本的认证方式,用户名和密码)
	AuthName "Please input username and password"
	#Require user admin   只允许admin访问
	Require valid-user  允许所有人访问
</Directory>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2.6 acaphe支持的四种语言

将上一步的用户访问控制注释掉,
httpd支持的四种语言:
第一:html,以上设置中默认发布文件中使用的语言都是html,所以不再说明
第二:php
    cd /var/www/html
    vim index.php
    <?php
	phpinfo();
	?>
将index.php写到主配置文件的发布目录当中
     yum install php -y
     systemctl restart httpd  会自动加载php到httpd中
在/var/httpd/conf.d 中会生成php.conf文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三:perl
cgi是将网页的内容加载到数据库的插件,里面的语言就是用perl语言写的
   cd /var/www/html
   mkdir cgi
   cd cgi/
   vim index.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print 'date';
chmod +x index.cgi
命令行中输入: ./index.cgi  可以看到执行的结果
在浏览器中输入172.25.254.133/cgi/index.cgi可以看到裸露的代码。。因为Httpd只负责展示,并没有告诉它要执行

1.当selinux=permassive,
vim /etc/httpd/conf.d/vhost.conf
<Directory "/var/www/html/cgi">
	Options +ExecCGI
	AddHandler cgi-script .cgi
</Directory>
测试:172.25.254.135/cgi/   可以执行

2.当selinux=enforcing,
以上是在防火墙为permassive的情况下可以执行
当防火墙改为enforcing时,
semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'
restorecon -RvvF /var/www/html/cgi/index.cgi

测试:172.25.254.135/cgi/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第四:python
PythonWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口

第一步:cd /var/www/cgi-bin
	vim webapp.wsgi
	#!/usr/bin/env python
	import time

def application (environ, start_response):
  response_body = 'UNIX EPOCH time is now: %s\n' % time.time()
  status = '200 OK'
  response_headers = [('Content-Type', 'text/plain'),
                      ('Content-Length', '1'),
                      ('Content-Length', str(len(response_body)))]
  start_response(status, response_headers)
  return [response_body]


第二步:yum install mod_wsgi.x86_64
	systemctl restart httpd

第三步:vim /etc/httpd/conf.d/vhost.conf
	<VirtualHost *:80>
		ServerName wsgi.westos.com
       		WSGIScriptAlias / /var/www/cgi-bin/webapp.wsgi
	</VirtualHost>

	systemctl restart httpd
第四步:最后,本地解析文件/etc/hosts中写上wsgi.westos.com 的对应解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 HTTPS

在HTTP协议中可能存在信息窃听或身份伪装等安全问题。使用HTTPS通信机制可以有效地防止这些问题
3.1 HTTP的缺点

  • )通信使用明文(不加密),内容可能会被窃听
  • )不验证通信方的身份,因此有可能遭遇伪装
  • )无法证明报文的完整性,所以有可能已遭篡改

3.2 HTTPS=HTTP+加密+认证+完整性保护

为了解决上述问题,需要在HTTP上再加入加密处理和认证等机制。我们把添加了加密及认证机制的HTTP称为HTTPS(HTTP secure).使用HTTPS通信时,不再用http://,而是改用https://。另外,当浏览器访问Https通信有效的web网站时,浏览其的地址栏内会出现一个带锁的标记。
HTTPS并非是一种信协议。只是HTTP通用接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
通常,HTTP直接和TCP通信。当使用SSL时,则变为先和SSL通信,再由SSL和TCP通信了。简单来说,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
3.3 https方式访问服务器全过程描述:

1.客户机通过https访问web服务器,web服务器向客户机出示自己的证书
2. 客户机验证证书的有效性,包括发证时间,发证机关,执行者标识。
3.如果客户机验证证书通过,客户机随机产生128位的key,再利用证书文件传递的public key对该随即key机进行加密。
4.加密后传送至服务器端,服务器再利用自己的public key 对加密的key进行解密,得到客户机的随机key值。
5.这时两端的key值相同,利用该key进行加密通讯。
3.4 https方式访问服务器的实现:

yum install mod_ssl -y
在conf.d中会生成ssl.conf
systemctl restart httpd
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
客户端访问https://172.25.254.172 添加认证和钥匙 是别的公司的
选择perferences--> certificates  清空证书

现在我们自己生成公开密钥证书
yum install crypto-utils.x86_64
genkey acaphe-server.westos.com

vim /etc/httpd/conf.d/ssl.conf
101行与108行,将密钥和证书都改成自己生成的
systemctl restart httpd

客户端访问https://172.25.254.172 添加认证和密匙 是自己生成的
可以查看证书的具体信息

使用别的公司的认证访问:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自己生成公开密钥证书
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述3.5 https虚拟主机的设定与网页重写:
3.5.1 https虚拟主机的设定:

第一步:vim /etc/httpd/conf.d/vhost_https.conf
<VirtualHost *:443>
	ServerName login.westos.com
	DocumentRoot /var/www/vhost/login
	CustomLog logs/login.log combined
	SSLEngine on
	SSLCertificateFile /etc/pki/tls/certs/acaphe.westos.com.crt
    SSLCertificateKeyFile  /etc/pki/tls/private/acaphe.westos.com.key
</VirtualHost>
<Directory "/var/www/vhost/login">
 	Require all granted
</Directory>     

systemctl restart httpd

第二步:mkdir -p /var/www/vhost/login
    vim /var/www/vhost/login/index.html

第三步:vim /etc/hosts
    172.25.254.172 login.westos.com

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.5.2 https的网页重写:
现在,我们在浏览器上输入http://login.westos.com,默认访问80端口,http方式访问默认发布目录/var/www/html下的默认文件index.html,输入https://login.westos.com会根据我们上面一步的设定访问/var/www/vhost/login目录下的/var/www/vhost/login/index.html文件,而我们想要当我们输入http://访问时自动转到https://加密访问,这就是https网页重写。

在 /etc/httpd/conf.d/vhost_https.conf配置文件中加入跳转语句
vim /etc/httpd/conf.d/vhost_https.conf
<VirtualHost *:443>
	ServerName login.westos.com
	DocumentRoot /var/www/vhost/login
	CustomLog logs/login.log combined
	SSLEngine on
	SSLCertificateFile /etc/pki/tls/certs/acaphe.westos.com.crt
    SSLCertificateKeyFile /etc/pki/tls/private/acaphe.westos.com.key
</VirtualHost>
<Directory "/var/www/vhost/login">
 	Require all granted
</Directory>     

<VirtualHost *:80>
      ServerName login.westos.com
      RewriteEngine on
      RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]      
</VirtualHost>

systemctl restart httpd

<font color=blue [redirect=301] >注: ^(/.*)$表示客户端在浏览器中输入的所有字符
https:// 表示强制客户加密访问
%{HTTP_HOST}表示客户请求主机
$1,$1标示^(/. *) $的值
[redirect=301] 永久重写,302临时
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是HTTPSS虽然安全可靠,但所有的web网站不会一直使用HTTPS。其中一个原因是,与纯文本通信相比,加密通信会消耗更多的cpu及内存资源。如果每次通信都加密,会消耗很多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。
除此之外,想要节约购买证书的开销也是原因之一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值