依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

八字排盘系统济宁依星网络
查看: 10|回复: 0

如何在Windows服务器上通过IIS的ARR和URL Rewrite模块,实现80端口到8080端口的反向代理

[复制链接] 主动推送

2万

主题

2万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
24440
发表于 昨天 19:46 | 显示全部楼层 |阅读模式
如何在Windows服务器上通过IIS的ARR和URL Rewrite模块,实现80端口到8080端口的反向代理
没问题,我们详细展开如何在Windows服务器上通过IIS的ARR和URL Rewrite模块,实现80端口到8080端口的反向代理。

这个方案的核心是让IIS作为“中转站”:它监听公网的80端口,收到请求后,将请求原封不动地“转发”给监听在`localhost:8080`的后端服务,然后再把后端的响应返回给用户。整个过程对用户是完全透明的。

以下是详细的配置步骤:

### 步骤一:下载并安装IIS扩展模块

反向代理功能需要两个关键的IIS扩展模块,需要确保它们都已正确安装。

1.  **安装 URL Rewrite 模块**:
    *   下载地址:[https://www.iis.net/downloads/microsoft/url-rewrite](https://www.iis.net/downloads/microsoft/url-rewrite)
    *   下载并安装适合你系统版本的安装包,安装过程使用默认设置即可。

2.  **安装 Application Request Routing (ARR) 模块**:
    *   下载地址:搜索 "Microsoft Application Request Routing 3.0 download",通常可在微软IIS官网的扩展页面找到。
    *   **重要**:安装前请确保**URL Rewrite模块**已安装,否则ARR安装程序可能会报错或无法正常工作。
    *   同样,下载适合你系统架构的版本(通常为`requestRouter_3.0_amd64.msi`)并进行安装。

requestRouter_amd64.msi下载地址:链接: https://pan.baidu.com/s/1DGgYTYHOAbFi51FdeiU1Bg 提取码: a5sb
> 小技巧:如果不想分别下载,可以安装微软的 **Web Platform Installer**,在里面搜索并一键安装`ARR 3.0`和`URL Rewrite`,会更省心一些。

### 步骤二:启用ARR代理功能

这是**最关键的一步**,很多配置失败都是因为遗漏了它。

1.  打开 **IIS管理器** (可以按 `Win + R`,输入 `inetmgr` 后回车)。
2.  在左侧“连接”窗格中,点击最顶层的**服务器节点**(这是全局设置,不是某个具体网站)。
3.  在中间的功能视图中,找到并双击 **Application Request Routing Cache**。
4.  在右侧的“操作”窗格中,点击 **Server Proxy Settings...**。
5.  在弹出的窗口中,**勾选 `Enable proxy` 复选框**,然后点击右上角的“应用”。
6.  **重启IIS**:为使配置生效,可以重启IIS服务(在IIS管理器中点击右侧“操作”下的“重新启动”),或运行 `iisreset` 命令。

### 步骤三:为80端口的网站配置URL重写规则

启用代理后,需要在你的网站(监听80端口)上配置转发规则。

1.  在IIS管理器左侧“连接”窗格中,展开服务器节点下的“网站”,选择你绑定在**80端口上的那个网站**。
2.  在中间功能视图中,双击 **URL Rewrite**。
3.  在右侧“操作”窗格中,点击 **Add Rule(s)...**。
4.  在“入站规则”类别中,选择 **Blank rule** (空白规则),点击“确定”。
5.  在新建的规则编辑窗口中,按以下内容进行配置:
    *   **名称**: 输入一个可识别的名称,例如 `Proxy-to-8080`。
    *   **模式**: 在“匹配URL”部分,将“使用”下拉菜单选择为 **正则表达式**,然后在“模式”文本框中输入 `(.*)`。这个模式的意思是匹配所有请求的URL。
    *   **条件**: 在“条件”部分,点击“添加”,弹出“添加条件”对话框:
        *   **条件输入**: 输入 `{HTTP_HOST}`
        *   **检查输入字符串**: 选择 **匹配模式**
        *   **模式**: 输入 `^www\.net188\.net$`(请根据你的实际域名修改)
        *   这一步是为了确保只有访问你的特定域名的请求才被转发,避免将服务器上其他网站的请求也错误地转发出去。
    *   **操作**: 在“操作”部分:
        *   **操作类型**: 选择 **Rewrite**(重写)。
        *   **重写URL**: 输入 `http://127.0.0.1:8080/{R:1}`。`{R:1}`代表你匹配到的URL路径,会将用户请求的完整路径附加到后端服务的URL后面。
        *   **附加查询字符串**: 勾选此选项。
6.  配置完成后,点击右侧的“应用”保存规则。

---

### 常见问题与高级配置

完成上述步骤后,反向代理就应该正常工作了。下面是一些进阶知识和可能遇到的问题,供参考:

*   **保留原始Host头**:为了让后端服务知道用户原始请求的域名,通常需要在URL重写规则中添加一个**服务器变量** `HTTP_X_ORIGINAL_HOST` 或修改 `HTTP_HOST`。这需要在规则中添加额外的条件来设置。
*   **WebSocket代理**:如果你的后端服务使用了WebSocket(比如一些实时通信应用),标准的HTTP代理无法处理。ARR支持WebSocket,但可能需要更精细的重写规则,或安装专门的WebSocket扩展。
*   **HTTPS转发**:如果你未来计划使用HTTPS,可以让IIS监听443端口并安装SSL证书,而ARR规则依然转发到 `http://127.0.0.1:8080`。这样IIS负责处理复杂的HTTPS加密,后端服务则维持简单的HTTP通信,减轻其负担。
*   **安全加固**:启用代理后,建议将监听8080端口的后端服务绑定地址设为 `127.0.0.1`,阻止外部直接访问。同时务必确保服务器的防火墙只放行80/443端口,不要开放8080端口。

### 故障排查
如果配置后无法访问,可以按以下步骤检查:

*   **检查规则**:返回 `URL Rewrite` 模块,确认新规则是否在列表中且处于“启用”状态。
*   **验证后端**:直接在服务器上用浏览器访问 `http://127.0.0.1:8080`,确保后端服务本身运行正常。
*   **查看失败请求跟踪**:这是一个强大的诊断工具,可以帮你捕获请求并分析其在IIS内部的详细处理流程,从而精确定位问题所在。



上面配置之后,前台页面可能已经打开了,但是后台的一些登录或会员登录涉及到SESSION的地方,根据上面的配置,web.config内容应该如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.     <system.webServer>
  4.         <rewrite>
  5.             <rules>
  6.                 <rule name="Proxy-to-8080">
  7.                     <match url="(.*)" />
  8.                     <conditions>
  9.                         <add input="{HTTP_HOST}" pattern="^www\.net188\.net[        DISCUZ_CODE_0        ]quot; />
  10.                     </conditions>
  11.                     <action type="Rewrite" url="http://127.0.0.1:8080/{R:1}" />
  12.                 </rule>
  13.             </rules>
  14.         </rewrite>
  15.     </system.webServer>
  16. </configuration>
复制代码


更新如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.     <system.webServer>
  4.         <rewrite>
  5.             <rules>
  6.                 <rule name="Proxy-to-8080" stopProcessing="true">
  7.                     <match url="(.*)" />
  8.                     <conditions>
  9.                         <add input="{HTTP_HOST}" pattern="^www\.net188\.net[        DISCUZ_CODE_1        ]quot; />
  10.                     </conditions>
  11.                     <action type="Rewrite" url="http://127.0.0.1:8080/{R:1}" />
  12.                     <serverVariables>
  13.                         <set name="HTTP_X_FORWARDED_FOR" value="{REMOTE_ADDR}" />
  14.                         <set name="HTTP_X_FORWARDED_PROTO" value="http" />
  15.                         <set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
  16.                     </serverVariables>
  17.                 </rule>
  18.             </rules>
  19.         </rewrite>
  20.         <security>
  21.             <requestFiltering>
  22.                 <requestLimits maxAllowedContentLength="52428800" />
  23.             </requestFiltering>
  24.         </security>
  25.     </system.webServer>
  26. </configuration>
复制代码


相比你原来的配置,改了 3 处:

stopProcessing="true" — 匹配后不再执行后续规则,避免干扰
<serverVariables> — 转发真实客户端 IP 和 Host,否则后端拿到的全是 127.0.0.1,登录限速也会误判
<requestLimits> — 放开请求体大小限制,防止 POST 被 IIS 默认限制拦截
替换 web.config 之前,还必须在 IIS 里做两步操作:

步骤 A:注册 Server Variables

IIS 管理器 → 选中你的网站 → 双击 URL Rewrite → 右侧点 View Server Variables → 依次添加:

HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED_PROTO
HTTP_X_FORWARDED_HOST
不加这一步,网站会直接报 500 错误。

步骤 B:开启 Preserve Host Header

IIS 管理器 → 点击最顶层服务器节点 → 双击 Application Request Routing Cache → 右侧 Server Proxy Settings → 勾选 Preserve client host header through to the backend server → 点应用。

这一步是登录失败的最可能原因——不勾选的话,后端收到的 Host 头是 127.0.0.1:8080,Session Cookie 的 domain 对不上浏览器访问的 bazi.net188.net,导致 Cookie 写不进去,登录永远无效。





如果上面步骤中的  Preserve client host header through to the backend server  没有找到,可以用如下方法:

ARR 版本界面上确实没有 "Preserve client host header" 选项。直接用命令行设置:

**以管理员身份打开 CMD**,执行以下两条命令:

  1. C:\Windows\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
复制代码

  1. iisreset
复制代码



执行完后可以验证是否生效:

  1. C:\Windows\system32\inetsrv\appcmd.exe list config -section:system.webServer/proxy
复制代码


输出中应该能看到 `preserveHostHeader="true"`。

---

另外,还有一个需要注意的地方:

**"Reverse rewrite host in response headers" ☑** — 这个目前是勾选的,**先保持不动**。如果设置 `preserveHostHeader` 后登录还有问题,再回来**取消勾选**这个试试,因为两者可能会冲突——一个说保留原始 Host,另一个又说要改写响应里的 Host。

设完 `preserveHostHeader` + `iisreset` 后,先去浏览器试一下登录,把结果告诉我。



相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2026-4-18 00:22

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表