apache2
- 安装使用
- 配置web访问
- 配置虚拟主机
- 配置代理
- 正向代理
- 反向代理
官网
互联网上排名第一的 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服务器页面内容