FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
proxyblock指令在apache 2.4+中已被彻底移除,仅存在于15年以上未维护的旧版本;应改用mod_rewrite配合rewritecond匹配host头或uri并返回403,结合proxypass与require控制实现域名黑名单。

ProxyBlock 指令根本不存在于现代 Apache 版本中
Apache 2.4 及以后版本(包括当前主流的 2.4.52+ 和 2.5.x)**已完全移除 ProxyBlock 指令**。它只存在于非常老旧的 Apache 1.3 和早期 2.0(2.0.5x 之前)中,且从未被正式推荐用于生产环境。如果你在文档或旧博客里看到它,基本可以判定内容已过时超过 15 年。
替代方案:用 ProxyPass + Location 匹配 + deny/Require 阻断
真正可行的做法是结合反向代理配置与访问控制逻辑,在请求到达后端前拦截匹配的域名。关键不是“阻断域名”,而是“拒绝匹配 Host 头或 URL 中特定域名的代理请求”。
-
ProxyPass或ProxyPassMatch必须显式启用(ProxyRequests Off是默认且必须的) - 用
<location></location>或<locationmatch></locationmatch>捕获含目标域名的路径(如/http://bad.example.com/)或 Host 头(需配合mod_rewrite) - 在匹配块内使用
Require all denied(2.4+)或Deny from all(2.2,已弃用) - 注意:Apache 不解析
ProxyPass目标 URL 的域名部分做运行时黑名单——那是应用层逻辑,得靠规则前置拦截
实际可运行的黑名单配置示例
假设你用 mod_proxy_http 做正向代理网关(非推荐场景),或反向代理中用户能构造目标 URL(如 CGI 代理),以下配置可拦截对 malware.site 和 phishing.net 的请求:
<ifmodule mod_proxy.c>
ProxyRequests Off
ProxyVia On
<pre class="brush:php;toolbar:false;"># 拦截 Host 头为黑名单域名的请求(反向代理常见)
<VirtualHost *:80>
ServerName your-proxy.example.com
ProxyPreserveHost On
# 先用 mod_rewrite 提取 Host 并重写为可控路径
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(malware\.site|phishing\.net)$ [NC]
RewriteRule ^ - [F]
# 或更通用:拦截所有指向黑名单域名的 ProxyPass 请求(需开启 mod_rewrite)
# RewriteCond %{REQUEST_URI} ^/http://(malware\.site|phishing\.net)/ [NC]
# RewriteRule ^ - [F]
</VirtualHost>
说明:[F] 返回 403 Forbidden;mod_rewrite 是必需依赖;ProxyPreserveHost On 确保原始 Host 可被 RewriteCond 捕获。
为什么不用 ProxyBlock 的真实代价
强行回退到 Apache 2.0.48 编译并启用 ProxyBlock,会带来明确风险:
- 无 TLS 1.2+ 支持,无法满足现代 HTTPS 要求
-
mod_ssl存在已知缓冲区溢出漏洞(CVE-2002-0067 等) - 不兼容 systemd、SELinux 默认策略,启动即失败
- 所有后续安全补丁、HTTP/2、event MPM 等特性全部丢失
真正的黑名单逻辑应该下沉到 WAF(如 ModSecurity 规则)、DNS 层(dnsmasq 黑洞)或应用网关(Traefik 的 middleware),而不是靠 Apache 自身的过时指令硬扛。










