Apache的基本配置与使用

前言

Apache的源代码的大概结构已经了解了,但是如果不知道apache的基本配置和使用方法,依然不能很好的编辑、查看其源代码。因此这篇博客主要是参照官方的文档查看apache的启动重启方法。

Apache的基本配置

Apache的基本配置是通过配置文件http.conf 来实现的。
这一部分有前辈写过非常详细的博客了,因此我也不抄录了。

一个非常详细的apache的配置教程:
https://www.cnblogs.com/hh1137054072/p/7612652.html

Apache的启动

启动过程

如果在配置文件中指定的监听的端口是80(默认为80),或其他任何低于1024的端口,那么必须通过root启动apache,以便它可以绑定到这个特权端口。

一旦服务器启动并执行了一些诸如打开其日志文件的初步活动,它将启动几个子进程,这些子进程负责监听和响应来自客户端的请求。主httpd进程继续以root用户身份运行,但子进程作为一个权限较低的用户运行。这一部分多处理模块控制。

启动httpserver需要通过bin目录下的apachectl控制脚本调用httpd可执行文件。这个脚本设置了某些环境变量来适应不同的操作系统。也可以直接编辑apachectl脚本,更改​​顶部附近的HTTPD变量,以指定httpd二进制文件的正确位置和其他的命令行参数。

httpd在被调用时首先要做的是找到并读取配置文件httpd.conf。该文件的位置是在编译时设置的,但可以使用-f命令行选项在运行时指定其位置,如下所示

/apache/bin/apachectl -f /usr/local/apache/conf/httpd.conf

如果在启动过程中一切顺利,服务器将从终端分离,命令提示符将立即返回。这表示服务器已启动并正在运行。然后,可以使用浏览器连接到服务器,并在DocumentRoot目录中查看测试页面。

启动过程中的错误

如果Apache在启动过程中遇到严重的问题,那么它将在退出之前向控制台或ErrorLog写入描述问题的消息。

最常见的错误信息之一是“Unable to bind to Port ...”。 此消息通常是由以下两种情况引起的:

  • 尝试在未以root用户身份登录时在特权端口上启动服务器; 要么

  • 尝试启动服务器时,有另一个Apache实例或其他Web服务器已经绑定到相同的端口。

有关进一步的故障排除说明,请参阅Apache FAQ

Apache的停止和重启

为了停止或重新启动Apache HTTP Server,您必须向正在运行的httpd进程发送一个信号,有两种方式发送信号:

  • 使用unix kill命令将信号直接发送到进程。
    系统上有许多正在运行的httpd可执行文件,但是只能把信号发给他们的父进程(它的进程号可以在PidFile中查看)。有四个信号可以发送给父进程:TERM,USR1,HUP和WINCH

要发送一个信号给父进程,可以使用下面的命令
kill -TERM cat /usr/local/apache/logs/httpd.pid

  • 使用-k命令行选项:stop,restart,graceful和graceful-stop 。这些是httpd二进制文件的参数,但是我们建议您使用apachectl控制脚本发送它们,它将把它们传递给httpd。

在发出httpd信号后,您可以以下命令来了解​​其进展情况:
tail -f /usr/local/apache2/logs/error_log

立即停止

apachectl -k stop

发送TERM或停止信号给父进程使它立即试图杀死所有的子进程。 这个过程可能需要几秒钟的时间。 然后父进程本身也退出。 正在进行的请求都会被终止,并且新来的请求不会再被响应。

优雅停止

apachectl -k graceful-stop

WINCH或优雅停止信号会导致父进程通知子进程在处理完当前请求后退出(或者如果他们没有提供任何服务,立即退出)。 父进程然后删除其PidFile并停止监听所有端口。

父进程继续运行,并监视正在处理请求的子进程。一旦所有的子进程已经完成并退出,或者GracefulShutdownTimeout指定的超时已经到达,父进程也将退出。 如果超时,任何剩余的子进程将被发送一个TERM信号强迫他们退出。

当处于“优美”状态时,TERM信号将立即终止父进程和所有子进程。 但是,由于PidFile将被删除,您将无法使用apachectl或httpd发送此信号。

立即重启

apachectl -k restart

发送HUP或重新启动信号给父进程,使它像TERM中那样关闭其子进程,但父进程不会退出。 它重新读取其配置文件,并重新打开所有日志文件。 然后它产生了一组新的子进程,并继续提供服务。

mod_status的用户会注意到发送HUP时服务器统计信息被设置为零。

优雅重启

apachectl -k graceful

向父进程发送USR1或优雅重启的信号会导致父进程通知子进程在处理完当前请求后退出(或者如果他们没有提供任何服务,立即退出)。 父进程重新读取配置文件并重新打开日志文件。 当每个子进程死亡时,父母将其替换为新一代配置中的子进程,该子进程立即开始提供服务。

优雅重启会尝试维护适合当前服务器负载的子进程的数量,并根据输入的参数来满足完成重启的功能。

重新启动时,首先进行语法检查,以确保配置文件中没有错误。 如果你的配置文件中有错误,你会得到关于该语法错误的错误消息,服务器将拒绝重新启动。 这样可以避免服务器暂停,然后无法重新启动的情况。

但这仍然不足以保证服务器将正确重启。 要想检查配置文件的语义以及语法,可以尝试以非root用户身份启动httpd。 如果没有错误,它将尝试打开它的套接字和日志,并且因为它不是root(或者因为当前运行的httpd已经绑定了这些端口)而失败。 但是如果是因为任何其他的原因失败,那么它可能是又配置文件错误,应该在正常重启之前解决错误。

总结

这篇博客主要是参考官方文档大概的了解了一下Apache的基本配置和启动重启等基本操作。

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值