将http:// localhost作为https:// someOtherDomain提供的简单方法是什么?

时间:2014-08-20 19:08:28

标签: apache ssl proxy webserver

我运行本地开发Web服务器来测试代码更改。

通常我必须使用只能安全连接到另一个域的远程服务来测试我的本地更改。

e.g。 https://external1.com只会与https://someOtherDomain.com对话,但我必须测试我的新代码更改与https://external1.com

的集成

虽然我已经配置了一个有效的设置,但看起来很复杂,并且需要一点时间才能正确设置。在我看来,很多开发人员都想做同样的事情,所以我的问题是:

是否有一种简单的方法可以将我的本地网络服务器代理为https://someOtherDomain.com

编辑:所以也许应该这样询问 - 是否存在可以传递本地端口和域名的命令行或GUI工具,它通过https://someOtherDomain.com安全地为您的本地端口提供服务 - 没有配置还是需要创建SSL证书?当然,如果需要可以通过配置替换SSL证书,那将是很好的,但默认情况下,它通过使用预先安装的SSL证书自动运行。即使我正在使用Apache,我也在寻找一种实际使用Apache的解决方案 - 它使用其他东西。为什么?因为我希望这个解决方案能够与我们团队中的人们使用的任何其他网络服务器一起工作 - 因为我们都运行不同的堆栈,并且我希望能够让我们任何人安全地为我们的网站服务,而无需配置每个单独的网络服务器。

以下是我当前使用本地网络服务器并在https://www.someOtherDomain.com

提供服务的设置

为了在本地测试,我一直在:

  • 编辑我的主机文件,并添加一个条目使www.someOtherDomain.com指向我的本地机器,当然这是运行我的开发服务器。这使得我的本地网站现在可以在http://www.someOtherDomain.com

    获得

    127.0.0.1 www.someOtherDomain.com

  • 使用SSL证书设置和mod_proxy运行Apache,将所有https请求重定向到我的本地http服务器,从而使我的站点在https://www.someOtherDomain.com可用。这是我的Apache配置:

    ServerName www.someOtherDomain.com
    
    <Location /balancer-manager>
       SetHandler balancer-manager
    </Location>
    
    ProxyPass /balancer-manager !
    ProxyPass / balancer://mycluster/ 
    
    <Proxy balancer://mycluster>
      BalancerMember http://localhost route=1
    </Proxy>
    ProxyPass / balancer://mycluster
    ProxyPassReverse / balancer://mycluster
    
    SSLHonorCipherOrder On
    SSLProtocol -ALL +SSLv3 +TLSv1
    SSLCipherSuite RC4-SHA:HIGH:!ADH
    
    # Rewrite all http requests to https
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    

我在mac上运行它,但我也对linux的解决方案感兴趣。我已经看到中间代理中的各种Man听起来像是在使用某些配置...但我正在寻找一些非常简单的安装和运行 - 不仅仅是为了我,而是我能告诉团队成员的事情因为我们将来可能都必须做很多事情。

重要说明:我的本地网络服务器没有在端口80上运行,尽管我在上面的示例中已经这样说,为了保持简单。我理解mac上的端口80有点特别,但我很满意在所有端口端口80上工作正常的解决方案。

2 个答案:

答案 0 :(得分:2)

我认为mitmproxy可以为你做到这一点,至少在Linux和os-x上。我自己没有尝试过,但this question似乎表明它是如何完成的。但它仍然不是一个微不足道的计划。

然而,我使用了其他方法:

第一个是最简单的一个,为develop.mydomain.com创建一个DNS条目,该条目指向127.0.0.1,并为您控制DNS的(子)域创建单个证书。将该证书传播给所有开发人员。他们仍然需要自己设置SSL,但他们不再需要生成证书。它具有额外的好处,即每个人都在针对https://develop.mydomain.com进行开发,这允许他们共享配置。 对于奖励积分,请为* .develop.mydomain.com和通配符证书创建DNS条目,您的开发人员可以在本地计算机上拥有不同的站点(例如https://project1.develop.mydomain.comhttps://project2.develop.mydomain.com)。 (与互联网有时告诉您的情况相反,只要证书对所有命名主机都有效,基于名称的虚拟主机就可以正常使用SSL)。由于每个人的域名相同,您可以考虑获取有效的通配符证书以消除警告。

与以下解决方案不同,这甚至可以在办公室网络之外工作,这可能与人们在家或在客户工作时相关。

在此基础上,您还可以为开发人员计算机的内部IP创建DNS条目(如果这些是固定的)。这确实增加了一些工作,但这意味着本地网络中的其他人可以访问开发人员正在进行的工作,这对于演示,移动设备上的测试等非常方便。

另一个选择是配置一台机器代理所有开发人员。创建一个DNS条目,指向此框的内部IP,例如* .develop.mydomain.com,匹配的通配符证书,并使用正确的证书配置该框一次。现在,您可以为每个代理服务器创建虚拟主机,同样,所有站点都可以在整个本地网络中访问,但它确实需要开发人员具有固定的IP地址(或通过DHCP添加到DNS的主机名)。 结合apache将目录中的所有文件包含在其配置中的能力,可以创建一个基于模板添加新站点的脚本。它所要做的就是根据请求的子域和目标写一个新文件并重新加载apache配置。这意味着类似于简单的PHP脚本就可以完成您希望应用程序执行的操作。

答案 1 :(得分:1)

如果您想将本地计算机上的网络公开到互联网,请尝试Runscope Passageway,这很容易设置并且“正常工作”(来自经验)。

另一种选择是ngrok,我也使用过,但它并不总是对我有用。