LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

在Nginx中反向代理访问内网某个网址时,如何将Nginx的当前访问地址传递给这个内网地址?

admin
2025年12月10日 17:53 本文热度 12
:在Nginx中反向代理访问内网某个网址时,如何将Nginx的当前访问地址传递给这个内网地址?

我在Nginx中反向代理访问内网某个网址时,如何将Nginx的当前访问地址传递给这个内网地址,例如用户访问:http://3267.oa22.cn/index.asp,反向代理到内网的http://192.168.0.32/index.asp,如何让192.168.0.32这个页面index.asp能够正确获取到当前的访问页面是来自于:http://3267.oa22.cn/index.asp?​


在Nginx反向代理中,要让内网应用获取原始访问地址,需要通过HTTP头部传递信息。以下是具体解决方案:

1. 修改Nginx配置

在反向代理配置中添加自定义HTTP头,传递原始访问信息:

nginx
server {
    listen 80;
    server_name 3267.oa22.cn;

    location / {
        proxy_pass http://192.168.0.32;
        
        # 关键配置:传递原始主机名、协议和完整URL
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Original-Request "$scheme://$host$request_uri";
    }
}

2. 后端应用修改(ASP示例)

在内网的ASP页面中,读取Nginx传递的头部信息:

asp
<%
Dim originalUrl
' 获取完整的原始URL
originalUrl = Request.ServerVariables("HTTP_X_ORIGINAL_REQUEST")

' 如果直接获取失败,尝试组合其他头部
If originalUrl = "" Then
    Dim protocol, host
    protocol = Request.ServerVariables("HTTP_X_FORWARDED_PROTO")
    host = Request.ServerVariables("HTTP_X_FORWARDED_HOST")
    originalUrl = protocol & "://" & host & Request.ServerVariables("PATH_INFO")
    
    ' 带查询字符串的情况
    If Request.ServerVariables("QUERY_STRING") <> "" Then
        originalUrl = originalUrl & "?" & Request.ServerVariables("QUERY_STRING")
    End If
End If

Response.Write "原始访问地址:" & originalUrl
%>

关键点说明:

  1. X-Original-Request头

    • 直接携带完整原始URL:http://3267.oa22.cn/index.asp
    • ASP中通过Request.ServerVariables("HTTP_X_ORIGINAL_REQUEST")获取
  2. 备用方案(当无法直接获取完整URL时)

    • 组合以下头部:
      • X-Forwarded-Proto → 协议(http/https)
      • X-Forwarded-Host → 域名(3267.oa22.cn)
      • 结合ASP的PATH_INFOQUERY_STRING重建URL
  3. Nginx配置注意事项

    • 确保保留原始Host头:proxy_set_header Host $host;
    • 传递客户端真实IP:X-Forwarded-For
    • 如需HTTPS支持,添加proxy_set_header X-Forwarded-Proto https;

验证步骤:

  1. 在ASP页面输出所有服务器变量:
    asp
    <% Response.Write "<pre>" & Server.HTMLEncode(Request.ServerVariables) & "</pre>" %>
  2. 检查是否存在以下头信息:
    • HTTP_X_ORIGINAL_REQUEST
    • HTTP_X_FORWARDED_HOST
    • HTTP_X_FORWARDED_PROTO

高级场景(URL重写)

如果后端应用需要生成基于原始URL的链接,建议在ASP中使用相对路径,或通过获取的原始HOST动态生成绝对路径。

最终效果:当用户访问 http://3267.oa22.cn/index.asp 时,内网服务器可通过HTTP头获取该原始URL,并用于页面逻辑处理或链接生成。


该文章在 2025/12/10 17:53:46 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved