NGINX反向代理与URL重写配置示例请求
NGINX URL重写与反向代理配置示例
以下是针对你需求的具体配置方案,核心是通过rewrite指令替换请求URL中的域名部分,同时将HTTPS请求转为HTTP转发到内部仓库:
基础HTTP请求处理配置
适用于包管理器发起HTTP请求的场景:
server { listen 80; # 填写你在hosts中映射的所有域名 server_name ubuntu.com mirrors.centos.org; # 重写规则:剥离原域名,拼接内部仓库地址 # 匹配HTTP/HTTPS开头的URL,替换域名部分为内部仓库地址+端口 rewrite ^https?://[^/]+(/.*)$ http://192.168.1.100:8080$1 break; # 反向代理到内部仓库(HTTP协议) proxy_pass http://192.168.1.100:8080; # 保留原请求的Host头,避免后端仓库校验域名 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
HTTPS请求处理配置
如果包管理器发起HTTPS请求,需要配置SSL证书(内部环境可使用自签名证书):
1. 生成自签名SSL证书(可选)
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/nginx/certs/internal-repo.key \ -out /etc/nginx/certs/internal-repo.crt
2. NGINX HTTPS配置
server { listen 443 ssl; server_name ubuntu.com mirrors.centos.org; # 配置SSL证书路径 ssl_certificate /etc/nginx/certs/internal-repo.crt; ssl_certificate_key /etc/nginx/certs/internal-repo.key; # 重写规则:将HTTPS请求转为HTTP转发到内部仓库 rewrite ^https?://[^/]+(/.*)$ http://192.168.1.100:8080$1 break; proxy_pass http://192.168.1.100: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; }
多域名映射不同仓库的优化方案
如果不同域名对应不同内部仓库,可以用map指令统一管理映射关系:
# 在http块中添加map配置 map $host $repo_backend { default http://default-repo:80; # 默认仓库 ubuntu.com http://ubuntu-repo:8080; # Ubuntu仓库 mirrors.centos.org http://centos-repo:8081; # CentOS仓库 } server { listen 80; listen 443 ssl; server_name ubuntu.com mirrors.centos.org; ssl_certificate /etc/nginx/certs/internal-repo.crt; ssl_certificate_key /etc/nginx/certs/internal-repo.key; # 动态匹配对应仓库的重写规则 rewrite ^https?://[^/]+(/.*)$ $repo_backend$1 break; proxy_pass $repo_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
配置说明
- 将示例中的
192.168.1.100:8080、ubuntu-repo:8080等替换为实际的内部仓库IP/域名和端口 rewrite指令中的break参数表示重写后停止后续规则,直接进入反向代理流程- 保留
Host头是为了兼容部分仓库对请求域名的校验
内容的提问来源于stack exchange,提问作者Davoud Teimouri
相关产品推荐
相关产品推荐

