Apache:socache_shmcb:错误 AH00820:共享内存段太小

Apache:socache_shmcb:错误 AH00820:共享内存段太小

对于上下文:RHEL 7.4 上的 Apache HTTPD 2.4.6-90.el7

  • AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]在日志中收到警告,因此我将其添加到配置中:
<IfModule socache_shmcb_module>
    SSLSessionCache shmcb:/run/httpd/sslcache(512000)
</IfModule>
  • 我检查了socache_shmcb_module模块是否已加载:
$ httpd -M | grep shmcb
socache_shmcb_module (shared)
  • 我检查了语法没有问题:
$httpd -t
Syntax OK
  • 然后顺利重启:
httpd -k graceful
  • 之后,我在日志中没有看到任何AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]警告。几个小时后,整个 HTTPD 服务器不再运行,日志报告:
[socache_shmcb:error] AH00820: shared memory segment too small

Apache 文档本身没有提供有关此缓存大小的详细信息,我应用的值实际上是示例中显示的值。

我如何确定此缓存的可接受大小?您有关于此的任何详细信息吗AH00820错误 ?

答案1

mod_status 的输出包含有关会话缓存状态和使用情况的部分。以下是它在我们的主机上的样子:

SSL/TLS Session Cache Status:
cache type: SHMCB, shared memory: 512000 bytes, current entries: 0
subcaches: 32, indexes per subcache: 88
index usage: 0%, cache usage: 0%
total entries stored since starting: 0
total entries replaced since starting: 0
total entries expired since starting: 0
total (pre-expiry) entries scrolled out of the cache: 0
total retrieves since starting: 0 hit, 8 miss
total removes since starting: 0 hit, 0 miss

您可以监视这一点,和/或将缓存大小加倍,直到问题消失。

答案2

回答我自己的问题:我的错误是我在 Apache 配置中添加了:

<IfModule socache_shmcb_module>
    SSLSessionCache shmcb:/run/httpd/sslcache(512000)
</IfModule>

我将其更改为以下内容后,崩溃和AH00820错误不再发生:

<IfModule socache_shmcb_module>
    SSLSessionCache shmcb:/run/httpd/sslcache(512000)
    SSLSessionCacheTimeout 300
</IfModule>

Apache 文档提到这SSLSessionCacheTimeout 300是默认值,这就是我最初省略它的原因。看起来这个指令是强制性的,即使重复默认值也是如此。

回到我最初的问题:

1. 我如何确定该缓存的可接受大小?

SSLSessionCache一旦使用和指令配置了 Apache SSLSessionCacheTimeout,它就会再次稳定下来,并且mod_status(在上面的答案 + 评论中描述)输出使用的缓存百分比。在我的情况下,它相当低,因此配置的值512000看起来不错。

2.您是否有关于此 AH00820 错误的任何详细信息?

实际上,关于这个错误没有太多信息。我只是知道当我使用这两个指令时它就消失了。

相关内容