如何配置 Apache 反向代理服务器 ?

将 Apache 配置为反向代理意味着将 Apache 设置为侦听和引导 web 流量到后端服务器或服务。这有助于管理和平衡服务器上的负载,提高安全性,并使您的 web 服务更高效。您还可以将其设置为监听标准 HTTP 和 HTTPS 端口上的请求,并将其重定向到运行在不同端口上的后端服务。

案例场景

假设您在服务器上安装了 Apache,任何人都可以从 internet 访问该服务器。Apache 正在监听常规 HTTP 和 HTTPS 端口上的流量。此外你还运行了一些其它应用程序:

  • 一个应用程序运行在与 Apache 相同的服务器上,但使用不同的端口,比如 3000。
  • 其他应用程序在同一网络内的不同服务器上运行,但该服务器不能从 internet 访问。

Step 1: Setup Apache Proxy Module

Redhat-based systems

编辑配置文件 /etc/httpd/conf.modules.d/00-proxy.conf,注释掉以下条目。

复制代码
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Debian-based systems

使用以下命令启用 Apache 的 Proxy 模块

复制代码
sudo a2enmod proxy proxy_http

启用模块后,您需要重新启动 Apache 服务以立即应用更改。

Step 2: Configure Apache Virtual Host

为了演示,我们创建几个 Apache 虚拟主机,如下所示。

(1) Reverse Proxy to Local Application

将发送到 www.yourdomain.com 的所有请求转发到端口 3000 上本地运行的后端应用程序。

apacheconf 复制代码
<VirtualHost *:80>
	ServerName www.yourdomain.com

	ProxyPreserveHost On

	# Reverse proxy for the application running on port 3000 on the same server
	ProxyPass / http://localhost:3000/
	ProxyPassReverse / http://localhost:3000/

	# Change log as per server
	# ErrorLog ${APACHE_LOG_DIR}/error.log
	# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

(2) Reverse Proxy to Local with Sub URL

将特定的子目录 URL 转发到后端应用程序。例如,将发送到 www.yourdomain.com/api 的所有请求转发到在端口 3000 上本地运行的后端应用程序。

ADVERTISEMENT

apacheconf 复制代码
<VirtualHost *:80>
	ServerName www.yourdomain.com

	ProxyPreserveHost On

	# Reverse proxy for the application running on port 3000 on the same server
	ProxyPass /api http://localhost:3000/
	ProxyPassReverse /api http://localhost:3000/

	# Change log as per server
	# ErrorLog ${APACHE_LOG_DIR}/error.log
	# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

(3) Reverse Proxy to Backend Host Application

将发送到 www.yourdomain.com 的所有请求转发到端口 3000 上运行在不同服务器 (IP 192.168.1.100) 上的后端应用程序。

apacheconf 复制代码
<VirtualHost *:80>
	ServerName www.yourdomain.com

	ProxyPreserveHost On

	# Reverse proxy for the application running on a different server
	ProxyPass / http://192.168.1.100:3000/
	ProxyPassReverse / http://192.168.1.100:3000/

	# Change log as per server
	# ErrorLog ${APACHE_LOG_DIR}/error.log
	# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

(4) Reverse Proxy to Multiple Backend Applications

将请求转发到基于 URL 路径的不同后端应用程序。例如,将发送到 www.yourdomain.com/app1 的请求转发到本机端口 3000 上的应用程序,将发送到 www.yourdomain.com/app2 的请求转发到其他服务器(IP 192.168.1.100)上的端口 5000 上的应用程序。

apacheconf 复制代码
<VirtualHost *:80>
	ServerName www.yourdomain.com

	ProxyPreserveHost On

	# Reverse proxy for different applications
	ProxyPass /app1 http://localhost:3000/
	ProxyPassReverse /app1 http://localhost:3000/

	ProxyPass /app2 http://192.168.1.100:5000/
	ProxyPassReverse /app2 http://192.168.1.100:5000/

	# Change log as per server
	# ErrorLog ${APACHE_LOG_DIR}/error.log
	# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

(5) Reverse Proxy to Application on Different Ports

将请求转发到同一服务器上的不同后端应用程序。例如,将发送到 www.yourdomain.com/app1 的请求转发到端口 3000 上的应用程序,将发送到 www.yourdomain.com/app2 的请求转发到端口 5000 的应用程序。

apacheconf 复制代码
<VirtualHost *:80>
	ServerName www.yourdomain.com

	ProxyPreserveHost On

	# Reverse proxy for different applications
	ProxyPass /app1 http://localhost:3000/
	ProxyPassReverse /app1 http://localhost:3000/

	ProxyPass /app2 http://localhost:5000/
	ProxyPassReverse /app2 http://localhost:5000/

	# Change log as per server
	# ErrorLog ${APACHE_LOG_DIR}/error.log
	# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Step 3: Restart Apache to Apply Changes

创建 Apache 虚拟主机后,需要重新启动 Apache 服务。

Redhat-based systems:

复制代码
sudo systemctl restart httpd

Debed-based systems:

复制代码
sudo systemctl restart apache2

我的开源项目

相关推荐
众链网络9 小时前
景区票务系统选型的技术尽调清单:从并发、数据到二次开发的 12 个必查项
apache·景区票务系统
AllData公司负责人2 天前
AllData数据中台物联网实时平台|集成 Apache StreamPipes,MQTT工业物联网数据实时预警实践案例
大数据·数据库·人工智能·物联网·apache·工业物联网·streampipes
白帽攻防录3 天前
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信
java·网络安全·tomcat·apache
筑梦之路3 天前
Kafka KRaft 模式 Kubernetes 部署手册(StatefulSet + apache/kafka 官方镜像)——筑梦之路
kafka·kubernetes·apache
网络豆19 天前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
网络豆19 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
网络豆19 天前
Apache HBase 鸿蒙 PC 适配全记录:用 Qt 原生客户端打通 REST 管理与数据读写
apache·hbase·harmonyos
无巧不成书021820 天前
Apache Tomcat 9 下载全指南(Windows,Linux,macOS):版本选型、国内镜像、SHA-512 与 PGP 完整性校验
windows·tomcat·apache
Dream-Y.ocean20 天前
鸿蒙平台 Apache Tomcat 管理控制台适配实战:基于 Electron 壳方案的真实 HTTP 服务器实现
tomcat·apache·harmonyos
betazhou20 天前
Apache seatunel常用配置参数解析说明
apache·seatunnel