IIS8反向代理实现80端口访问多个.NetCore程序

时间:2024-01-27 08:09:59

背景:

      目前公司仅有一台域名备案并开通80端口的服务器,而有多个部署在此服务器的.NetCore程序需要与微信进行独立的集成(同一个认证微信服务号),因此需要实现非80端口反向代理外网80端口,例如通过a.jiasheyuming.com和b.jiaasheyuming.com即可访问当前服务器的8028和8029端口上部署的程序。

 

解决方案:

      由于程序是部署在Windows服务器的IIs8.5版本,开发环境为.NetCore2.1,因此考虑使用IIS进行反向代理,步骤如下:

(1)在服务器IIS网站中新建一个站点,端口设置为80,系统会自动在站点目录下生成web.config文件

(2)安装IIS插件两款:

ARR:https://www.iis.net/downloads/microsoft/application-request-routing?k26099222  ,用于反向代理
URL-ReWriter:https://www.iis.net/downloads/microsoft/url-rewrite  ,用于重写Url,实现二级域名反向代理

安装后可在IIS中看到:

 

(3)对ARR进行设置,启用反向代理:

 

 

(4)选中80站点,进入Url Rewrite配置,在右侧点击“添加规则”

 

 

 

 (5)确定后,可以看到新增了入站规则和出站规则:

 

(6)如上图箭头所示,还需增加服务器变量,以处理Url重写带来的一些请求头问题:

 

 如HTTP_ACCEPT_ENCODING就是解决重写Url后转发时Gzip压缩带来的问题。

 (6)注意,反向代理涉及到较多HTTP协议规则,有时会由于目标站点的设置导致500失败,往往是需要通过增加专门的规则来解决,例如增加特殊的Http头或设置,具体要看发生的错误。开启IIS完整错误提示,以便更好的了解原因:

 

 

 

(7)找到80站点目录下的web.config文件,编辑

 <rewrite>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" stopProcessing="false">
                    <match filterByTags="A, Form, Img" pattern="^http(s)?://weixin.XXX:8028/(.*)" />
                    <action type="Rewrite" value="http{R:1}://weixin.XXX.cn/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <serverVariables>
                       <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://weixin.XXX.cn:8028/{R:1}" />
                </rule>
            </rules>
        </rewrite>
     <urlCompression dynamicCompressionBeforeCache="false" />

其中rewrite、rules等规则是在完成IIS配置后自动增加的,serverVariables、urlCompression节需要我们手工在web.config中增加进去,注意位置。

(8)保存后,访问weixin.XXX.cn即可访问到8028端口站点,实现无端口体验

(9)8028端口站点与微信进行集成,亲测授权API和JSAPI有效。