Linux下Apache Web服务器的安装与配置
1.Apache Web服务器简述
Web服务是目前Internet应用最流行、最受欢迎的服务之一,Linux平台使用最广泛的Web服务器是Apache,它是目前性能最优秀、最稳定的Web服务器之一。
WWW(World Wide Web)服务,现在已经成为Internet上最热门的服务之一,它是人们在网上查找、浏览信息的主要手段。WWW是一种交互式图形界面的Internet服务,具有强大的信息连接功能。它使得成千上万的用户通过简单的图形界面就可以获取各个大学、组织、公司等的最新信息和各种网上服务。
WWW是基于客户机/服务器方式的信息发现技术和超文本技术的综合。WWW服务器通过HTML超文本标记语言把信息组织成为图文并茂的超文本;WWW浏览器则为用户提供基于HTTP超文本传输协议的用户界面。用户使用WWW浏览器通过Internet访问远端WWW服务器上的HTML超文本。
在WWW的客户机/服务器工作环境中,WWW浏览器起控制作用,其任务是使用一个URL(Internet地址)来获取一个WWW服务器上的Web文档,解释这个HTML,并将文档内容以用户环境所许可的效果最大限度地显示出来,其整个流程如下:1) WWW浏览器根据用户输入的URL连到相应的远端WWW服务器上。2) 取得指定的Web文档。3) 断开与远端WWW服务器的连接。
也就是说,平时我们在浏览某个网站的时候,每取一个网页就建立一次连接,读完后马上断开;当需要另一个网页时重复此过程。
Apache
根据著名的WWW服务器调查公司所作的调查,世界上百分之五十以上的WWW服务器都在使用Apache,是世界排名第一的Web服务器。
Apache的诞生极富有戏剧性。当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。
由于Apache具有高度的可配置性,因此满足广泛的Web服务需要,其显著的特征是:可以运行于所有计算机平台,也包括Unix/Linux系统;集成代理服务器和Perl编程脚本;对用户的访问会话过程跟踪:可对服务器日志定制;还支持虚拟主机及HTTP认证,等等。目前它已经占据了过半数的市场份额。
2.Apache的作用
在web被访问时通常使用http://的方式
http:// ##超文本传输协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求,Web服务器根据接收到的请求后,向客户端发送响应信息。
http:// 提供超文本传输协议软件:
Apache、nginx、stgw、jfe、Tengine
curl命令执行取得效果的前提是网络连通
3.Apache的安装
dnf search apache 查询apache安装包
dnf install httpd.x86_64 -y 安装apache安装包
4.Apache的启用
systemctl enable --now httpd ##开启服务并设定服务位开机启动
firewall-cmd --list-all ##查看火墙信息
firewall-cmd --permanent --add-service=http ##在火墙中永久开启http访问
firewall-cmd --permanent --add-service=https ##在火墙中永久开启https访问
firewall-cmd --reload ##刷新火墙使设定生效
5.Apache的基本信息
服务名称: httpd
配置文件:
/etc/httpd/conf/httpd.conf ##主配置文件
/etc/httpd/conf.d/*.conf ##子配置文件
默认发布目录: /var/www/html
访问默认发布目录后看到的是Apache测试页
默认发布文件: index.html
默认端口: 80 #http
443 #https(加密)
端口查看:netstat -anltupe | grep httpd
a:所有端口,n:不做端口解析,只显示端口号,l:活跃的(开启的端口),t:TCP协议,u:UDP协议,p:进程名称,e:显示网络其他相关信息
用户: apache
提供http服务的用户是apache
日志: /etc/httpd/logs
6.Apache的基本配置
(1)Apache端口修改
vim /etc/httpd/conf/httpd.conf ##编辑http服务配置文件
Listen 6666 ##更改http服务端口为6666
firewall-cmd --permanent --add-port=6666/tcp ##在防火墙中开启6666端口
firewall-cmd --reload
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 6666 ##在selinux中开启6666端口
systemctl restart httpd ##重启服务
netstat -anltupe | grep httpd ##查看端口号
端口6666不是apache常用端口,所以浏览器在访问时有安全检测,过不去
(2)默认发布文件修改
默认发布文件必须在默认发布目录下写,这样,在访问时显示的网页就是默认发布文件里面的内容,
更改默认发布文件为自己编写的linux.html文件,访问apache服务时,显示的是linux.html文件里面的内容,当此文件被删除,默认发布文件显示的是第二个文件index.html里面的内容
vim /etc/httpd/conf/httpd.conf ##编辑配置文件
DirectoryIndex linux.html index.html ##更改默认发布文件
systemctl restart httpd ##重启服务
(3)默认发布目录修改
更改指定的目录为默认发布目录时需要做的事:
建立目录,建立自己的标识性文件,写内容;
编辑http服务配置文件,指定所建立的目录为默认发布目录;
授权所有人可访问;
当selinux开启时,更改安全上下文为与http服务相符合的安全上下文
测试:访问设定好的http服务
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/linuxdir/html"
<Directory "/linuxdir/html">
Require all granted
</Directory>
semanage fcontext -a -t httpd_sys_content_t '/linuxdir(/.*)?'
restorecon -RvvF /linuxdir/
systemctl restart httpd
firefox http://192.168.1.19
7.Apache的访问控制
实验环境:两台主机
rhel7:ip:192.168.1.10
rhel8:ip:192.168.1.19(http服务端)
实验素材:
在默认发布目录下新建目录并在新建目录下新建文件写入内容,来对访问做标识性控制
mkdir /var/www/html/redhat
vim /var/www/html/redhat/index.html
firefox http://192.168.1.19/redhat
未做设定前所有ip主机都可访问默认发布目录下新建目录的内容
(1)基于客户端ip的访问控制
ip白名单
设定rhel7主机(ip:192.168.1.10)可以访问默认发布目录下新建目录的内容,其他主机不可以访问
<Directory "/var/www/html/redhat">
Order Deny,Allow ##按顺序读取,后读的会把和前面重复的覆盖掉
Allow from 192.168.1.10
Deny from All
</Directory>
rhel7主机可以访问默认发布目录下新建目录的内容
rhel8主机不可以访问默认发布目录下新建目录的内容
ip黑名单
设定rhel7主机(ip:192.168.1.10)不允许访问默认发布目录下新建目录的内容
<Directory "/var/www/html/redhat">
Order Allow,Deny ##按顺序读取,后读的会把和前面重复的覆盖掉
Allow from All
Deny from 192.168.1.10
</Directory>
rhel7主机不可以访问默认发布目录下新建目录的内容
rhel8主机可以访问默认发布目录下新建目录的内容
(2)基于用户认证
vim /etc/httpd/conf/httpd.conf ##编辑http服务配置文件
<Directory "/var/www/html/redhat">
AuthUserfile /etc/httpd/htpasswdfile ##指定认证文件
AuthName "Please input your name and password" ##认证提示语
AuthType basic ##认证类型
Require user admin ##允许通过的认证用户 2选1
Require valid-user ##允许所有用户通过认证 2选 1
</Directory>
Require valid-user ##允许所有用户通过认证(认证文件中的用户)
htpasswd -cm /etc/httpd/htpasswdfile admin ##生成认证文件 -c表示创建一个新文件,-m 表示MD5加密
注意:
当/etc/httpd/htpasswdfile存在,那么在添加用户时不要加-c参数否则会覆盖源文件内容
测试:
访问http服务时,先用一个没有在认证文件中的用户进行认证,认证失败
用在认证文件中的用户进行访问认证,认证成功
Require user redhat ##允许通过的认证用户(其他用户不能通过)
在访问http服务时,先用认证文件中的admin用户进行认证,发现认证失败
用认证文件中的用户redhat()进行访问认证,认证成功
8.Apache的虚拟主机
问题引入:如何在一台apache服务器上访问多个默认测试页?
思考问题:题意即是一个ip如何发布多个站点,如:www.westos.com、music.westos.com、news.westos.com等多个站点在地址栏搜索后,默认显示到自己站点相对应的发布页
问题解决:此问题被解决需要的是多个操作系统来完成,而不是多个硬件,apache有类似于虚拟主机的设定,可以设定虚拟主机来解决
设定虚拟主机
编辑http服务子配置文件
第一个虚拟主机是默认的访问,就是没有指定任何信息的时候访问这个默认的,当你访问默认的80时,去看/var/www/html里面的内容,所有的日志都放到default里
第二个虚拟主机的访问不是默认的,用 * 来代替,当你访问 music.westos.org 时,去看/var/www/virtual/westos.org/music里面的内容,所有的日志都放到music.westos.org里
第三个虚拟主机的访问不是默认的,用 * 来代替,当你访问 news.westos.org 时,去看/var/www/virtual/westos.org/news里面的内容,所有的日志都放到news.westos.org里
/var/www/目录,在主配置文件里已经做过授权
vim /etc/httpd/vhost.conf
<VirtualHost _default_:80>
DocumentRoot /var/www/html
CustomLog logs/defaults.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName music.westos.org
DocumentRoot /var/www/virtual/westos.org/music
CustomLog logs/music.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName news.westos.org
DocumentRoot /var/www/virtual/westos.org/news
CustomLog logs/news.log combined
</VirtualHost>
mkdir -p /var/www/virtual/westos.org/{music,news} ##建立站点控制目录
touch /var/www/virtual/westos.org/{music,news}/index.html ##建立站点控制目录下的默认发布文件
vim /var/www/virtual/westos.org/music/index.html ##给默认发布文件中写内容
<h1>music's page</h1>
vim /var/www/virtual/westos.org/news/index.html
<h1>news's page</h1>
cat /var/www/html/index.html
192.168.1.19 linux's page
systemctl restart httpd ##重启http服务
测试:
在浏览器所在主机中(rhel7)
vim /etc/hosts ## 编辑本地解析文件
192.168.1.19 www.westos.org music.westos.org news.westos.org
firefox http://www.westos.org
firefox http://music.westos.org
firefox http://news.westos.org
总结
访问的都是自己站点相对应的内容,apache虚拟主机的设定解决了一个ip如何发布多个站点的问题
注意
http服务的主配置文件中图片中的内容不能被删除,若删除,则子配置文件中的设定就会全部失效
9.Apache的语言支持
一般情况下,在互联网里,apache所支持访问的语言有三种:php、python、perl
php语言支持
#php#
vim /var/www/html/index.php ##编辑php语言程序在apache服务器下的默认发布文件
<?php
phpinfo();
?>
dnf install php -y ##安装php软件包
systemctl restart httpd ##重启http服务
测试:
访问apache支持的php语言默认发布文件内容
firefox http://192.168.0.11/index.php
perl语言支持
apache默认下发布的是文本,它识别不到程序,cgi把perl语言程序翻译好,再将翻译过后的能让apache看懂的内容传过去。由此可见,perl语言访问apache是基于cgi原理的。
CGI原理:
公共网关接口CGI是Web服务器的一种标准规范,用来将Web用户的请求传递给服务器的应用程序,并将接收到的数据回送给Web用户。
每当用户向Web服务器提交一个页面请求(例如,点击一个超链接或输入一个网站地址),Web服务器会将用户的请求存放在服务器上的网页返回给用户.,然而,当用户提交一个带有表单(form)的请求网页时,在服务器端需要接收表单内容,必要时还要根据表单内容作必要的处理。一般来说,Web服务器并不能直接处理表单,而是把表单内容传送给服务器的一个小型应用程序,由该程序对表单数据进行处理并回送必要的确定信息。这种在Web服务器与应用程序之间往返传递数据的方法或规范称之为“公共网关接口(Common Gateway Interface)”,简称CGI。
公共网关接口CGI提供了一种将用户请求页面的数据传递给应用程序并从应用程序向用户返回信息的一致性规范。该规范与服务器应用程序所使用的操作系统无关,只要操作系统具有标准输入及标准输出能力即可,因为Web服务器与应用程序之间的通信是通过标准输入及标准输出实现的.
实验前安装apache配置手册,可方便后续实验配置文件及脚本文件的编辑
#cgi#
mkdir /var/www/html/cgidir ##在http服务默认发布目录下建立cgi脚本文件目录
vim /var/www/html/cgidir/index.cgi ##编辑cgi目录下的脚本文件
#!/usr/bin/perl
print "Content-type: text/html\n\n"; ##把content-type输出为纯文本text/html
print `date`; ##优先执行date命令,再输出
vim /etc/httpd/conf.d/vhost.conf ##编辑http服务子配置文件
<Directory "/var/www/html/cgidir"> ##指定控制目录
Options +ExecCGI ##执行写入的cgi参数
AddHandler cgi-script .cgi ##标识是cgi-script或者以.cgi结尾的文件为cgi脚本
</Directory>
设定selinux不是强制状态的原因:自己建立的cgi脚本文件的安全上下文和系统初始给定的cgi脚本安全上下文不一致
强制状态下,自建cgi脚本经过安全上下文设定可以用,其原理和上边默认发布目录修改类似(这里不再赘述)
测试:
访问cgi脚本,达到了预期的效果
firefox http://192.168.0.11/cgidir/index.cgi
10.https证书的设定(apache的加密认证)
实验环境:
在服务器端安装mod_ssl插件(加密作用)
安装完成后会生成一个/etc/httpd/conf.d/ssl.conf的文件,在这个文件当中可以设定我们要用到的证书和加密key(锁)
实验动作:
1)生成key
openssl genrsa -out /etc/pki/tls/private/www.westos.com.key 2048 #生成私钥
genrsa表示rsa加密方式,2048表示生成加密钥(锁)的位数是2048位
2)生成证书请求(签名文件),需要向CA机构提交的证书请求
为我们生成的这个key做新的证书请求,填写的信息也是要保存到文件(/etc/pki/tls/certs/www.westos.com.csr)里去的,certificate sign request 证书签证请求
openssl req -new -key /etc/pki/tls/private/www.westos.com.key -out /etc/pki/tls/certs/www.westos.com.csr ####生成证书签名文件
3)生成证书
openssl x509 -req -days 365 -in /etc/pki/tls/certs/www.westos.com.csr(输入证书请求)
-signkey /etc/pki/tls/private/www.westos.com.key(为我们的key做签证)
-out /etc/pki/tls/certs/www.westos.com.crt(输出证书文件)
x509 证书格式
-req 请求
-in 加载签证名称
4)编辑/etc/httpd/conf.d/ssl.conf文件,把我们的密钥和证书写上去
5)测试:可以用https方式进行访问,证书信息在我们系统里面也出现了
- 利用网页重写规则优化https的访问
建立需要加密和不需要加密的站点进行实验,更改新建目录文件的安全上下文为http服务程序相匹配的安全上下文
编写虚拟主机配置信息
注意需要加密的站点虚拟主机信息编写内容
^(/.*)$ ##客户主机在地址栏中输入的地址
%{HTTP_HOST} ##客户主机
$1 ##RewriteRule后面跟的第一串字符的值
11.squid正向代理的部署
实验环境:
单网卡主机 (rhel8_node1) 设定ip:172.25.254.13不能上网
双网卡主机 (rhel8_node2) 设定ip1:192.168.1.23可以上网,设定ip2:172.25.254.18可以连接单网卡主机
实验效果:
让单网卡主机不能上网但浏览器可以访问互联网页
操作:
在双网卡主机中:
搭建软件仓库源
dnf install squid -y ##安装squid安装包
vim /etc/squid/squid.conf ##编辑squid配置文件
59 http_access allow all ##默认情况下允许任何人访问
65 cache_dir ufs /var/spool/squid 100 16 256 ##当打开缓存目录后,/var/spool/squid/目录里会自主建立16个一级目录和256个二级目录
##缓存大小不能超过100M,超过100M后它会把之前缓存的内容覆盖掉
systemctl restart squid ##重启squid
firewall-cmd --permanent --add-port=3128/tcp ##在防火墙中开启squid程序端口:3128
firewall-cmd --reload
在单网卡主机中选择
NetWork Proxy
172.25.254.13 3128
测试:
在单网卡主机中
ping www.baidu.com 不通
在浏览器中访问www.baidu.com可以
12.squid反向加速代理
反向加速代理是企业在各个省份放置的一个代理服务器,为了各个省份的用户在访问时能对他的访问速度进行加速
实验环境:
192.168.1.11 ##Apache服务器
192.168.1.23 ##squid,没有数据负责缓存
vim /etc/squid/squid.conf ##编辑配置文件
http_port 80 vhost vport ##vhost 支持虚拟域名 vport 支持虚拟端口(客户在访问web界面时,访问的是80端口)
##当192.168.1.23的80端口被访问会从192.168.1.11的80端口缓存数据
cache_peer 192.168.1.11 parent 80 0 proxy-only ##去192.168.1.11主机上取资源,取这个ip80端口上的资源,只做代理缓存
systemctl restart squid ##重启squid
squid开启的80端口
在防火墙中开启80端口
测试:
firefox http://192.168.1.23
访问看到的是192.168.1.11上的数据
更多推荐
所有评论(0)