Apache 2.4配置Listen指令时出现“Listen not allowed here”报错的问题咨询
Apache 2.4配置Listen指令时出现“Listen not allowed here”报错的问题咨询
嗨,这个问题我太熟悉啦,核心原因是Apache指令的上下文限制,我给你慢慢拆解:
为啥会触发这个报错?
Apache里每个指令都有它允许出现的“地盘”,Listen属于全局服务器配置级别的指令,只能放在httpd.conf的最外层(不能嵌套在<VirtualHost>、<Directory>、<If>这类区块里面)。你把它放进<If>条件块里,就相当于把全局指令放到了局部上下文里,违反了规则,所以就报错啦。
怎么实现你的需求?
你想要的是“如果SECOND_HOST_PORT不是443,就监听这个端口”,我们换一种符合Apache规则的写法,用<IfDefine>来实现(它是全局上下文允许的条件指令):
Listen 443 # 如果启动Apache时没指定SECOND_HOST_PORT,默认把它设为443 <IfDefine !SECOND_HOST_PORT> Define SECOND_HOST_PORT 443 </IfDefine> # 只有当启动时指定了非443的SECOND_HOST_PORT,才额外监听这个端口 # 比如你要监听8443,启动命令就写成:httpd -DSECOND_HOST_PORT=8443 <IfDefine SECOND_HOST_PORT> Listen ${SECOND_HOST_PORT} </IfDefine>
要是你不需要默认值,只想在主动指定非443端口时才监听,还能更简洁:
Listen 443 # 启动时通过-D参数指定额外端口,比如 httpd -DSECOND_HOST_PORT=8443 <IfDefine SECOND_HOST_PORT> Listen ${SECOND_HOST_PORT} </IfDefine>
这样既满足了你的需求,又完全符合Apache的规则,不会再报错啦~
备注:内容来源于stack exchange,提问作者kofifus
相关产品推荐
相关产品推荐

