proxypass本身不提供认证拦截,需结合mod_auth_basic、mod_authnz_ldap或oidc网关实现;basic认证最轻量,require valid-user须置于proxypass之前;ldap和oidc支持企业级统一认证与细粒度授权。
apache 的 proxypass 本身不提供认证拦截能力,它只负责路径转发。要实现安全认证拦截,必须结合 apache 的访问控制模块(如 mod_auth_basic、mod_authnz_ldap)或外部认证服务(如 authelia、keycloak),在代理路径上施加认证层。
用 Basic 认证做前置拦截
这是最轻量、最直接的方式:未通过用户名密码验证的请求,根本不会触发 ProxyPass 转发。
- 确保已启用
mod_auth_basic和mod_authn_file(用于 .htpasswd) - 在
<location></location>块中配置认证,与ProxyPass同级或嵌套 - 示例配置:
<location><br> AuthType Basic<br> AuthName "Restricted Area"<br> AuthUserFile /etc/apache2/.htpasswd<br> Require valid-user<br> ProxyPass http://10.0.2.10:8080/admin<br> ProxyPassReverse http://10.0.2.10:8080/admin<br></location>
注意:Require valid-user 必须写在 ProxyPass 之前,否则认证逻辑不生效。
对接 LDAP 或企业目录做统一身份校验
适用于已有 Active Directory 或 OpenLDAP 的环境,可按组织单元(OU)或组(group)精细放行。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 启用
mod_authnz_ldap - 用
AuthLDAPURL指定查询地址,例如:ldap://dc.example.com/DC=example,DC=com?uid?sub?(objectClass=person) - 用
Require ldap-group或Require ldap-attribute控制权限 - 示例片段:
AuthType ldap<br> AuthName "Corporate Login"<br> AuthLDAPURL "ldap://ldap.example.com/dc=example,dc=com?uid?sub?(objectClass=posixAccount)"<br> AuthLDAPBindDN "cn=admin,dc=example,dc=com"<br> AuthLDAPBindPassword "secret"<br> Require ldap-group cn=devops,ou=groups,dc=example,dc=com
配合 OIDC 认证服务做单点登录(SSO)
Apache 不原生支持 OAuth2/OIDC,但可通过 mod_auth_openidc 模块或反向代理到 Authelia 等网关实现。
- 用户首次访问受保护路径(如
/api/private),Apache 重定向至 IDP 的/authorize端点 - 认证成功后,回调携带
code,由中间服务交换id_token并设置可信会话 Cookie - 后续请求带该 Cookie,Apache 验证有效性后才放行并透传用户信息(如
X-Forwarded-User) - 关键配置项包括:
OIDCProviderMetadataURL、OIDCClientID、OIDCRedirectURI
双因子组合控制:IP 白名单 + 用户认证
对高敏感接口(如运维后台),建议叠加网络层和身份层双重约束。
- 使用
Require ip限定仅允许办公网段访问 - 用
Satisfy all强制同时满足 IP 和用户认证 - 配置示例:
<location><br> Require ip 192.168.50.0/24 10.10.0.0/16<br> AuthType Basic<br> AuthName "Backup Console"<br> AuthUserFile /etc/apache2/.htpasswd-backup<br> Require valid-user<br> Satisfy all<br> ProxyPass http://10.0.3.20:9000/<br> ProxyPassReverse http://10.0.3.20:9000/<br></location>










