- A+
本文提供Apache Web服务器的故障排除指南。Apache是用于提供HTTP流量的高度可定制的工具。因为它允许在许多不同的地方有如此多的不同的配置和设置,有时Apache配置甚至可以使用高级用户。
在本指南中,您将从一些基本的故障排除步骤开始,然后继续进行更先进的技术,帮助您解决冲突的指令。我们建议从本指南的开始开始,依次进行。完成之后,您应该可以调试Apache安装。
Apache是否运行
首先,检查Apache是否正在运行:
请输入以下命令。(如果您正在使用不同的Web服务器,请替换apache2
为Web服务器的名称。):
- sudo service apache2 status
如果Apache正在运行,您将看到以下状态消息:
- Apache is running (pid 25931)
如果Apache没有运行,请尝试通过输入以下命令来启动它:
- sudo service apache2 start
如果不是,请重新启动Apache,见下一节所述。
如果Apache意外停止,您可能还需要调查内存问题的可能性。
重新启动Apache
即使Apache正在运行,重新启动服务器也是非常有用的。这将让您阅读Apache启动消息。如果您收到错误,可以使用在线搜索中的错误文本来帮助您找到更多详细信息和解决方案。重新启动服务器可能会产生几秒的停机时间。
Debian和Ubuntu:
- sudo service apache2 restart
Fedora和CentOS:
- sudo service httpd restart
您可以使用以下三个命令之一取决于您的Linux发行版:
- /etc/init.d/httpd restart
- /etc/init.d/apache2 restart
- /etc/rc.d/httpd restart
重新加载Apache
如果您最近对服务器进行了更改,但是似乎没有生效,重新启动或重新加载Apache也很有用。这是直接在Apache的配置文件所做的,真正的改变以及对你的配置进行了动态语言样改变mod_python
,mod_rails
(例如,乘客的Phusion,或mod_rack
)mod_ruby
等国内这些接口缓存代码,并且不会在新请求上重新读取脚本。
重新加载使Apache重新读取其配置文件,并整合更改,而无需完全重新启动,从而避免Web服务器停机。要重新加载Apache的配置,请运行以下命令:
Debian和Ubuntu:
- /etc/init.d/apache2 reload
Fedora和CentOS:
- /etc/init.d/httpd reload
检查日志
检查Apache错误的最佳方法是Apache错误日志。要查看错误日志,我们建议使用tail
带有该-f
标志的命令,该标志会在更新日志时直接显示该日志的最新部分。例:
- tail -f /var/log/apache2/error.log
键入CTRL-C退出实时日志。
默认错误日志位置为:
Debian和Ubuntu: /var/log/apache2/error.log
Fedora和CentOS: /var/log/httpd/error_log
访问日志还可以帮助您查找有关访问者服务器的具体信息。默认访问日志位置为:
Debian和Ubuntu: /var/log/apache2/access.log
Fedora和CentOS: /var/log/httpd/access_log
启用详细日志
有时从Apache看到额外的信息是有帮助的。您可以通过更改日志级别来增加日志中显示的详细信息量。
- 打开您的Apache配置文件进行编辑。Fedora和CentOS配置文件应位于
/etc/httpd/httpd.conf
。此示例显示Debian和Ubuntu配置文件的位置:- sudo nano /etc/apache2/apache2.conf
- 找到
LogLevel
变量,并将其从默认更新warn
为info
或debug
。debug
将产生最大量的产量。- /etc/apache2/apache2.conf
- # LogLevel: Control the number of messages logged to the error_log.
- # Possible values include: debug, info, notice, warn, error, crit,
- # alert, emerg.
- #
- LogLevel debug
- 重新启动Apache:
1
sudo service apache2 restart
- 执行给您麻烦的操作,然后检查日志以获取更多详细信息和错误。
记住在完成故障排除后将其设置
LogLevel
回warn
,否则您的服务器可能会填满日志。
检查语法
Apache包括一个很好的小语法检查工具。使用它来确保您没有丢失配置文件中的任何方括号(和类似的问题)。
Debian和Ubuntu:
1 | apache2ctl -t |
Fedora和CentOS:
1 | httpd -t |
检查虚拟主机定义
另一个有用的Apache工具可让您查看服务器上的所有虚拟主机,它们的选项,以及定义位置的文件名和行号。这将有助于您清点主机上配置的所有域。它还将帮助您找到正确的文件,您应该更新域的配置详细信息,如果您不太确定最初放置的位置。
Debian和Ubuntu:
1 | apache2ctl -S |
Fedora和CentOS:
1 | httpd -S |
确保所有的<VirtualHost>
指令都使用与指令中定义的IP地址和端口号相匹配的IP地址和端口号NameVirtualHost
。例如,如果已设置NameVirtualHosts *:80
,则虚拟主机配置应以<VirtualHost *:80>
。如果已经设置NameVirtualHosts 123.234.123.234:80
,则虚拟主机配置应该以<VirtualHost 123.234.123.234:80>
。如果已经设置NameVirtualHosts *
,则虚拟主机配置应该以<VirtualHost *>
。
您可以拥有多个
NameVirtualHost
值,如果您在多个IP和端口上运行站点,则需要执行此操作。只需确保<VirtualHost>
配置对应于已配置的NameVirtualHost
指令。
排除冲突指令
如果您修改了配置选项,并且即使重新加载服务器配置,您仍然看不到该选项,新的选项可能已被冲突的指令覆盖。要记住的要点是后来的指令会覆盖早先的指令。因此,读取最新的指令将始终是生效的指令。
这些要点应有助于澄清指令的阅读顺序:
- 记住,包含的文件在其包含的位置被读取,然后读取原始文件的其余部分。
<Directory>
每当服务器启动或重新加载时都会读取设置。.htaccess
另一方面,文件在资源投放之前被读取。因此,.htaccess
文件可以覆盖目录配置。要测试是否发生这种情况,请临时禁用.htaccess
文件。<Location>
指令被读取<Directory>
和<Files>
部分,所以这里的设置可能会覆盖其他早期的设置。- 配置文件被连续读取。例如,在文件
apache2.conf
或httpd.conf
文件的开头设置的选项可以被conf.d/
文件或虚拟主机文件中的设置覆盖。 - 当包含整个目录时,根据名称按顺序(按字母顺序)包含该目录中的文件。
- Debian和Ubuntu系统有一个文件
/etc/apache2/ports.conf
,其中设置了这些NameVirtualHost
和Listen
指令。这些值确定Apache绑定到的IP地址或地址,以及Web服务器监听HTTP请求的端口。这有时可能与其他文件中的设置相冲突。