像高级用户一样使用 Apachectl 和 Httpd 的 9 个技巧
当你安装的Apache2之后,如果你想使用的apachectl和httpd的,以它的最大潜力,你应该超越使用启动,停止和重新启动。本文提供的 9 个实际示例将帮助您非常有效地使用 apachectl 和 httpd。
Apachectl 充当 SysV init 脚本,接受启动、停止、重启和状态等参数。它还充当 httpd 命令的前端,只需将命令行参数传递给 httpd。所以,你使用apachectl执行的所有命令,也可以通过调用httpd直接执行。
1. 将不同的 httpd.conf 文件名传递给 apachectl
通常,您将修改原始 httpd.conf 以尝试不同的 Apache 指令。如果某些事情没有解决,您将恢复更改。不要使用原始的 httpd.conf,而是将其复制到一个新的 httpd.conf.debug 并在 Apache 中使用这个新的 httpd.conf.debug 文件进行测试,如下所示,使用选项 -f。
# apachectl -f conf/httpd.conf.debug
# httpd -k start -f conf/httpd.conf.debug
[Note: you can use either apachectl or httpd as shown above]
# ps -ef | grep http
root 25080 1 0 23:26 00:00:00 /usr/sbin/httpd -f conf/httpd.conf.debug
apache 25099 25080 0 23:28 00:00:00 /usr/sbin/httpd -f conf/httpd.conf.debug
[Note: ps shows the httpd running with httpd.conf.debug file]
一旦您对更改感到满意并且 Apache 运行 httpd.conf.debug 没有任何问题,您可以将更改复制到 httpd.conf 并正常启动 Apache,如下所示。
# cp httpd.conf.debug httpd.conf
# apachectl stop
# apachectl start
# ps -ef | grep httpd
root 25114 1 0 23:28 00:00:00 /usr/sbin/httpd -k start
daemon 25115 25114 0 23:28 00:00:00 /usr/sbin/httpd -k start
[Note: ps indicates that the httpd is running using the default config file]
2. 使用一个临时的 DocumentRoot 而不修改 httpd.conf
当您为网站尝试不同的布局并且不想修改默认 DocumentRoot 下的原始文件时,这非常有用。将原始 DocumentRoot 目录 (/var/www/html) 的副本复制到新的临时 DocumentRoot 目录 (/var/www/html_debug)。在此临时 DocumentRoot 目录 (/var/www/html_debug) 下进行所有更改并使用此临时目录启动 Apache,如下所示使用选项 -c。
# httpd -k start -c "DocumentRoot /var/www/html_debug/"
如果您想使用默认的 DocumentRoot (/var/www/html) 返回原始配置,只需重新启动 Apache,如下所示。
# httpd -k stop
# apachectl start
3.临时增加LogLevel
在调试问题时,您可以临时更改 Apache 的 LogLevel,而无需使用选项 -e 修改 httpd.conf 中的 LogLevel 指令,如下所示。在此示例中,LogLevel 设置为调试。
# httpd -k start -e debug
[Sun Aug 17 13:53:06 2008] [debug] mod_so.c(246): loaded module auth_basic_module
[Sun Aug 17 13:53:06 2008] [debug] mod_so.c(246): loaded module auth_digest_module
您可以传递给选项 -e 的可能值是:调试、信息、通知、警告、错误、暴击、警报、紧急
4. 使用选项 -l 显示在 Apache 内部编译的模块
# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
5.显示Apache加载的静态和动态模块
当您将选项 -l 传递给 httpd 时,它将仅显示静态模块。传递选项 -M,将显示静态和共享模块,如下所示。
# httpd -M
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
auth_basic_module (shared)
auth_digest_module (shared)
authn_file_module (shared)
authn_alias_module (shared)
Syntax OK
6. 在 httpd.conf 中显示所有接受的指令
这就像 httpd 的扩展帮助,它将显示所有 httpd.conf 指令及其有效位置。对于特定的指令,它会告诉所有可能的值以及它可以在 httpd.conf 中使用的位置。当您想快速了解特定的 Apache 指令时,这非常有用。
# httpd -L
HostnameLookups (core.c)
"on" to enable, "off" to disable reverse DNS lookups, or "double" to enable double-reverse DNS lookups
Allowed in *.conf anywhere
ServerLimit (prefork.c)
Maximum value of MaxClients for this run of Apache
Allowed in *.conf only outside <Directory>, <Files> or <Location>
KeepAlive (http_core.c)
Whether persistent connections should be On or Off
Allowed in *.conf only outside <Directory>, <Files> or <Location>
LoadModule (mod_so.c)
a module name and the name of a shared object file to load it from
Allowed in *.conf only outside <Directory>, <Files> or <Location>
7.修改后验证httpd.conf
使用选项 -t 来验证特定 Apache 配置文件是否存在任何问题。在下面显示的示例中,它显示 httpd.conf.debug 中的第 148 行存在问题。mod_auth_basicso 缺少 . (句号)在如此之前。
# httpd -t -f conf/httpd.conf.debug
httpd: Syntax error on line 148 of /etc/httpd/conf/httpd.conf.debug:
Cannot load /etc/httpd/modules/mod_auth_basicso into server:
/etc/httpd/modules/mod_auth_basicso: cannot open shared object file: No such file or directory
解决问题后,它将显示Syntax OK。
# httpd -t -f conf/httpd.conf.debug
Syntax OK
8.显示httpd构建参数
使用选项 -V(大写 V),显示 Apache 版本号和构建 Apache 时使用的所有参数。
# httpd -V
Server version: Apache/2.2.9 (Unix)
Server built: Jul 14 2008 15:36:56
Server's Module Magic Number: 20051115:15
Server loaded: APR 1.2.12, APR-Util 1.2.12
Compiled using: APR 1.2.12, APR-Util 1.2.12
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
如果您只想显示 Apache 版本号,请使用选项 -v(小写 v),如下所示。
# httpd -v
Server version: Apache/2.2.9 (Unix)
Server built: Jul 14 2018 15:36:56
9. 仅按需加载特定模块。
有时您可能不想加载 Apache 中的所有模块。例如,您可能希望仅在测试 LDAP 时将 ldap 相关模块加载到 Apache。这可以实现如下所示。
修改 httpd.conf 并添加名为 load-ldap 的IfDefine指令(您可以随意命名)。
<IfDefine load-ldap>
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
</IfDefine>
当你在测试ldap并且想加载ldap相关模块时,将load-ldap传递给Option-D,如下图:
# httpd -k start -e debug -Dload-ldap -f /etc/httpd/conf/httpd.conf.debug
[Sun Aug 17 14:14:58 2018] [debug] mod_so.c(246): loaded module ldap_module
[Sun Aug 17 14:14:58 2018] [debug] mod_so.c(246): loaded module authnz_ldap_module
[Note: Pass -Dload-ldap, to load the ldap modules into Apache]
# apachectl start
[Note: Start the Apache normally, if you don't want to load the ldap modules.]
- 点赞
- 收藏
- 关注作者
评论(0)