我在 Azure 中有一个虚拟机,在三个不同的端口上运行三个自托管应用程序(未托管在 IIS 中)。
我可以通过以下网址访问它们:
my-server.cloudapp.azure.com:8080
my-server.cloudapp.azure.com:8081
my-server.cloudapp.azure.com:8082
我已经购买了一个域名(my-server.company.com
),并想创建三个指向各自应用程序的子域名
application-1.my-server.company.com
application-2.my-server.company.com
application-3.my-server.company.com
我的第一个想法是在虚拟机上安装 IIS,并在默认网站上使用 URL Rewrite 设置反向代理,如本文所述(http://weblogs.asp.net/owscott/creating-a-reverse-proxy-with-url-rewrite-for-iis)。
因此,在这种情况下,我将为每个子域设置指向的 CNAME 记录my-server.cloudapp.azure.com:80
,然后配置反向代理以根据主机头转发到不同的端口( 8080
,, )。8081
8082
这可能吗/这是解决这个问题的最佳方法吗?
第二个问题是,一旦我让它工作起来,我该如何添加 ssl?
每个子域是否都需要自己的 SSL 证书,在这种情况下,如何与上述设置配合使用(没有可绑定每个证书的 iis 网站)。或者我是否可以只使用 my-server.company.com 的证书,然后在反向代理处卸载?
最终解决方案
我创建了 CNAME DNS 记录如下:
CNAME | application-1 | my-server.cloudapp.azure.com
CNAME | application-2 | my-server.cloudapp.azure.com
CNAME | application-2 | my-server.cloudapp.azure.com
然后在 Azure VM 上运行球童(具有自动 HTTPS 的 HTTP/2 网络服务器)具有以下 Caddyfile:
application-1.my-server.company.com {
proxy / localhost:8080 {
proxy_header Host {host}
}
}
application-1.my-server.company.com {
proxy / localhost:8081 {
proxy_header Host {host}
}
}
application-1.my-server.company.com {
proxy / localhost:8082 {
proxy_header Host {host}
}
}
它的美妙之处在于,Caddy 第一次运行时,它会自动为您的所有网站启用 HTTPS(使用 Let's Encrypt 自动生成的证书),并且还会将所有 HTTP 请求重定向到其 HTTPS 等效项。
此设置还意味着我不需要在 VM 上安装 IIS。
注意:您需要为端口 80 和 443 添加入站防火墙规则,以使 Caddy 正常工作
答案1
如果我正确理解了你的问题,你想做以下事情:
application-1.my-server.company.com point to my-server.cloudapp.azure.com:8080
application-2.my-server.company.com point to my-server.cloudapp.azure.com:8081
application-3.my-server.company.com point to my-server.cloudapp.azure.com:8082
一种解决方案是使用反向代理。有关详细信息,请参阅此问题:如何将子域名重定向到同一台服务器上的不同端口?。您可以在反向代理和 Web 服务器之间使用自签名证书。
您还可以卸载 SSL 证书:https://kb.paessler.com/en/topic/44613-using-windows-iis-as-ssl-proxy-for-prtg。但这样你就需要管理多个证书。你可以在每个应用程序之前放置一个 nginx 反向代理来添加 SSL 支持。
在您的 DNS 中为 my-server.company.com 添加一条 A 记录。对于子域,最好的做法是当它们位于同一台服务器上时创建 CNAME 记录。这样,您只需在您的 IP 更改时更新 A 记录。否则,为每个子域创建 A 记录。
对于 SSL 证书。您必须在每台服务器上都拥有证书。当您使用多台服务器时,反向代理和 Web 服务之间的流量必须是安全的。这是因为您的服务器之间也可能存在中间人攻击。
答案2
您可以创建三个虚拟主机并为每个应用程序设置绑定名称(DNS 记录类型 A,我认为您不能使用 CNAME,因为 A 记录在托管应用程序中是相同的),您可以看到https://technet.microsoft.com/en-us/library/cc731692(v=ws.10).aspx
最后,为每个虚拟主机创建一个 URL 重写规则。