使用 mod_rewrite 将 HTTP 转换为 HTTPS;Apache 需要重新启动

使用 mod_rewrite 将 HTTP 转换为 HTTPS;Apache 需要重新启动

我刚刚注册,这是我的第一个问题。如果我需要在其他地方问这个问题,请告诉我。

我们需要为 SSL 配置一个站点,并将所有 HTTP 流量重定向到 HTTPS。我们决定使用 mod_rewrite,因为我们已经使用了一些重写规则。这些更改在我们的开发环境中进行了测试,并且按预期工作。我们对生产环境进行了更改,发现它可以工作几个小时,但最终开始失败并且站点变得不可用。重新启动 Apache 服务后,站点就会恢复。不幸的是,这种情况不会持续太久,最终需要重复。

有人向我推荐了一些指南,其中说不推荐使用 mod_rewrite,而应该使用 VirtualHosts。我想了解为什么这是首选方法,并希望找到我们遇到的问题的根本原因。我们刚刚关闭了重写规则,网站在监听 443 和 80 时一直很稳定。

https://wiki.apache.org/httpd/RewriteHTTPToHTTPS “注意:使用 mod_rewrite 来执行此操作不是推荐的行为”

https://wiki.apache.org/httpd/RedirectSSL “虽然建议使用此解决方案,因为它更简单、更安全,但您也可以使用 mod_rewrite 来获得与此处描述的相同的效果”

有谁知道为什么推荐使用 mod_rewrite 吗?有类似的经历吗?有关于下一步的建议吗?

Apache 2.4.18

在 Windows Server 2008 R2 上运行

我们尝试了MaxConnectionsPerChild 0其他值,没有任何变化。我看到MaxConnectionResetsPerChild在“中断”期间达到了该值,这些重置似乎无法解决问题……而不是手动重启 Apache 服务/父进程。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https//wontletmepostlink.duetorep/1$ [R,L]

答案1

我将回答您的一个问题:

mod_alias,它提供RedirectRedirectMatchRedirect对于简单的重定向来说已经足够,而RedirectMatch提供了重定向 URL 类的方法。

作为附加参考,请参阅何时不使用 mod_rewrite,其中提供了许多示例,并很好地解释了为什么不将其用于mod_rewrite所有事物。

mod_rewrite当发现其他替代方案不尽如人意时,应将其视为最后的手段。当有更简单的替代方案时使用它会导致配置混乱、脆弱且难以维护。

相关内容