互联网上排名第一的 HTTP 服务器,Apache HTTP 服务器项目致力于开发和维护适用于现代操作系统(包括 UNIX 和 Windows)的开源 HTTP 服务器。该项目的目标是提供安全、高效且可扩展的服务器,该服务器提供与当前 HTTP 标准同步的 HTTP 服务。Apache HTTP 服务器(centos中命名为httpd)于 1995 年推出,自 1996 年 4 月以来一直是互联网上最受欢迎的 Web 服务器。2020 年 2 月,它作为一个项目迎来了 25 岁生日。
Apache2的主要功能和特点
- 开源和免费:
Apache HTTP Server是一个开源项目,由Apache软件基金会维护,这意味着它是免费的,任何人都可以下载、使用和修改。
- 跨平台支持:
Apache2支持多种操作系统,包括Unix、Linux、Windows、MacOS等。
- 模块化架构:
Apache2采用模块化设计,用户可以根据需要启用或禁用不同的模块。例如,mod_ssl模块用于处理SSL/TLS加密,mod_rewrite模块用于URL重写。
- 高度可配置:
通过配置文件(如httpd.conf、apache2.conf)进行详细配置,用户可以定制Apache的行为,包括虚拟主机、访问控制、日志记录等。
- 支持多种协议:
除了HTTP协议,Apache2还支持HTTPS(通过SSL/TLS加密)、FTP、WebDAV等多种协议。
- 虚拟主机支持:
Apache2可以在一台服务器上托管多个网站(虚拟主机),每个网站可以有自己独立的配置和域名。
- 强大的日志功能:
Apache2提供详细的访问日志和错误日志,帮助管理员监控和排查服务器问题。
- 广泛的社区支持和文档:
由于其广泛使用,Apache2有一个活跃的社区和丰富的文档资源,用户可以方便地找到帮助和解决方案。
安装使用
这里使用Ubuntu2404环境,apt直接下载
apt install -y apache2
systemctl enable --now apache2
Apache2的主要配置文件位于/etc/apache2目录下,常见的配置文件包括:
- /etc/apache2/apache2.conf:主配置文件
- /etc/apache2/ports.conf:端口配置文件
- /etc/apache2/sites-available/:存放可用虚拟主机配置文件的目录
- /etc/apache2/sites-enabled/:存放启用虚拟主机配置文件的目录(通过符号链接指向sites-available中的文件)
- /var/log/apache2/:日志文件(访问日志和错误日志)。
基础命令
apache2ctl 是一个用于控制 Apache2 的脚本,它提供了多种操作选项。
apache2ctl graceful
平滑重启 Apache2 服务,不中断现有的连接。apache2ctl configtest
检查 Apache2 配置文件的语法是否正确。apache2ctl status
显示 Apache2 服务的状态信息(需要启用 mod_status 模块)。
systemctl 是系统和服务管理器,用于管理服务的启动、停止、重启等。
systemctl start apache2
启动 Apache2 服务。systemctl stop apache2
停止 Apache2 服务。systemctl restart apache2
重启 Apache2 服务。systemctl reload apache2
重新加载 Apache2 配置,而不中断当前连接。systemctl status apache2
显示 Apache2 服务的状态信息。
a2ensite 和 a2dissite用于启用和禁用虚拟主机配置文件。
a2ensite 文件名(000-default.conf等)
启用指定的虚拟主机配置文件。例如:a2ensite example.com。a2dissite 文件名(000-default.conf等)
禁用指定的虚拟主机配置文件。例如:a2dissite example.com。
a2enmod 和 a2dismod用于启用和禁用 Apache2 模块。
a2enmod <模块>
启用指定的 Apache2 模块。例如:a2enmod rewrite。a2dismod <模块>
禁用指定的 Apache2 模块。例如:a2dismod rewrite。
配置web访问
配置一个简单的Web网站使用Apache2服务器
节点 | IP |
---|---|
huhy | 192.168.200.190 |
在默认的Web根目录中创建一个简单的HTML页面。默认情况下,Apache2的Web根目录位于/var/www/html
cat > /var/www/html/index.html << eof
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello WorLd</title>
</head>
<body>
<h1>huhy</h1>
<p>简单的web界面</p>
</body>
</html>
eof
确保Apache2用户有权限读取和执行Web根目录中的文件
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
重新加载Apache2服务以应用更改
systemctl reload apache2
IP访问;http://ip
配置虚拟主机
配置虚拟主机可以在同一台Apache2服务器上托管多个独立的网站
节点 | IP |
---|---|
huhy | 192.168.200.190 |
创建网站目录;例如两个站点huhy1.com和huhy2.com
mkdir -p /var/www/huhy1.com/public_html
mkdir -p /var/www/huhy2.com/public_html
设置目录权限
chown -R www-data:www-data /var/www/huhy1.com/public_html
chown -R www-data:www-data /var/www/huhy2.com/public_html
chmod -R 755 /var/www
为每个站点创建一个简单的HTML文件
cat > /var/www/huhy1.com/public_html/index.html << eof
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello WorLd</title>
</head>
<body>
<h1>huhy1</h1>
<p>huhy1的站点界面</p>
</body>
</html>
eof
cat > /var/www/huhy2.com/public_html/index.html << eof
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello WorLd</title>
</head>
<body>
<h1>huhy2</h1>
<p>huhy2的站点界面</p>
</body>
</html>
eof
在Apache2的sites-available目录中为每个站点创建一个配置文件。
vim /etc/apache2/sites-available/huhy1.com.conf
在文件中添加以下内容
<VirtualHost *:81>
ServerAdmin webmaster@example.com
ServerName huhy1.com
ServerAlias www.huhy1.com
DocumentRoot /var/www/huhy1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/huhy1.com_error.log
CustomLog ${APACHE_LOG_DIR}/huhy1.com_access.log combined
</VirtualHost>
huhy2站点
vim /etc/apache2/sites-available/huhy2.com.conf
添加以下内容
<VirtualHost *:82>
ServerAdmin webmaster@test.com
ServerName huhy2.com
ServerAlias www.huhy2.com
DocumentRoot /var/www/huhy2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/huhy2.com_error.log
CustomLog ${APACHE_LOG_DIR}/huhy2.com_access.log combined
</VirtualHost>
开启监听端口;这样才可以让IP指定端口访问指定的虚拟主机
vim /etc/apache2/ports.conf
添加以下内容
Listen 81
Listen 82
使用a2ensite命令启用这些虚拟主机配置。
a2ensite huhy1.com.conf
a2ensite huhy2.com.conf
禁用默认的虚拟主机配置(可选)此处不禁用
a2dissite 000-default.conf
重新加载apache2服务
systemctl reload apache2
检测配置文件是否正确
root@huhy:~# apache2ctl -S
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
#此警告只需要配置ServerName即可vim /etc/apache2/apache2.conf
VirtualHost configuration:
*:81 huhy1.com (/etc/apache2/sites-enabled/huhy1.com.conf:1)
*:82 huhy2.com (/etc/apache2/sites-enabled/huhy2.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
界面访问
huhy1主机;IP:81
huhy2主机;IP:82
配置代理
节点 | IP |
---|---|
huhy | 192.168.200.190 |
代理节点 | 192.168.200.195 |
正向代理
正向代理是一个客户端与互联网之间的中介,它代表客户端向服务器发出请求。
工作原理:
- 客户端配置:客户端配置其代理设置,将请求发送到代理服务器。
- 请求转发:代理服务器接收客户端的请求,并代表客户端将请求转发到目标服务器。
- 响应返回:目标服务器将响应发送回代理服务器,代理服务器再将响应返回给客户端。
主要用途:
- 隐匿客户端身份:隐藏客户端的真实 IP 地址。
- 访问控制:允许或阻止特定的客户端访问特定资源。
- 缓存:缓存常用的网页内容,提高访问速度和减少带宽消耗。
- 绕过地理限制:访问受地域限制的网站或服务。
- 内容过滤:阻止访问特定网站或内容。
举例:
你在公司内部网络中访问互联网,公司可能会使用正向代理来控制和监视员工的网络活动。使用VPN服务,VPN服务器充当正向代理,代表你访问互联网。
正向代理:客户端配置的代理,主要用于隐匿客户端身份、内容过滤、缓存等功能。
启用正向代理模块
a2enmod proxy
a2enmod proxy_http
systemctl reload apache2
编辑 Apache 的配置文件, /etc/apache2/sites-available/000-default.conf,添加以下内容
vim /etc/apache2/sites-available/000-default.conf
<VirtualHost *:8080>
ServerName proxy.example.com
# 开启代理功能
ProxyRequests On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# 代理转发到目标服务器
ProxyPass / http://192.168.200.190/
ProxyPassReverse / http://192.168.200.190/
</VirtualHost>
配置监听端口
vim /etc/apache2/ports.conf
Listen 8080
重启 Apache
systemctl restart apache2
使用 curl 命令中通过代理服务器访问外部资源;可以查看到190网段的界面
root@huhy:~# curl -x http://localhost:8080 http://192.168.200.190
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello WorLd</title>
</head>
<body>
<h1>huhy</h1>
<p>简单的web界面</p>
</body>
</html>
反向代理
反向代理是一个服务器端的中介,它代表服务器接收客户端的请求,并将请求转发到实际的后端服务器。
工作原理:
- 客户端请求:客户端向反向代理发送请求,通常是通过一个域名。
- 请求转发:反向代理接收到请求后,将请求转发到后端的一个或多个实际服务器。
- 响应返回:后端服务器将响应发送回反向代理,反向代理再将响应返回给客户端。
主要用途:
- 负载均衡:分配请求到多个后端服务器,以平衡负载和提高性能。
- 安全性:隐藏和保护后端服务器的真实 IP 地址,增加安全性。
- 缓存:缓存常用内容,减少对后端服务器的请求,提升响应速度。
- SSL 终端:处理 SSL/TLS 加密解密操作,提高后端服务器的处理效率。
- 应用层防火墙:提供额外的安全层,对请求进行过滤和检查。
举例:
大型网站使用反向代理来分发流量到多个应用服务器,以确保高可用性和可伸缩性,你访问一个网站时,实际上可能由多个后端服务器处理请求,但你只看到一个统一的域名和 IP 地址,这就是反向代理的作用
反向代理:服务器配置的代理,主要用于负载均衡、安全保护、缓存等功能
启用反向代理模块
a2enmod proxy
a2enmod proxy_http
systemctl reload apache2
编辑 Apache 的配置文件,/etc/apache2/sites-available/reverse-proxy.conf,添加以下内容
vim /etc/apache2/sites-available/reverse-proxy.conf
<VirtualHost *:81>
ServerName localhost
# 保留客户端请求中的原始主机头
ProxyPreserveHost On
# 设置反向代理,将请求转发到实际的 Web 服务器
ProxyPass / http://192.168.200.190/
ProxyPassReverse / http://192.168.200.190/
# 错误日志和访问日志的位置
ErrorLog ${APACHE_LOG_DIR}/reverse-proxy_error.log
CustomLog ${APACHE_LOG_DIR}/reverse-proxy_access.log combined
</VirtualHost>
启用虚拟主机配置
a2ensite reverse-proxy.conf
systemctl restart apache2
测试;界面访问(IP:81)反向代理服务器,返回web服务器页面内容