将请求从 IIS7 重定向/重写到 Nginx(2 个不同的服务器)

将请求从 IIS7 重定向/重写到 Nginx(2 个不同的服务器)

语境:

我们在内部网络(可公开访问)上托管了带有 IIS7 的 Microsoft Server 2019,并具有专用 IP 1.2.3.4,根子域dept.company.com已链接到该 IP(由我的公司分配)。 我们有一个应用程序服务器,该服务器具有专用 IP,5.6.7.8托管在运行 Nginx 作为反向代理的外部服务器(云服务)上。

问题

我正在尝试将所有请求从dept.company.com/app-1应用程序服务器重定向到每个相应的应用程序。

这是 IIS 上的规则

<rule name="RewriteAppToNginx" stopProcessing="true">
  <match url="^app/(.*)" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="dept.company.com" />
  </conditions>
  <action type="Rewrite" url="http://5.6.7.8/{R:1}" />
</rule>

这是相应的 Nginx 服务器块,我在其中html放置了一个示例文件,只是为了检查它是否正确重定向。

server {
        listen 80;
        listen [::]:80;

        root /var/www/dept.company.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name dept.company.com;
        location / {
                try_files $uri $uri/ =404;
        }
}

使用这些设置,我可以进入“欢迎使用 nginx!”页面,但无法进入我放置示例 html 的特定服务器块。任何帮助都非常感谢!

答案1

这是 IIS 初学者经常犯的一个错误,默认preserveHostHeader情况下您没有注意到它,false

<system.webServer>
  <proxy enabled="true" preserveHostHeader="true" />
</system.webServer>

如果没有这个,上游 nginx 就不会在匹配的请求中收到有效的 Host 标头server_name dept.company.com;,所以你会进入默认的站点/页面。

有趣的是,如果你在 IIS 前面使用 nginx,默认值恰恰相反,nginx 保留原始 Host 头。

参考

https://docs.lextudio.com/blog/the-very-common-mistakes-when-using-iis-url-rewrite-module-a2ab7e4fee59#mistake-3-write-proxy-rules-without-arr-proxy

相关内容