apache - 提供 http ://localhost as https://someOtherDomain? 的简单方法是什么

标签 apache ssl proxy webserver

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

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

例如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。

最佳答案

我认为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 条目(如果这些是固定的)。这确实增加了一些工作量,但这意味着本地网络中的其他人可以访问开发人员正在进行的工作,这对于演示、在移动设备上进行测试等非常方便。

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

关于apache - 提供 http ://localhost as https://someOtherDomain? 的简单方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412600/

相关文章:

PHP, AJAX : large data being truncated

ssl - 带有 SSL URL 的 CutyCapt 问题

authentication - 无法使用bin/plugin工具(elasticsearch)安装Head插件

python - 如何在远程站点无法检测到主机/主机 IP 的情况下使用代理?

java - Apache POI 3.16 - 使用 XSSF 读取 75K 行 EXCEL (.xlsx) 时出现 OutOfMemory 异常

apache - Collabora (docker) 和 NextCloud (snap) 问题在同一台机器上的代理后面

android - 如何在使用由 Apache 提供支持的库的 Android 应用程序中添加 Apache License 2.0

ssl - 如何使用 Datadog 监控 ssl 证书?

c# - 两个 session 和直接连接内存 BIO 的 C# 的 OpenSSL 握手失败

javascript - 代理阻止 websockets?如何绕行