语境:
我们在内部网络(可公开访问)上托管了带有 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 头。