【问题标题】:What's a simple way to serve http://localhost as https://someOtherDomain?将 http://localhost 作为 https://someOtherDomain 提供服务的简单方法是什么?
【发布时间】:2014-10-14 06:37:48
【问题描述】:

我运行一个本地开发网络服务器来测试代码更改。

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

例如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 的解决方案感兴趣。我见过各种中间人代理,听起来他们可以使用一些配置......但我正在寻找安装和运行非常简单的东西 - 不仅仅是为了我,而是我可以告诉团队成员的东西也一样,因为我们将来可能都必须这样做。

重要提示:我的本地网络服务器没有在端口 80 上运行,尽管我在上面的示例中这样表示,以保持简单。我知道 Mac 上的 80 端口有点特别,但我对在所有端口上都能正常工作的解决方案感到非常满意端口 80。

【问题讨论】:

  • 我认为Squid 经常用于这类事情。
  • 如果 external1.com 只会与真实的 someOtherDomain.com 对话,那么在您的开发机器上使用代理做任何事情都对您没有帮助。如果 external1.com 会与您的开发站对话,只要它声称是 someOtherDomain.com,您就不需要代理,您只需为您的开发 apache 设置正确的名称并将其放入您的 hosts 文件中。如果外部只与真实域对话,则需要在该主机上设置某种代理系统。但在那种情况下,我更愿意让外部管理员给我一些开发 IP 的访问权限。
  • 感谢大家的反馈....也许我的术语在代理的某些用途中是错误的,但从浏览器的角度来看,我想将http://localhost映射到https://someOtherDomain.com,所以 DNS 条目 SSL 层。我有什么作品 - 似乎应该有一种更简单/交钥匙的方式来做到这一点,因为我认为很多开发人员都想这样做。我的用例是将我的本地更改与其他暂存服务器集成,以查看我的代码是否有效,而无需构建 10 个其他项目。谢谢!
  • 为什么不使用具有“someOtherDomain.com”作为本地应用程序服务器名的虚拟主机而不是“localhost”?那么只需要修改hosts,不需要proxy。
  • 嘿...谢谢你的信息!最终,我希望找到除 Apache 之外的其他东西来执行此操作 - 因为我不希望每个人也必须创建/设置自己的 SSL 证书。使用自签名证书很好,但没有人应该创建它。我很想找到一个工具,你可以启动并传递一个本地端口和一个域名,它可以通过someOtherDomain.com 安全地为你的本地端口提供服务——不需要创建配置或 SSL 证书。我所拥有的作品 - 我只是认为人们设置它有点痛苦!谢谢!

标签: apache ssl proxy webserver


【解决方案1】:

我认为mitmproxy 可以为您做到这一点,至少在 linux 和 os-x 上是这样。我自己没有尝试过,但this question 似乎展示了它是如何完成的。但它仍然不是一个简单的程序。

不过,我还使用了其他方法:

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

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

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

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

【讨论】:

  • 感谢您的反馈...我看了看 mitmproxy,它看起来很酷 - 但我看不出如何做我想做的事...我一会儿再试,看看效果如何……
  • 如果 mitmproxy 不能做到这一点(正如我所说的,我自己没有使用过)也许它可以与stackoverflow.com/questions/8129260/…中提到的工具之一一起工作
  • 作为参考,可以使用 mitmproxy:github.com/mitmproxy/mitmproxy/issues/355
【解决方案2】:

如果您想将本地计算机上的网络暴露给互联网,请尝试Runscope Passageway,它很容易设置并且“正常工作”(根据经验)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2020-09-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多