1 Apache
Apache HTTP Server(简称Apache
)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
企业中常用的web服务,用来提供http://(超文本传输协议)
可以使用以下命令嗅探网站的服务器:
curl -I www.qq.com
2 Nginx与Apache的区别
(1) 轻量级,同样起web 服务,比apache占用更少的内存及资源
(2) 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
(3) 高度模块化的设计,编写模块相对简单
(4) 社区活跃,各种高性能模块出品迅速啊
(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 是否安装好:
出现上述界面表示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/* |
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
当更改的端口不在默认列表时
查看默认列表: 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
测试,在浏览器地址栏输入: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>
semanage fcontext -a -t httpd_sys_content_t '/haha(/.*)?' #更改目录上下文
restorecon -RvvF /haha/ #刷新
systemctl restart httpd.service
默认发布文件就是访问apache时没有指定文件名称时默认访问的文件,这个文件可以指定多个,有访问的顺序
vim /etc/httpd/conf/httpd.conf
更改:
<IfModule dir_module>
DirectoryIndex index.html test.html ##当index.html不存在时访问test.html
</IfModule>
systemctl restart httpd.service
作用:使用一个服务器发布多个站点
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>
vim /etc/hosts
172.25.254.216 www.haha.org news.haha.org music.haha.org
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主机测试:
在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主机测试:
在ip为172.25.254.63主机测试:
1 建立认证文件
cd /etc/httpd/
htpasswd -cm .htpassfile admin #建立密码文件并隐藏,用户名为admin
htpasswd -m .htpassfile admin1 #要把参数的c去掉,否则密码会覆盖原来的用户
cat .htpassfile
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>
4 若需要所有用户输入密码
在配置文件中写入:
<Directory "/var/www/html">
AuthUserFile /etc/httpd/.htpassfile
Authtype basic
AuthName "please input username and password"
Require valid-user
</Directory>
Apache支持的语言有perl
、php
、python
等
1 对php的支持
安装php:
yum install php -y
之后重启Apache服务即可加载php插件
测试:
在发布目录中创建.php
文件并访问:
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>
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>
之后重启服务后测试发现可以运行脚本
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/服务器时需要添加证书:
确认证书后,即可成功访问:
查看证书信息:
4 制作证书
安装证书软件:
yum install crypto-utils.x86_64 -y
制作证书:
genkey www.westos.org #为www.westos.org制作证书
开始加密:
之后开始采集加密信息(此时可以移动鼠标和键盘加速采集):
选择不发送给CA机构:
选择next即完成制作
5 编辑配置文件
vim /etc/httpd/conf.d/ssl.conf
作以下更改:
之后重启httpd服务,在浏览器访问https://172.25.254.216/下载证书后,查看证书信息:
证书制作成功
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
其中含义:
此外,还可以在重写规则后加[redirect=301]
表示永久重写,[redirect=302]
表示临时
2 建立发布文件及目录
mkdir /var/www/virtual/westos.org/html
touch /var/www/virtual/westos.org/html/index.html
在客户端主机作地址解析:
vim /etc/hosts
写入:
172.25.254.216 login.westos.org
作完解析后在浏览器地址栏输入login.westos.org
:
安装证书后访问发现可以成功访问测试页:
1 CDN
CDN的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。 从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。
2 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没有被墙,你就可以访问国外被墙的网站了。
1 正向代理
所谓正向代理就是顺着请求的方向进行的代理,即代理服务器他是由你配置为你服务,去请求目标服务器地址。
比如我们要去访问谷歌网站,我们直接访问不通,那么我们就可以找一个代理服务器为我们服务,我们通过代理服务器请求到谷歌网站。对于谷歌而言他只知道有一个服务器访问了自己,并不知道这件事你是访问不了他,找了一个代理服务器访问自己。
在举一个通俗的例子。你需要钱,C正好有钱,但是你C不直接借给你。你和B关系比较好,B可以找C借到钱。你和B沟通后,由B来找C借到钱后在给你。
2 反向代理
所谓反向代理正好与正向代理相反,代理服务器是为目标服务器服务的,虽然整体的请求返回路线都是一样的都是Client到Proxy到Server。
比如 我们访问百度网站,百度的代理服务器对外的域名为 https://www.baidu.com 。具体内部的服务器节点我们不知道。现实中我们通过访问百度的代理服务器后,代理服务器给我们转发请求到他们N多的服务器节点中的一个给我们进行搜索后将结果返回。
再举例:我们同样需要钱,但是我们又不知道谁有钱,所以我们找了一家网贷平台,你提交资料后,网贷平台直接将钱打给你。但是你不知道,也不用关注网贷平台的钱从哪里来。网贷平台内部他们可能从哪一个财主哪里融的钱。对你而言网贷平台和他们的金主是一起的。
实验准备:两台主机,一台可以上网(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
在squid配置文件第59行可以看出squid使用的端口为3128,故需要在火墙中打开此端口:
firewall-cmd --permanent --add-port=3128/tcp
firewall-cmd --reload
在浏览器中:选择 Edit ---> Preferences
4 测试
在不能上网的主机中测试是否可以上网:
可以成功上网,说明正向代理设置成功
实验准备:两台主机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
3 测试
在测试主机浏览器地址栏输入:172.25.254.116
(即访问Desktop主机)
浏览器返回的是Server主机上的测试页,说明反向代理设置成功
实验环境:两台安装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
即可实现两台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
注意: 浏览器在那里就在哪里作解析 vim /etc/hosts
填入 172.25.254.116 www.haha.org
(其中ip地址为安装squid的主机地址)
测试: 在浏览器访问 www.haha.org