Linux web服务apache

本文深入探讨Apache HTTP Server,涵盖其环境搭建、配置修改、访问控制、多站点管理及HTTPS加密等关键特性。同时,介绍Apache支持的多种编程语言,如PHP、CGI和WSGI,以及网页重写技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

apache简介

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行
Apache是世界使用排名第一的Web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上
由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一,也叫网页服务器软件
它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中 http协议 HTTP协议是Hyper Text
Transfer Protocol(超文本传输协议)的缩写 是用于从万维网(WWW:World Wide Web
)服务器传输超文本到本地浏览器的传送协议 HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统
HTTP协议工作于客户端-服务端架构为上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求
Web服务器根据接收到的请求后,向客户端发送响应信息

HTTP 请求/响应的步骤:

1、客户端连接到Web服务器一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。
2、发送HTTP请求通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应 Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接 若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容,客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

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

前期准备

desktop-172.25.70.100服务端
server2-172.25.70.200客户端

在这里插入图片描述

环境搭建

desktop

yum install httpd -y
systemctl start httpd                  #开启apache服务
systemctl enable httpd                 #开机自启动
netstat -antlupe | grep httpd          #(查看httpd的服务端口80是否开启
firewall-cmd --permanent --add-service=http   #在火墙里面添加http服务 
firewall-cmd --reload                  #使该服务生效
yum install httpd-manual               #安装apache手册
rpm -qc httpd 查看主配置文件

vim /var/www/html/index.html           #编写发布文件(即其他主机访问时显示的信息)
<h1> hello world </h1>

systemctl restart httpd

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

修改配置

修改端口

vim /etc/httpd/conf/httpd.conf  #编辑httpd的主配置文件
80----->8080
systemctl restart httpd
firewall-cmd --permannet --add-port=8080/tcp
firewall-cmd --reload

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试 curl 172.25.70.100

修改发布文件

vim /etc/httpd/conf/httpd.conf    #把端口改回80

vim /var/www/html/text.html  #新建一个发布文件
<h1> text </h1>

vim /etc/httpd/conf/httpd.conf
165  添加
text.html    #(要在最前面,不然访问的还是原来的文件)

在这里插入图片描述

修改发布目录

mkdir -p /westos/html   新建一个目录
vim /westos/index.html
<h1>westos </h1>

vim /etc/httpd/conf/httpd.conf
<Directory "/westos/html">
     Require all granted
</Directory>

systemctl restart httpd

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

访问控制

设置黑白名单

#还原初始配置
vim /etc/httpd/conf/httpd.conf
#把真机加入黑名单(如果是白名单,更改Allow和Deny顺序)
systemctl restart httpd
vim /etc/httpd/conf/httpd.conf 添加如下内容
<Directory "/var/www/html/test">
Order Allow,Deny		##列表读取顺序,后读取的列表会覆盖前面列表内容的重复部分
Allow from All
Deny from 172.25.254.111
</Directory>相当于黑名单

如果修改allow和deny的位置,则会允许所有主机访问,设置deny没有意义

测试

curl 172.25.70.100

在这里插入图片描述

用户认证

cd /etc/httpd
htpasswd --help
htpasswd -cm westosuser admin  #建立admin用户,
输入密码123
cat westosuser    #查看该文件
htpasswd -m westosuser lee  #继续建立lee用户,-c会重新建立用户认证文件,覆盖之前的admin用户,入密码会覆盖之前的用户
cat westosuser

vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
AuthUserFile /etc/httpd/westosuser       #认证文件类型
AuthType basic                           # 认证类型,基本
AuthName "Please input username and password"    #认证名字
Require user admin                       #只允许admin用户通过认证访问共享目录
#Require valid-user                       允许所有用户访问
</Directory>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

多站点

cd /etc/httpd/conf.d/    
vim vhost.conf        #(编辑虚拟主机的配置文件,主配置文件里面有要求,必须以.conf结尾)
mkdir -p /var/www/vhost/news    #给news建立子默认发布目录
mkdir -p /var/www/vhost/music

vim /var/www/vhost/news/index.html
<h1>news</h1>

vim /var/www/vhost/music/index.html
<h1>music</h1>
vim news.conf
vim music.conf 
vim /etc/hosts    #做本地解析(使用哪里的浏览器进行测试就在哪里做解析)
172.25.254.111  www.westos.com news.westos.com music.westos.com

systemctl restart httpd   #重启才会生效
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>

在这里插入图片描述
在这里插入图片描述
vim news.conf 写入news这个虚拟站点的基本信息和授权信息
在这里插入图片描述
,vim music.conf 写入news这个虚拟站点的基本信息和授权信息
在这里插入图片描述

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

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

apache支持的语言

清空以上实验的残留

php

 #PHP:超文本预处理器,是一种通用开源脚本语言。
vim /var/www/html/index.php
yum install php -y    #安装php服务
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
vim /var/www/html/index.php
<?php
   phpinfo();
?>
vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
	DirectoryIndex  index.php,index.html
</IfModule>

在这里插入图片描述

在这里插入图片描述

CGI

