【发布时间】: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 正在运行,因为这只是一个警告。
标签: apache virtual-machine chef-infra rhel rackspace