我一直在研究并尝试解决这个问题几天没有成功。
我在Windows Server 2012上的IIS 8上部署了WCF Web服务。
在开发过程中,我一直在使用服务的完整URL来进行服务调用。
示例:
http://myserver.com/appservices/service1.svc/getdata
但现在我需要做以下事情:
我在godaddy上有一个域名,让我们说 somedomain.com ,我希望有一个子域名 services.somedomain.com 来代替完整的网址。所以我想要services.somedomain.com/getdata
之类的内容,而不是写上面的完整网址。我无法做到这一点。我尝试在Godaddy上设置URL转发,以便子域服务转发到http://myserver.com/appservices/service1.svc
,这可以在浏览器上运行,但是当在移动应用程序上使用它或通过fiddler时我得到301错误。 (无论是否有遮蔽,我都试过了)。有没有办法实现这个目标?
我需要获得SSL认证。我的问题是,我应该从哪个域获得它?如何获取 somedomain.com 或子域 services.somedomain.com ,或者可能是原始域 myserver.com 。我有点迷失在这里,我不想买错ss证书
为了让您全面了解我希望得到的最终结果,我需要具备以下条件:
somedomain.com 指向部署在iis上的网站
services.somedomain.com 指向部署在同一个iis上的wcf webservice,它将用于将从android / iphone调用的服务。 这需要获得SSL认证
我从godaddy
购买了 somedomain.com非常感谢任何暗示/帮助我真的很感激
答案 0 :(得分:3)
现在我从上述问题中对情况有了更好的了解。
首先,当您拥有这两个域并且您是Windows 2012服务器的管理员时,我建议您将somedomain.com
添加到您的服务器直接,即不重定向。这样做更好,因为您只需购买所需的SSL证书。如果您使用重定向,则需要两个域的SSL证书,否则您的用户将收到安全警告,因为原始请求与证书不匹配。
你想要的是Url Rewrite,而不是Redirect。有什么不同? 重定向是客户端请求,以使网络浏览器转到其他网站(使用301 error code)。 重写是URL到达您服务之前的服务器端重写。
您可以开始使用Url重写将以下内容添加到Web.config
文件中:
<system.webServer>
<rewrite>
<rules>
<!-- My rules -->
</rules>
</rewrite>
</system.webServer>
我们将添加一些规则(假设您在同一台服务器上有services.somedomain.com
)。
第一条规则,将http://services.somedomain.com/appservices/service1.svc/getdata
重写为http://services.somedomain.com/getdata
。
<rule name="SubDomainAppService" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^services\.somedomain\.com$" />
</conditions>
<action type="Rewrite" url="{HTTPS}services.somedomain.com/appservices/service1.svc/{R:1}" />
</rule>
这将匹配正则表达式模式services.somedomain.com/getdata
的位置,捕获网址的剩余部分并在内部将其重写为services.somedomain.com/appservices/service1.svc/getdata
。此规则还强制/重写对HTTPS
的请求。
要为您的网站强制使用SSL,您可以通过添加重写规则来执行此操作。这会将HTTP
上的任何传入请求重写为HTTPS
。
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
URL重写是一个复杂的主题,甚至不是我完全理解的主题。我在回答这个问题时读到的一些资源:
加分:
对于您的DNS,域和SSL证书,我建议您使用更好的提供商,例如DNSimple。阅读Troy Hunt的post why he moved。来自DNSimple的子域和通配符的SSL证书为on their site。
*如果你不知道Troy Hunt是谁,请阅读他关于安全性的其他文章。特别是他关于首先攻击你的API的帖子。
答案 1 :(得分:2)
您需要配置服务器,使其托管两个网站:
(最后一个绑定将仅用于将http流量重定向到https)。
SSL
您必须安装SSL证书才能在IIS中创建SSL绑定。 SSL证书包含有关颁发证书的主机名的信息。颁发给 foo.com 的证书不能用于识别 bar.com 。如果您需要保护多个主机名,请确保向证书提供商说明您的需求(在这种情况下,他们会建议使用UCC或通配符证书)。
另请注意,IIS7上的SSL主机头配置只能通过appcmd命令行完成。
部署:
将两个网站设置在不同的目录中(一个包含www内容,另一个包含webservice文件)。将网站和Web服务文件分开后,您可以选择将Web服务文件放在根目录中。
网址重写:
如果您想从网址中删除service1.svc
,可以使用网址重写。它需要安装URL Rewrite module。您可以使用IIS管理器GUI来创建规则。以下是为services.somedomain.com生成的web.config
文件的示例:
<system.webServer>
<!-- other rules -->
<rewrite>
<rules>
<rule name="http to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Temporary" />
</rule>
<rule name="everything to service1.svc">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/appservices/service1.svc/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
答案 2 :(得分:1)
既然你问了几个问题我希望回答其中一些问题:
首先检查您的子域services.domain.com是否由godaddy正确转发。 Ping到子域以检查它是否到达您自己的服务器。在IIS中,您使用主机名services.domain.com添加Web服务。 对于该网站,您添加一个单独的网站,其主机名为:domain.com
您有几种SSL证书选项,但最便宜的选择是获取子域名:services.domain.com。在web.config中,您可以添加如下所示的重定向,以确保服务始终使用HTTPS连接。
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
enter code here
答案 3 :(得分:0)
在GoDaddy上定义somedomain.com
和services.somedomain.com
为&#34; A&#34;使用服务器的IP地址记录,并将它们配置为服务器上的两个站点。 不要重定向 - 即使您使用它也会降低用户的速度,并且需要额外的证书。
您需要两个证书 - 一个用于somedomain.com
,另一个用于*.somedomain.com
。 请注意通配符 - 如果您需要其他子域,这将允许您使用相同的证书。
在几个月内,我们希望看到免费SSL - 请查看 Let's Encrypt ,最好不要长期提交。
您可以通过简单地将/appservices/service1.svc
设置为您网站的默认值来避免重写网址,假设所有services.somedomain.com
服务都是通过此入口点提供的。