一.Apache介绍
Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
在我们使用互联网访问地址的时候,通常是以 http:// 的方式访问,企业将资源通过超文本传输的方式将资源进行共享。
提供超文本传输协议的软件也有很多:除了Apache还有nginx,stgw,jfe,Tengine等软件。
可以使用命令"curl -I [域名]"打印HTTP头部信息
二.Apache的实现
0.实验环境
client:192.168.1.8
server:192.168.1.9
1.Apache的安装及启用
yum install httpd
systemctl enable --now httpd
# 如果firewalld开启要执行以下操作
firewall-cmd --list-all #查看火墙信息
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload #重载火墙
测试:在client浏览器中输入http://192.168.1.9 出现Apache官方测试页即成功。
2.Apache的基本信息
内容 | 参数 |
---|---|
服务名称 | httpd |
配置文件 | /etc/httpd/conf/httpd.conf (主配置文件) |
- | /etc/httpd/conf.d/*.conf (子配置文件) |
默认发布目录 | /var/www/html/ |
默认发布文件 | index.html |
默认端口 | http:80 https:443 |
用户 | apache |
日志 | /etc/httpd/logs |
3.Apache的基本配置
☆Apache端口修改
# 查询httpd服务端口为80
ss -antlupe|grep httpd
vim /etc/httpd/conf/httpd.conf
Listen 1111 # 将默认监听的端口改为1111
systemctl restart httpd
# 如果firewalld和selinux开启要执行以下操作
firewall-cmd --permanent --add-port=1111/tcp
firewall-cmd --reload
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 1111
systemctl restart httpd
测试:按照之前的方式已经不能访问到默认的Apache官方测试页,我们要加上新修改的端口才可以正常访问"http://192.128.1.9:1111"
☆Apache默认发布文件
vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
# DirectoryIndex index.html #默认发布文件是index.html
DirectoryIndex test.html index.html #修改后优先打开test.html
#优先级从前往后,即先test.html再index.html
</IfModule>
systemctl restart httpd
☆Apache默认发布目录
vim /etc/httpd/conf/httpd.conf
# 配置文件默认内容
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# 我们修改后的发布目录
DocumentRoot "/test/html"
<Directory "/test/html">
AllowOverride None
Require all granted
</Directory>
# 如果selinux开启要执行以下操作 主要是安全上下文的一些设定
semanage fcontext -a -t httpd_sys_content_t '/test(/.*)?'
restorecon -RvvF /test/
systemctl restart httpd
☆Apache的访问控制
测试页:
mkdir /var/www/html/test
vim /var/www/html/test/index.html
<h1>test page</h1>
ip访问黑名单
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/test">
Order Allow,Deny
Allow from All
Deny from 192.168.1.8
</Directory>
#先读取allow内容,后读取deny内容。
#除了192.168.1.8不能访问,其他主机都可以访问。
systemctl restart httpd
ip访问白名单
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/test">
Order Deny,Allow
Deny from All
Allow from 192.168.1.8
</Directory>
#除了192.168.1.8主机能访问,其他主机都不可以访问
systemctl restart httpd
基于用户认证的访问控制
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/test">
AuthUserfile /etc/httpd/htpasswdfile #指定认证文件
AuthName "Please input your name and passward" #认证提示语
AuthType basic #认证类型
Require valid-user #允许所有用户通过认证
#Require user admin #只允许admin用户通过认证
</Directory>
#生成认证文件并给admin用户设置密码
htpasswd -cm /etc/httpd/htpasswdfile admin
#-c为新建(当htpasswd文件不存在在时),-m为使用md5的加密方式
#若再添加新用户时
htpasswd -m /etc/httpd/htpasswdfile testuser1
systemctl restart httpd
#此时需要输入正确的用户名和密码才能访问我们的test page
4.Apache的虚拟主机
若想要访问同一ip下的不同的站点,则需要使用apache的虚拟主机
当访问music.laowang.com时---->/var/www/laowang.com/music/index.html
当访问news.laowang.com时----->/var/www/laowang.com/news/index.html
当访问www.laowang.com时------>/var/www/html/index.html
制作测试页:
mkdir -p /var/www/laowang.com/{news,music}
echo "music's page" >/var/www/laowang.com/music/index.html
echo "news's page" > /var/www/laowang.com/news/index.html
具体实现:
vim /etc/httpd/conf.d/Vhost.conf
<VirtualHost _default_:80>
DocumentRoot "/var/www/html"
CustomLog logs/default.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName music.laowang.com
DocumentRoot "/var/www/laowang.com/music"
CustomLog logs/music.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName news.laowang.com
DocumentRoot "/var/www/laowang.com/news"
CustomLog logs/news.log combined
</VirtualHost>
systemctl restart httpd
测试:
-
在host文件中添加本地解析
192.168.1.9 www.laowang.com music.laowang.com news.laowang.com -
在浏览器中输入
www.laowang.com
music.laowang.com
news.laowang.com
5.Apache的其他语言支持
☆php
vim /var/www/html/index.php
<?php
phpinfo();
?>
yum install php
systemctl restart httpd
☆perl
perl语言的主要功能是让系统支持CGI
CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。
制作测试页:
yum install httpd-manual #安装httpd手册查看cgi文件编写方式
systemctl restart httpd #重启服务后在浏览器中输入"IP/manual"
mkdir /var/www/html/cgidir
vim /var/www/html/cgidir/index.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print 'date';
chmod +x index.cgi
具体实现:
vim /etc/httpd/conf.d/Vhost.conf
<Directory "/var/www/html/cgidir">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
systemctl restart httpd
测试:
在浏览器中输入"192.168.1.9/cgidir/index.cgi"
☆python
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
6.Apache的加密访问
在apache服务器里,当我们进入的地方需要输入密码或者需要安全性比较高的时候,我们会发现页面自动跳转到https://加密访问,我们在练习搭建服务器过程不需要网上注册之类,但是需要清楚怎样自动跳转https页面,和怎样制作加密证书。
在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
- 安装加密插件mod_ssl并重启httpd
- 使用mod_ssl插件生成私钥,证书签名文件,证书
- 修改子配置文件/etc/httpd/conf.d/ssl.conf,把证书和密钥的路径都换为刚才生成的
- 在/etc/httpd/conf.d/Vhost.conf中添加两块内容,一块是针对加密访问(https)的,要指定密钥和证书。另一块是开启重写功能,将http转换为https。
7.squid+Apache
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之
连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。
☆squid正向代理
正向代理:客户主机因为某些原因不能与目标主机建立连接,可以与squid主机建立连接,squid主机可以与目标主机建立连接,此时,客户主机可以与squid建立连接,将squid主机作为代理服务器,代理服务器会将客户主机想要建立通讯的目标主机的信息缓存到本机,客户主机就能完成对目标主机的访问。
实验准备:
client:一块网卡,设定一个不能上网的IP
server:两块网卡,IP1可以ping通client,IP2可以上网
具体实现:
# server(双网卡):
yum install squid
vim /etc/squid/squid.conf
59 http_access allow all
65 cache_dir ufs /var/spool/squid 100 16 256
#在/var/spool/squid下建立16个一级目录 256个二级目录,缓存大小不超过100M
systemctl restart squid
firewall-cmd --permanent --add-port=3128/tcp
firewall-cmd --reload
测试:
在client端的浏览器中,手动设置代理服务器(Network Proxy),不同的浏览器设置方式有些许差异,设置代理服务器时需要填入server端的IP1和squid的端口3128。
设置完成后在client端的浏览器就可以访问百度的页面了,但是仍然不能ping通www.baidu.com
☆squid反向代理
反向代理:举个栗子,腾讯的服务器在深圳市,用户在西安市,两地相距很远,直接访问深圳市的服务器会经过很多路由,访问速度相对来说慢。且每个省份的用户都去访问深圳的腾讯服务器会导致腾讯服务器的负载变得很大,所以腾讯公司会在各个省市租用服务器。
所以,客户通过西安租用的服务器访问深圳的服务器的时间快于直接访问深圳服务器。当客户想访问深圳服务器时,客户先访问西安本地租用的服务器,此服务器又去访问深圳服务器,最终实现访问的加速。也就是cdn加速。
实验准备 :
squid服务器:172.25.254.10
Apache服务器:172.25.254.20
两台主机配置好IP,安装好相应的软件。数据在Apache服务器上,squid服务器上没有数据,仅负责缓存。
具体实现:
# 在squid服务器:
vim /etc/squid/squid.conf
http_port 80 vhost vport #支持虚拟域名,虚拟端口
cache_peer 172.25.254.20 parent 80 0 proxy-only
systemctl restart squid
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
测试:
在Apache服务器上编写一个测试页,克隆一台客户机IP为172.25.254.30,在客户机浏览器中访问squid服务器(172.25.254.10),squid服务器上的资源实际上是从Apache服务器上缓存过来的。
正向代理和反向代理的区别
1、正向代理其实是客户端的代理,帮助客户端访问其无法访问的服务器资源。反向代理则是服务器的代理,帮助服务器做负载均衡,安全防护等。
2、正向代理一般是客户端架设的,比如在自己的机器上安装一个代理软件。而反向代理一般是服务器架设的,比如在自己的机器集群中部署一个反向代理服务器。
3、正向代理中,服务器不知道真正的客户端到底是谁,以为访问自己的就是真实的客户端。而在反向代理中,客户端不知道真正的服务器是谁,以为自己访问的就是真实的服务器。
4、正向代理和反向代理的作用和目的不同。正向代理主要是用来解决访问限制问题。而反向代理则是提供负载均衡、安全防护等作用。二者均能提高访问速度。