Linux运维--Apache详解

一、Apache服务的安装与启用

1 Apache

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

企业中常用的web服务,用来提供http://(超文本传输协议)

可以使用以下命令嗅探网站的服务器:

 curl -I www.qq.com			

Linux运维--Apache详解_第1张图片
可以发现互联网主流架构有:apache、nginx

2 Nginx与Apache的区别

  • nginx相对于apache的优点:

(1) 轻量级,同样起web 服务,比apache占用更少的内存及资源
(2) 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
(3) 高度模块化的设计,编写模块相对简单
(4) 社区活跃,各种高性能模块出品迅速啊

  • apache 相对于nginx 的优点:

(1) rewrite 比nginx 的rewrite 强大
(2) 动态页面
(3) 模块超多,基本想到的都可以找到
(4) 少bug ,nginx 的bug 相对较多
(5) 超稳定

3 Apache的安装与启用

安装:

 yum install httpd.x86_64 -y	#软件
 yum install httpd-manual		#Apache手册

启用:

 systemctl start httpd
 systemctl enable httpd.service 
 firewall-cmd --list-all			#列出火墙信息
 firewall-cmd --permanent --add-service=http	#永久允许http
 firewall-cmd --reload 			#火墙重新加载策略

在浏览器地址栏输入ip测试 Apache 是否安装好:
Linux运维--Apache详解_第2张图片
出现上述界面表示Apache以安装好

4 apache的基础信息

