WCF Web服务和使用HTTPS的URL转发 [英] wcf webservice and URL forwarding with https
问题描述
几天来,我一直在研究并试图解决这个问题,但没有成功。
我在Windows Server 2012上的IIS 8上部署了WCF Web服务。
在开发过程中,为了进行服务调用,我一直使用服务的完整URL。
示例:
http://myserver.com/appservices/service1.svc/getdata
但现在我需要执行以下操作:
我在GoPardy上有一个域,假设Somedomain.com,我希望有一个子域services.Somedomain.com来使用,而不是使用完整的URL。因此,我希望有类似
services.somedomain.com/getdata
的内容,而不是编写上面的完整URL。我无法做到这一点。我尝试将服务的子域的URL转发设置为转发到http://myserver.com/appservices/service1.svc
,这在浏览器上有效,但当在移动应用程序上或通过fiddler使用它时,我得到了301错误。(我尝试了带和不带面具两种情况)。有没有办法做到这一点?我需要为它获得一个SSL证书。我这里的问题是,我应该在哪个域名上获得它?我是针对Somedomain.com,还是针对子域services.Somedomain.com,或者可能针对原始域myserver.com。我有点迷路了,我不想买错了的证书
为了让您对我希望得到的最终结果有一个总体的了解,我需要具备以下条件:
Somedomain.com指向部署在iIS上的网站
services.Somedomain.com指向部署在同一iis上的WCF Web服务,它将用于将从Android/iPhone调用的服务。并且这需要有一个SSL证书
我已从GoPardy购买了Somedomain.com
非常感谢你的提示/帮助我真的很感激
推荐答案
现在我通过以上问题对情况有了更好的了解。
首先,由于您拥有两个域,并且您是Windows 2012服务器的管理员,我建议您将somedomain.com
直接添加到您的服务器,即不要重定向。这样更好,因为您只需要购买所需的SSL证书。如果您使用重定向,您将需要两个域的SSL证书,否则您的用户将收到安全警告,因为原始请求与证书不匹配。
您可以开始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
,捕获URL的剩余部分并在内部将其重写为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。阅读特洛伊·亨特的*post why he moved。子域和通配符的来自DNSimple的SSL证书是on their site。
如果你不知道特洛伊·亨特是谁,请阅读他关于安全的其余文章。尤其是他关于先黑你的API的帖子。这篇关于WCF Web服务和使用HTTPS的URL转发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!