nginx 多层/嵌套代理Host 变空文件下载解决

编程教程 > nginx (8) 2025-10-10 16:51:50

场景描述

  • 域名 blog.demo.com 为第一层(公网代理)
  • 域名 blog.proxy.com 为第二层(公网转内网代理)
  • blog.proxy.com 实现与服务的proxy_pass代理

第一层  blog.demo.com nginx配置

server {
    listen       443 ssl;
    server_name  blog.demo.com;
    #ssl
    ssl_certificate conf.d/ssl/*.demo.com.crt;
    ssl_certificate_key conf.d/ssl/*.demo.com.key;

    location / {
                # 传递原始请求头(确保第二层能获取完整URL信息)
                proxy_set_header Host $host; # 传递客户端访问的域名
				proxy_set_header X-Original-URI $request_uri;  # 传递完整URI(含参数)
                proxy_set_header        X-Real-IP       $remote_addr; # # 传递IP
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; # 传递IP
                proxy_redirect http:// https://;
				
				# 关键:proxy_pass末尾不带/,确保完整透传URL
                proxy_pass  https://blog.proxy.com:1600;
    }
}

 

第二层  blog.proxy.com 配置

server {
    listen 1600 ssl;
    server_name blog.proxy.com;
    gzip on;
    gzip_http_version 1.1;
    gzip_static on;
    gzip_min_length 1;
    gzip_comp_level 4;
    gzip_vary on;
    gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    
   #ssl on;
   #从腾讯云获取到的第一个文件的全路径
   ssl_certificate /etc/nginx/conf.d/keys/*.proxy.com/fullchain.cer;
   #从腾讯云获取到的第二个文件的全路径
   ssl_certificate_key /etc/nginx/conf.d/keys/*.proxy.com/*.iton.top.key;

   location / {
        # 传递原始请求头(确保应用层能获取对应头部数据)
        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协议
        proxy_set_header  X-Forwarded-Proto https;
        proxy_redirect http:// https://;
        proxy_http_version 1.1;
        proxy_pass http://172.16.1.61:8999;
    }
    
}

此时访问 : https://blog.demo.com 会下载一个空文件

问题解决

修改第二层的server_name,修改为和第一层传递的Host一致

修改后如下:

server {
    listen 1600 ssl;
    server_name blog.demo.com;
    gzip on;
    gzip_http_version 1.1;
    gzip_static on;
    gzip_min_length 1;
    gzip_comp_level 4;
    gzip_vary on;
    gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    
   #ssl on;
   #从腾讯云获取到的第一个文件的全路径
   ssl_certificate /etc/nginx/conf.d/keys/*.proxy.com/fullchain.cer;
   #从腾讯云获取到的第二个文件的全路径
   ssl_certificate_key /etc/nginx/conf.d/keys/*.proxy.com/*.iton.top.key;

   location / {
        # 传递原始请求头(确保应用层能获取对应头部数据)
        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协议
        proxy_set_header  X-Forwarded-Proto https;
        proxy_redirect http:// https://;
        proxy_http_version 1.1;
        proxy_pass http://172.16.1.61:8999;
    }
    
}

修改重点:

server_name blog.demo.com;  # 必须与第一层传来的 Host 一致

blog.proxy.com 在多层嵌套中,只起到IP找到服务,不提供域名服务

此时修改后即可正常访问。

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
场景描述域名 blog.demo.com 为第一层(公网代理)域名 blog.proxy.com 为第二层(公网转内网代理)blog.proxy.com 实现与
Nginx 嵌套/多级/多层nginx 代理下真实IP传递。remote_addr代表客户端的IP,但它的值不是由客户端提供的
Nginx 安装Nginx 安装参考:Linux yum nginx安装和nginx入门配置方法-XQLEE'BlogAlpine Linux nginx安装配
Nginx 配置日志nginx默认的日志配置在nginx.conf配置文件。
nginx配置文件检查命令正确命令:nginx -t -c /etc/nginx/nginx.conf错误命令:nginx -t -c /etc/nginx/conf.d/example.con...
Linux(centos) nginx安装和nginx入门配置方法1.切换至root用户$su - 2.执行在线安装命令#yum install nginx -y 如果上面提示以下内容[root...
alpineLinux安装nginx更新软件apkupdate安装nginxapkaddnginx查看nginx版本nginx-vnginx启停启动停止servicenginxstop重启ser...
nginx开启gzip压缩配置配置参考:server{listen443ssl;server_namet.example.com;#charsetkoi8-r;#access_log/var/l...
需求将静态资源如css/js/图片缓存到不用每次都到后端服务去拿取,减少性能消耗。 配置nginx缓存配置缓存文件存放信息在nginx配置文件,httpd内部配
打开任务管理器发现一大堆nginx进程
最终看起来像这样 nginx (host,ssl) -&gtl; harbor-nginx (non-ssl) -&gtl; harbor。说明首先服务上安装有 nginx,且
最近网站被恶意访问了,了解了一些基础防护手段,nginx屏蔽ua访问 编写文件agent_deany.conf #使用方法 #创建目录 /etc/nginx/conf.d/deny...
最近博客升级总是nginx原生的502页面,感觉有些不友好,特此研究了下502页面的配置nginx 502配置502页面核心配置 #502 page error_...
nginx常规使用时作为http协议的反向代理,这里要讲的是非http的Mysql端口代理,理论支持其他协议nginx.conf配置如下:user nginx; worker_process...
Nginx的upstream支持5种 分配方式,其中 轮询、权重、IP散列这三种为Nginx原生支持的分配方式,fair 和 url_hash 为第三方支持的分