信息 详情
主配置目录 /etc/httpd/conf
主配置文件 /etc/httpd/conf/httpd.conf
子配置目录 /etc/httpd/conf.d
子配置文件 /etc/httpd/conf.d/*.conf
默认发布目录 /var/www/html
默认发布文件 /var/www/html/index.html
默认端口 80
默认安全上下文 httpd_sys_content_t
程序开启默认用户 apache
apache日志 /etc/httpd/logs/*

二、Apache的基本配置信息及部署优化方案

1 修改默认端口

修改配置文件:

 vim /etc/httpd/conf/httpd.conf 
   43 Listen 80		#默认为80

在这里插入图片描述

 firewall-cmd --permanent --add-port=8080/tcp			#在火墙里添加8080端口
 firewall-cmd --reload 
 systemctl restart httpd.service

端口设置成功后,在浏览器访问时需要在ip地址后添加:8080
Linux运维--Apache详解_第3张图片
当更改的端口不在默认列表时

查看默认列表: semanage port -l | grep http在这里插入图片描述

 vim /etc/httpd/conf/httpd.conf
     43 Listen 6666		#修改端口为6666
 firewall-cmd --permanent --add-port=6666/tcp
 firewall-cmd --reload 
 systemctl restart httpd.service 
 semanage port -a -t http_port_t -p tcp 6666		#将6666端口添加到默认列表中
 systemctl restart httpd.service

Linux运维--Apache详解_第4张图片
测试,在浏览器地址栏输入:http://172.25.254.216:6666/

2 修改默认发布目录

修改配置文件:

 vim /etc/httpd/conf/httpd.conf
填入:
	121 DocumentRoot "/westos/html"
	124 
	125 <Directory "/westos">
	126     Require all granted			#目录授权
	127 </Directory>

Linux运维--Apache详解_第5张图片

 semanage fcontext -a -t httpd_sys_content_t '/haha(/.*)?'		#更改目录上下文
 restorecon -RvvF /haha/		#刷新
 systemctl restart httpd.service

Linux运维--Apache详解_第6张图片
测试发现更改目录成功:
在这里插入图片描述
3 修改默认发布文件

默认发布文件就是访问apache时没有指定文件名称时默认访问的文件,这个文件可以指定多个,有访问的顺序

 vim /etc/httpd/conf/httpd.conf
 更改:
 	<IfModule dir_module>
 	DirectoryIndex index.html test.html		##当index.html不存在时访问test.html
 	</IfModule>

在这里插入图片描述

 systemctl restart httpd.service		

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

三、Apache的虚拟主机

作用:使用一个服务器发布多个站点

1 配置虚拟主机

在子配置目录下建立配置文件:

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

写入:

 <VirtualHost _default_:80>			#默认接口
         DocumentRoot /var/www/html		#默认发布目录
         CustomLog logs/default.log combined	#所有日志记录在logs/default.log中
 </VirtualHost>

 <VirtualHost *:80>
         ServerName music.haha.org		#服务器名
         DocumentRoot /var/www/virtual/haha.org/music			#发布目录
         CustomLog logs/music.log combined
 </VirtualHost>

 <VirtualHost *:80>
         ServerName news.haha.org
         DocumentRoot /var/www/virtual/haha.org/news
         CustomLog logs/news.log combined
 </VirtualHost>

建立发布目录与测试发布文件:Linux运维--Apache详解_第7张图片
在测试主机作地址解析:

 vim /etc/hosts
	172.25.254.216 www.haha.org news.haha.org music.haha.org 

测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、Apache基于ip的安全优化控制

1 白名单设定

在子配置文件中写入:

 vim /etc/httpd/conf.d/vhost.conf
 <Directory "/var/www/html">
         Order deny,allow
         Allow from 172.25.254.63			#只允许这个ip访问
         Deny from all
 </Directory>

在这里插入图片描述
测试:
在ip为172.25.254.216主机测试:
Linux运维--Apache详解_第8张图片
在ip为172.25.254.63主机测试:
在这里插入图片描述
2 黑名单设定

在子配置文件中写入:

 vim /etc/httpd/conf.d/vhost.conf
 <Directory "/var/www/html">
         Order allow,deny
         Allow from all
         Deny from 172.25.254.63		#只不允许172.25.254.63访问
 </Directory>

在这里插入图片描述
测试:
在ip为172.25.254.216主机测试:
Linux运维--Apache详解_第9张图片
在ip为172.25.254.63主机测试:
Linux运维--Apache详解_第10张图片

五、Apache基于认证的访问控制

1 建立认证文件

  cd /etc/httpd/
  htpasswd -cm .htpassfile admin			#建立密码文件并隐藏,用户名为admin

Linux运维--Apache详解_第11张图片当再建立一个新用户时:

 htpasswd -m .htpassfile admin1			#要把参数的c去掉,否则密码会覆盖原来的用户
 cat .htpassfile 

Linux运维--Apache详解_第12张图片
2 完成认证

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

3 若只需要一个用户输入密码

也可以认为只允许这一个用户访问
在配置文件中写入:

 <Directory "/var/www/html">
        	 AuthUserFile /etc/httpd/.htpassfile
        	 Authtype basic
        	 AuthName "please input username and password"
	         Require user    admin
 </Directory>

重启服务后测试:
访问172.25.254.216时:
Linux运维--Apache详解_第13张图片

4 若需要所有用户输入密码

在配置文件中写入:

 <Directory "/var/www/html">
        	 AuthUserFile /etc/httpd/.htpassfile
        	 Authtype basic
        	 AuthName "please input username and password"
        	 Require         valid-user
 </Directory>

Linux运维--Apache详解_第14张图片
此时所有用户登陆时均需要认证

六、Apache对于编程语言的支持

Apache支持的语言有perlphppython
1 对php的支持

安装php:

 yum install php -y

之后重启Apache服务即可加载php插件

测试:
在发布目录中创建.php文件并访问:
在这里插入图片描述
Linux运维--Apache详解_第15张图片2 对perl语言的支持

建立发布目录并对发布目录安全上下文进行更改:

 mkdir /var/www/html/cgi
 semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/html/cgi(/.*)?"
 restorecon -RvvF /var/www/html/cgi

编辑perl语言脚本:

 vim /var/www/html/cgi/index.cgi
 写入:
 #!/usr/bin/perl
 print "Content-type: text/html\n\n";
 print `date`;

给脚本增加可执行权限:

 chmod +x index.cgi

在apache子配置文件中写入:

 <Directory "/var/www/html">
         Options +ExecCGI			#cgi脚本执行
         AddHandler cgi-script .cgi	#cgi-script或.cgi的文件将被认为时cgi脚本
 </Directory>

测试,在浏览器访问.cgi文件:
在这里插入图片描述

3 对python的支持

安装wsgi:

 yum install mod_wsgi.x86_64 -y

编辑脚本文件:

 vim script.wsgi
 写入:
 #!/usr/bin/env python
 def application(env,satrt_response):
     start_response('200 OK',[('Content-Type','text/html')])
     return ["Hello,Python!".encode('utf-8')]

给脚本增加可执行权限:

 chmod +x script.wsgi

在apache子配置文件中写入:

 vim /etc/httpd/conf.d/vhost.conf 
写入:
 <VirtualHost _default_:80>
         DocumentRoot /var/www/html
         CustomLog logs/default.log combined
         WSGIScriptAlias /WSGI /var/www/html/script.wsgi			#当访问默认的/WSGI时就访问/var/www/html/index.wsgi文件
 </VirtualHost>

之后重启服务后测试发现可以运行脚本

七、https的证书设定

1 https

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。

2 安装https插件

 yum install mod_ssl.x86_64 -y

3 打开服务端口

该服务使用的端口为443,需要将该端口添加到火墙中:

 firewall-cmd --permanent --add-port=443/tcp
 firewall-cmd --reload

在这里插入图片描述
当在浏览器访问https://172.25.254.216/服务器时需要添加证书:
Linux运维--Apache详解_第16张图片
Linux运维--Apache详解_第17张图片
确认证书后,即可成功访问:
在这里插入图片描述
查看证书信息:
Linux运维--Apache详解_第18张图片
4 制作证书

安装证书软件:

 yum install crypto-utils.x86_64 -y

制作证书:

 genkey www.westos.org			#为www.westos.org制作证书

Linux运维--Apache详解_第19张图片
Linux运维--Apache详解_第20张图片
开始加密:
Linux运维--Apache详解_第21张图片
之后开始采集加密信息(此时可以移动鼠标和键盘加速采集):
Linux运维--Apache详解_第22张图片
选择不发送给CA机构:
Linux运维--Apache详解_第23张图片
Linux运维--Apache详解_第24张图片
Linux运维--Apache详解_第25张图片

选择next即完成制作

5 编辑配置文件

 vim /etc/httpd/conf.d/ssl.conf

作以下更改:
Linux运维--Apache详解_第26张图片
之后重启httpd服务,在浏览器访问https://172.25.254.216/下载证书后,查看证书信息:
Linux运维--Apache详解_第27张图片
证书制作成功

八、利用网页重写规则优化https的访问

1 编辑配置文件

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

写入:

 
         ServerName login.westos.org
         DocumentRoot /var/www/virtual/westos.org/html
         CustomLog "logs/login.logs" combined
         SSLEngine on
         SSLCertificateFile /etc/pki/tls/certs/www.westos.org.crt
         SSLCertificateKeyFile /etc/pki/tls/private/www.westos.org.key
 
 
         Require all granted
 

 
         ServerName login.westos.org
         RewriteEngine On
         RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1
 

其中含义:
Linux运维--Apache详解_第28张图片
此外,还可以在重写规则后加[redirect=301]表示永久重写,[redirect=302]表示临时

2 建立发布文件及目录

 mkdir /var/www/virtual/westos.org/html
 touch /var/www/virtual/westos.org/html/index.html

在这里插入图片描述
3 测试

在客户端主机作地址解析:

 vim /etc/hosts
写入:
172.25.254.216 login.westos.org

在这里插入图片描述
作完解析后在浏览器地址栏输入login.westos.org
Linux运维--Apache详解_第29张图片
安装证书后访问发现可以成功访问测试页:
在这里插入图片描述

九、cdn加速机制、原理及squid正向代理

CDN加速机制

1 CDN

CDN的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。 从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。

2 CDN工作原理

CDN访问过程:
Linux运维--Apache详解_第30张图片
使用了CDN缓存后的网站的访问过程变为:

1.用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
2.LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
3.ROOT DNS将域名授权dns记录回应给 LocalDns
4.LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
5.域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns
6.LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址
7.智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns
8.LocalDns 将得到的域名ip地址,回应给 用户端
9.用户得到域名ip地址后,访问站点服务器
10.CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)

原理

你使用连接到国外的一台服务器A上,你电脑的所有请求都会发送到这台服务器A,这台服务器A再把你的请求转发到国外被墙的网站,响应内容先返回A,再由A返回给你。中间多了这么一层,只要服务器A没有被墙,你就可以访问国外被墙的网站了。

squid正向代理

1 正向代理

所谓正向代理就是顺着请求的方向进行的代理,即代理服务器他是由你配置为你服务,去请求目标服务器地址。

比如我们要去访问谷歌网站,我们直接访问不通,那么我们就可以找一个代理服务器为我们服务,我们通过代理服务器请求到谷歌网站。对于谷歌而言他只知道有一个服务器访问了自己,并不知道这件事你是访问不了他,找了一个代理服务器访问自己。

在举一个通俗的例子。你需要钱,C正好有钱,但是你C不直接借给你。你和B关系比较好,B可以找C借到钱。你和B沟通后,由B来找C借到钱后在给你。
Linux运维--Apache详解_第31张图片

2 反向代理

所谓反向代理正好与正向代理相反,代理服务器是为目标服务器服务的,虽然整体的请求返回路线都是一样的都是Client到Proxy到Server。

比如 我们访问百度网站,百度的代理服务器对外的域名为 https://www.baidu.com 。具体内部的服务器节点我们不知道。现实中我们通过访问百度的代理服务器后,代理服务器给我们转发请求到他们N多的服务器节点中的一个给我们进行搜索后将结果返回。

再举例:我们同样需要钱,但是我们又不知道谁有钱,所以我们找了一家网贷平台,你提交资料后,网贷平台直接将钱打给你。但是你不知道,也不用关注网贷平台的钱从哪里来。网贷平台内部他们可能从哪一个财主哪里融的钱。对你而言网贷平台和他们的金主是一起的。

Linux运维--Apache详解_第32张图片

squid正向代理

实验准备:两台主机,一台可以上网(Server),一台不能上网(Deskotp)

1 在可以上网的主机安装squid

 yum install squid.x86_64 -y

2 更改squid配置文件

 vim /etc/squid/squid.conf

作出以下更改:

  55 # And finally deny all other access to this proxy
  56 http_access allow all				#将deny改为allow
  57 
  58 # Squid normally listens to port 3128
  59 http_port 3128
  60 
  61 # Uncomment and adjust the following to add a disk cache directory.
  62 cache_dir ufs /var/spool/squid 100 16 256			#去掉注释
  63 

Linux运维--Apache详解_第33张图片
3 在火墙中打开端口

在squid配置文件第59行可以看出squid使用的端口为3128,故需要在火墙中打开此端口:

 firewall-cmd --permanent --add-port=3128/tcp
 firewall-cmd --reload

在这里插入图片描述
4 在不能上网的主机设置代理

在浏览器中:选择 Edit ---> Preferences
Linux运维--Apache详解_第34张图片
Linux运维--Apache详解_第35张图片
4 测试

在不能上网的主机中测试是否可以上网:
Linux运维--Apache详解_第36张图片
可以成功上网,说明正向代理设置成功

十、squid反向代理加速

实验准备:两台主机Server(ip:172.25.254.216)Desktop(ip:172.25.254.116),一台测试主机
1 server主机端

安装httpd并关闭火墙:

 yum install httpd -y
 systemctl start httpd
 systemctl enable httpd
 systemctl stop firewalld.service 

并且编辑测试页:

 vim /var/www/html/index.html
	写入:
	 <h1>172.25.254.216</h1>

2 Desktop主机端

安装squid:

 yum install squid -y
 systemctl start squid
 systemctl stop firewalld.service

修改squid配置文件:

 vim /etc/squid/squid.conf
	55 # And finally deny all other access to this proxy
 	56 http_access allow all			#deny改为allow
 	57 
 	58 # Squid normally listens to port 3128
 	59 http_port 80 vhost vport		#3128改为80
	60 cache_peer      172.25.254.216 parent 80        0       proxy-only	#
 	61 
 	62 # Uncomment and adjust the following to add a disk cache directory.
	63 cache_dir ufs /var/spool/squid 100 16 256		#缓存路径打开
 	64 
 	65 # Leave coredumps in the first cache dir
 	66 coredump_dir /var/spool/squid

Linux运维--Apache详解_第37张图片
之后重启squid服务

3 测试

在测试主机浏览器地址栏输入:172.25.254.116(即访问Desktop主机)
Linux运维--Apache详解_第38张图片
浏览器返回的是Server主机上的测试页,说明反向代理设置成功

十一、squid循环访问

实验环境:两台安装Apache的主机,一台安装squid的主机
在安装squid的主机中修改squid配置文件:

 vim /etc/squid/squid.conf
  58 # Squid normally listens to port 3128
  59 http_port 80 vhost vport
  60 cache_peer      172.25.254.216 parent 80        0       proxy-only  round-robin originserver name=web1
  61 cache_peer      172.25.254.217 parent 80        0       proxy-only  round-robin originserver name=web2
  62 cache_peer_domain www.westos.org        web1 web2
  63 # Uncomment and adjust the following to add a disk cache directory.

systemctl restart squid.service

Linux运维--Apache详解_第39张图片
即可实现两台Apache主机循环访问,若要增加权重(web1出现3次,web2出现一次):

 vim /etc/squid/squid.conf
  58 # Squid normally listens to port 3128
  59 http_port 80 vhost vport
  60 cache_peer      172.25.254.216 parent 80        0       proxy-only  round-robin originserver name=web1 weight=3		#web1出现3次,web2出现一次
  61 cache_peer      172.25.254.217 parent 80        0       proxy-only  round-robin originserver name=web2
  62 cache_peer_domain www.westos.org        web1 web2
  63 # Uncomment and adjust the following to add a disk cache directory.

systemctl restart squid.service

Linux运维--Apache详解_第40张图片
注意: 浏览器在那里就在哪里作解析 vim /etc/hosts 填入 172.25.254.116 www.haha.org(其中ip地址为安装squid的主机地址)

测试: 在浏览器访问 www.haha.org

你可能感兴趣的:(运维)