RHEL 上的 Chef Apache2 配方:默认配方中未定义服务器名称
Posted
技术标签:
【中文标题】RHEL 上的 Chef Apache2 配方:默认配方中未定义服务器名称【英文标题】:Chef Apache2 recipe on RHEL: ServerName not defined in the default recipe 【发布时间】:2014-04-17 10:03:39 【问题描述】:我正在使用 Chef 在 Rackspace 上构建虚拟机。 VM 是一个 RHEL 6.5 机器。
我在使用 Apache2 配方为 RHEL 构建默认的 Apache2 /etc/httpd/conf/httpd.conf
文件时遇到问题(它似乎默认为 Ubuntu 风格的配置)。
在配方配置模板 (apache2/templates/default/apache2.conf.erb
) 中没有定义 ServerName
的地方。因此,当我测试 Apache 是否正常工作时,我得到以下信息
% apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using ##### for ServerName
Syntax OK
其中#####
是我的DNS,在我的/etc/hosts
中列出,并在我的食谱attributes/default.rb
文件中定义为servername
。
如果我查看配方模板,我看不到变量 ServerName
的任何位置(前 17 行):
#
# Generated by Chef
#
# Based on the Ubuntu apache2.conf
ServerRoot "<%= node['apache']['dir'] %>"
#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
<% if %w[debian].include?(node['platform_family']) -%>
LockFile /var/lock/apache2/accept.lock
<% elsif %w[freebsd].include?(node['platform_family']) -%>
LockFile /var/log/accept.lock
<% else %>
LockFile logs/accept.lock
<% end -%>
现在,如果我手动编辑/etc/httpd/conf/httpd.conf
,添加ServerName
变量,一切正常。前后相关:
之前
#
# Generated by Chef
#
# Based on the Ubuntu apache2.conf
ServerRoot "/etc/httpd"
之后
#
# Generated by Chef
#
# Based on the Ubuntu apache2.conf
ServerRoot "/etc/httpd"
ServerName #####:80
现在当我测试 Apache 时:
% apachectl configtest
Syntax OK
显然,使用 Chef 的全部意义在于而不是手动编辑配置文件,每当我使用 chef-solo
重新运行我的厨师食谱时,我都会破坏这个自定义离开。我对 Chef 太陌生了,我真的不想在 Github 上 fork 食谱并为 RHEL 制作新模板,但也许这就是我需要做的?
我希望我的整体配方中只有一个配置设置我没有定义,它将将此变量添加到我的核心 Apache httpd.conf
文件中。
希望对 Chef 有更多经验的人,尤其是 Apache2 食谱,可以帮助我。提前致谢。
编辑#1
查看netstat -tulpn
表明我认为 Apache (httpd) 确实在工作,或者至少正在侦听端口 80:
% netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1274/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1677/master
tcp 0 0 **.***.*.***:3306 0.0.0.0:* LISTEN 1585/mysqld
tcp 0 0 :::80 :::* LISTEN 6663/httpd
tcp 0 0 :::22 :::* LISTEN 1274/sshd
tcp 0 0 ::1:25 :::* LISTEN 1677/master
是否越来越像网络 (DNS) 问题?
编辑#2
根据对我原来帖子的帮助,我认为我最初误诊了这一点。我刚刚构建了一个新的 Ubuntu VM 并使用 sudo apt-get install apache2
手动安装了 Apache2(即不使用 chef-solo
),我看到了与我的 Chef 配方在我的 RHEL VM 上创建的相同的 apache2 安装布局。我在运行apachectl configtest
时也收到同样的警告:
apache2: Could not reliably determine the server's fully qualified domain name, using ##### for ServerName
Syntax OK
当我将 Ubuntu 上的浏览器指向 127.0.0.1:80
时,我看到“它可以工作了!”标准的 Apache 响应。所以,我的问题并不是真正的问题。我现在的想法是,这是一个网络问题。 iptables
?
编辑#3
我刚刚通过 ssh 连接到我的 RHEL 虚拟机并安装了 Firefox。然后我打开它并将其指向 127.0.0.1:80,我得到了默认页面。我认为这绝对证实了我有 DNS 问题。是时候与我的网络管理员交谈了。
【问题讨论】:
问题比我想象的要深。 apache2 Chef 食谱专门针对 Apache 2 的 Debian/Ubuntu 风格安装,这意味着虚拟主机文件安装在/etc/httpd/sites-available/
下而不是 /etc/httpd/conf.d/
下。我想我得自己写食谱了……真可惜……
嗯。我实际上收回了这一点。在 attributes/default.rb
的 Apache 2 手册中,有一条 case
语句根据平台类型选择如何安装 apache2。这将选择包是httpd
(RHEL 和其他)、apache2
(Debian/Ubuntu)还是其他。
apache2 食谱并不假定您使用的是 Debian 系列操作系统,但它确实以 Debian 风格管理 apache 配置——通过使用 (sites|mods)-(available|enabled) 和所有这一切。我发现它比 RHEL/CentOS 做的要好得多(基本上什么都没有),但你可能不同意。
这不只是默认站点的特征,它没有声明ServerName
吗?否则它不会停止充当默认站点吗?我经常看到我真正担心的警告消息,但如果 apache 无法解析其自己的主机名(反向查找 IP 地址?只是猜测),情况并非如此。
是的,this question 有正确的答案。没关系,如果发出此警告并且它是作为无法确定自己的主机名而发出的。 Apache 正在运行,因为这只是一个警告。
【参考方案1】:
根据用户 cassianoleal 和 StephenKing 提供的帮助,这个“错误”实际上是一个红鲱鱼。这只是一个 Apache 警告,对 httpd 是否实际运行没有影响。
问题在于我没有更新我的iptables
配置。一旦我安装了 Chef 食谱 simple_iptables
并在我的 Chef 食谱中添加了 simple_iptables_rule
以更新我的 iptables 以侦听端口 80 和 443,一切正常。
我猜是生活和学习。
作为记录,如果您还没有使用 Chef,强烈推荐它!
【讨论】:
这为我省去了很多麻烦。谢谢!虽然现在也有一本普通的iptables
食谱。
@Derek - 很高兴这为您节省了一些时间和麻烦!以上是关于RHEL 上的 Chef Apache2 配方:默认配方中未定义服务器名称的主要内容,如果未能解决你的问题,请参考以下文章
安装 Postgresql 时 AWS Opsworks Chef 配方失败