如何将Apache.htaccess分流代理规则转换为Nginx配置
Nginx 等效分流反向代理配置实现
Nginx 不支持 Apache 的.htaccess 目录级配置语法,所有分流规则统一写在站点的server配置块内,无需额外的目录规则文件。
核心规则对应说明
完全匹配原Apache的分流逻辑:
- 监听80端口,匹配指定域名(请将示例中的
your.target.domain替换为实际域名) - 匹配
/api、/img前缀的所有请求,转发至本地8080端口服务 - 其余所有路径请求,转发至本地3000、3001端口服务(默认轮询负载均衡)
完整配置示例
配置文件路径一般为/etc/nginx/sites-available/下的对应站点文件,修改前请备份原有配置:
# 定义前端服务负载均衡组(3000、3001) upstream frontend_cluster { server 127.0.0.1:3000; server 127.0.0.1:3001; # 如需会话保持可取消下方注释 # ip_hash; } server { # 监听80端口 listen 80; # 替换为你的实际域名 server_name your.target.domain; # 匹配/api路径,优先转发至8080 location ^~ /api/ { proxy_pass http://127.0.0.1:8080; # 通用反向代理头配置,确保后端可获取真实请求信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 匹配/img路径,优先转发至8080 location ^~ /img/ { proxy_pass http://127.0.0.1:8080; # 复用上述代理头配置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 其余所有路径转发至前端负载均衡组 location / { proxy_pass http://frontend_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
生效校验与注意事项
- 配置修改完成后,先执行
nginx -t检查语法,无报错后执行nginx -s reload重载配置即可生效 - 配置中使用
^~修饰前缀匹配规则,是为了确保/api、/img路径的优先级最高,不会被其他正则匹配规则覆盖,请不要随意删除该修饰符 - 若8080端口服务不需要保留
/api、/img路径前缀,可在对应location的proxy_pass末尾加/,例如proxy_pass http://127.0.0.1:8080/;,此时请求/api/test会转发为http://127.0.0.1:8080/test,请根据后端服务路由规则调整 - 若不需要3000、3001的负载均衡,可直接将
location /内的proxy_pass改为http://127.0.0.1:3000,或按需调整upstream内的服务权重、负载策略
内容的提问来源于stack exchange,提问作者Sizzling Code
相关产品推荐
相关产品推荐

