Nginx可作为HTTP/HTTPS依赖源的缓存代理,无需正向代理或CONNECT模块;核心配置包括proxy_cache_path、resolver、proxy_pass透传及SSL支持,适用于Maven、PyPI、npm等标准源站缓存。

Nginx 本身不是为正向代理设计的,尤其不原生支持 HTTPS 正向代理所需的 CONNECT 方法。若目标是“缓冲网关加速内网服务器下载依赖”,核心诉求其实是缓存 + 出口统一 + 域名解析可控,而非通用浏览器代理。这种场景下,Nginx 可以安全、高效地作为 HTTP/HTTPS 依赖源(如 Maven、npm、pip、apt、Docker registry)的缓存代理使用,无需启用 CONNECT,也无需编译第三方模块。
适用前提:只代理 HTTP/HTTPS 下载请求(非浏览器直连)
内网服务器通过 curl、wget、apt-get、pip install --index-url 等命令拉取依赖时,本质是发起标准 HTTP GET 请求(含 Host 头),Nginx 完全能处理。只要目标源站支持标准缓存头(如 ETag、Last-Modified、Cache-Control),Nginx 就能有效缓存。
- 典型可缓存源:Maven Central(
https://repo1.maven.org)、PyPI(https://pypi.org)、npm registry(https://registry.npmjs.org)、Ubuntu archive(http://archive.ubuntu.com) - 不适用场景:需要 WebSocket、FTP、SNI 多域名共用 IP 的 HTTPS 隧道、或需客户端认证(如私有 Nexus/Bintray)——这些应交由 Squid 或 Artifactory
关键配置:启用 proxy_cache + resolver + SSL 透传
在 http 块中定义缓存区,再用 server 块接收内网请求并反向代理至上游源站:
- 添加缓存路径与策略:
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=dep_cache:100m max_size=20g inactive=7d use_temp_path=off; - 配置 DNS 解析器(必须!否则无法解析 maven.org 等域名):
resolver 114.114.114.114 valid=30s; - 定义 server 块(例如监听 8081):
server {<br> listen 8081;<br> location / {<br> proxy_cache dep_cache;<br> proxy_cache_valid 200 302 1h;<br> proxy_cache_valid 404 1m;<br> proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;<br> proxy_cache_lock on;<br> proxy_pass https://$host$request_uri;<br> proxy_set_header Host $host;<br> proxy_set_header X-Real-IP $remote_addr;<br> proxy_ssl_server_name on;<br> proxy_ssl_verify off; # 若上游证书可信但自签(如私有镜像站),可临时关闭校验<br> }<br>}
内网服务器使用方式(无需改浏览器设置)
直接在 shell 中设置环境变量,所有基于 libcurl 的工具自动走代理:
- HTTP 依赖(如 apt、yum):
export http_proxy="http://nginx-ip:8081"<br>export https_proxy="http://nginx-ip:8081"
- Maven:
在settings.xml中配置 mirror,<url>http://nginx-ip:8081</url> - npm:
npm config set registry http://nginx-ip:8081(注意:需确保 npm registry 支持 HTTP 重定向到 HTTPS,或直接用https://nginx-ip:8081并开启 SSL 终止)
验证与调优建议
检查缓存是否生效:
— 查看响应头是否有 X-Cache: HIT 或 MISS
— 检查 /var/cache/nginx/proxy_cache 目录是否有文件生成
— 用 curl -I http://nginx-ip:8081/... 对比首次与二次请求的 Age 和 X-Cache 字段
- 首次请求后,再次执行相同下载命令,观察耗时是否显著下降
- 若命中率低,检查上游是否返回了
Cache-Control: no-cache或动态 URL(带时间戳/随机参数)——这类需用proxy_cache_bypass+proxy_no_cache规则过滤 - 生产环境建议加白名单限制:
allow 192.168.0.0/16;<br>deny all;
放在 server 块中


















