像高级用户一样使用 Apachectl 和 Httpd 的 9 个技巧

举报
Tiamo_T 发表于 2021/11/24 22:04:28 2021/11/24
【摘要】 当你安装的Apache2之后,如果你想使用的apachectl和httpd的,以它的最大潜力,你应该超越使用启动,停止和重新启动。本文提供的 9 个实际示例将帮助您非常有效地使用 apachectl 和 httpd。

当你安装的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.]
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。