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

nginx教程 > 编程 (78) 2025-10-23 11:26:12

场景描述

  • 域名 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找到服务,不提供域名服务

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

 


相关文章
场景描述域名 blog.demo.com 为第一层(公网代理)域名 blog.proxy.com 为第二层(公网转内网代理)blog.proxy.com 实现与
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...
打开任务管理器发现一大堆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 为第三方支持的分
nginx代理Tomcat带路径的项目location / {                 proxy_pass http://localhost:8080/v1/;          ...
nginx 跨域头统一配置 location / { add_header Access-Control-Allow-Origin *; add_header Acces...
解决centos系统使用yum安装nginx启动时报错[::]:80 failed (97: Address family not supported by protocol)一般默认的使用yu...
1.新增nginx屏蔽配置文件文件暂时为/etc/nginx/conf.d/deny_ua.config说明:文件名deny_ua.config,后缀为.config非.conf,原因是.con...
Nginx 配置robots.txt禁止收录,在对应的server里面添加以下配置 location =/robots.txt { default_type t