我在一台机器上运行了几个域名,所有东西都使用 SSL,我正在尝试学习这些东西
我有 domain1.com domain2.com domain3.com 一切正常。
我想实现这个目标:
例如,如果用户在浏览器中填写了盒子的 IP,我希望用户重定向到 google。否则它会显示有关非 SSL 的警告。基本上,我不希望用户能够使用直接 IP 访问此盒子,我希望他们全部重定向到 google。
我知道如何在 apache 上执行此操作,但不知道如何在 IIS 8.5 上执行此操作。
非常感谢
答案1
有多种方法可以做到这一点,我的解决方案仅使用内置模块。
基本思想是,对于所有适当的内容网站,您仅使用主机名绑定。这样就无法使用 IP 地址访问它们。
然后,您使用一个额外的网站,您不会将其绑定到主机名,而是绑定到服务器上的所有 IP 地址。该网站处理其他任何网站都未接收的所有请求。在该网站上,您将所有内容重定向到 Google.com
以下是操作方法,我使用 PowerShell 命令,因此请确保已安装 IIS-PowerShell 模块:
Enable-WindowsOptionalFeature -online -FeatureName IIS-ManagementScriptingTools
我使用预先安装的Default Web Site
作为catch-all站点,确认该站点已绑定到所有IP地址:
ls IIS:\Sites\
你应该得到类似这样的结果:
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
Default Web Site 1 Started %SystemDrive%\inetpub\wwwroot http *:80:
http *:80:
表示所有没有主机名的 IP 地址上的端口 80。
您需要 http-redirect 模块:
Enable-WindowsOptionalFeature -online -FeatureName IIS-HttpRedirect
现在设置对网站的所有请求的重定向:
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/Default Web Site' -filter "system.webServer/httpRedirect" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/Default Web Site' -filter "system.webServer/httpRedirect" -name "destination" -value "https://www.google.com"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/Default Web Site' -filter "system.webServer/httpRedirect" -name "exactDestination" -value "True"
现在,对服务器上任何 IP 地址的所有请求都应重定向到 google.com,您现在可以添加与主机名绑定的其他站点。
处理 https 时,情况会变得稍微复杂一些,但无论如何,使用带有 IP 地址的 https 都会导致证书错误。