CGI 通用网关接口,是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程,是网站上放置动态内容的最简单的方法。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。编程语言Perl是一个广泛被用来编写CGI程序的语言,但CGI程序可以用任何脚本语言或者完全独立编程语言实现,只要此语言可以在这个系统上运行。

CGI脚本可用于许多目的,但是谨慎控制使用哪个CGI脚本以及允许谁添加和运行这些脚本十分重要。编写质量差的CGI脚本可能为外部攻击者提供了破坏网站及内容安全性的途径。故,在web服务器级别和SELinux策略级别,都存在用于限制CGI脚本使用的设置。

特点:一般每次的CGI请求都需要新生成一个程序的副本来运行,这样大的工作量会很快将服务器压垮!因此一些更有效的技术像mod_perl,可以让脚本解释器直接作为模块集成在Web服务器(例如:Apache)中,这样就能避免重复载入和初始化解释器。

172.25.254.126/manual/查看apache服务手册,看设置cgi语言都需要在配置文件里面写入哪些内容

在这里插入图片描述

mkdir /var/www/html/cgi       #先建立cgi目录
cd /var/www/html/cgi  
vim index.cgi   
chmod +x index.cgi           #脚本要给一个可以执行的权限
./index.cgi                  #可以看到时间调用脚本,看能否看到时间

cd /etc/httpd/conf.d/
vim vhost.conf
systemctl restart httpd
vim index.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `date`;
vim vhost.conf   #添加如下内容
<Directory "/var/www/html/cgi">
       Options +ExecCGI
       AddHandler cgi-script .cgi
</Directory>

在这里插入图片描述

在这里插入图片描述

浏览器中输入 172.25.254.126/cgi/index.cgi

wsgi

https加密访问

cd /var/www/cgi-bin/
vim webapp.wsgi
yum search wsgi
yum install mod_wsgi -y

vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
vim /etc/hosts         #添加wsgi.westos.com到本地解析
vim webapp.wsgi
#!/usr/binenv python
import time

def application (environ,start_response):
	response_body = 'UNIX EPOCH time is now: %\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]
vim /etc/httpd/conf.d/vhost.conf   #添加如下内容
<VirtualHost *:80>
        ServerName wsgi.westos.com
        WSGIScriptAlias /   /var/www/cgi-bin/webapp.wsgi
</VirtualHost>

在这里插入图片描述

HTTPS加密

TTPS和HTTP的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密
如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点: 一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

yum install mod_ssl -y          #apache服务器上面安装锁
yum install crypto-utils -y     #安装自己的加密

genkey --help
genkey apache_server.westos.com     #生成自签名证书

vim /etc/httpd/conf.d/ssl.conf
systemctl restart httpd
netstat -antlupe | grep httpd      #查看https的端口443是否开启
firewall-cmd --permanent --add-service=https #在火墙里面添加https服务
firewall-cmd --reload
vim /etc/httpd/conf.d/ssl.conf   #添加这两行

SSLCertificateFile /etc/pki/tls/private/apache_server.westos.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/apache_server.westos.com.key

在这里插入图片描述

在这里插入图片描述

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

此时,浏览器输入 https://172.25.254.126,会发现:授权本部门没有授权(没有备案),认为不安全,所以警示! 解决方法:
Advice(高级选项)–>Get Certificate(下载证书),Confirm确定就可以看到信息!

在这里插入图片描述

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

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

是否要向CA申请(要不要CA提供但服务,付费),否

在这里插入图片描述

然后,需不需要对私钥加密(根据需求,这里不加密),否则每次都需要输入密码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击右上角–>Preferences–>Advanced–>Network–>Settings–>Manual proxy
configuration,输入相应内容。

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

网页重写

vim  /etc/httpd/conf.d/vhost_https.conf
vim /etc/httpd/conf.d/ssl.conf
mkdir -p /var/www/vhost/login         #建立默认发布目录
vim /var/www/vhost/login/index.html   #建立默认发布文件
vim /var/www/vhost/login/index.html
<h1>log</h1>
vim  /etc/httpd/conf.d/vhost_https.conf
<VirtualHost *:443>                    #建立一个443端口虚拟主机,https需要开启443端口
	ServerName login.westos.com
	DocumentRoot /var/www/vhost/login      #建立默认发布目录
	CustomLog logs/login.log combined

	SSLEngine on开启这个功能
	SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
	SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key

</VirtualHost>
<Directory "/var/www/html/vhost/login">
         Require all granted
</Directory>

<VirtualHost *:80>                           #建立一个80端口的虚拟主机
     ServerName login.westos.com
     RewriteEngine on                        #将网页重写的功能开启
     RewriteRule  ^(/.*)$  https://%{HTTP_HOST}$1 [redirect=301]   #(永久重定向:永久跳转)
                                             #客户端输入的内容        客户端主机
</VirtualHost>

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

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

在这里插入图片描述

在这里插入图片描述

字符 含义

^(/.*)$客户在浏览器地址栏中输入的所有字符
https://强制客户加密访问
%{HTTP_HOST}客户请求主机
$11"表示(/.∗)的值
[redirect=301]永久重写,302临时

在这里插入图片描述

未完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值