今天小编给大家分享一下Apache的Access Log有什么作用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。access
今天小编给大家分享一下Apache的Access Log有什么作用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志的内容和格式
在Apache的Access Log中会看到很多如下的访问日志:
127.0.0.1 - - [05/May/2011:10:54:07 +0800] "OPTioNS * Http/1.0" 200 -127.0.0.1 - - [05/May/2011:10:54:08 +0800] "OPTIONS * HTTP/1.0" 200 -127.0.0.1 - - [05/May/2011:10:54:09 +0800] "OPTIONS * HTTP/1.0" 200 -127.0.0.1 - - [05/May/2011:10:54:10 +0800] "OPTIONS * HTTP/1.0" 200 -
这是什么意思呢?
Apache的文档中, 有如下的说明:
When the Apache HTTP Server manages its child processes, it needs a way to wake up processes that are listening for new connections. To do this, it sends a simple HTTP request back to itself. This request will appear in the access_log file with the remote address set to the loop-back interface (typically 127.0.0.1 or ::1 if IPv6 is configured). If you log the User-Agent string (as in the combined log fORMat), you will see the server signature followed by “(internal dummy connection)” on non-SSL servers. During certain periods you may see up to one such request for each httpd child process.
可是,为什么要唤醒呢? 唤醒是为了做什么呢?
在Apache Prefork模式下, 启动的时候,Apache就会fork出一些worker进程, 来准备接受请求, 这些worker进程,在完成准备工作以后, 就会进入block模式的监听沉睡中, 等待请求到来而被唤醒。
另外一方面, 在Prefork模式下, 当请求很多, 目前的worker进程数不够处理的时候, 就会额外再fork一些worker进程出来, 以满足当前的请求。
而在这些请求高峰过后, 如果额外fork出来的进程数大于了MaxSpareServers, Apache就会告诉这些worker进程退出, 那么问题就来了。
这些进程都在沉睡中啊, 怎么告诉他们, 并且让他们自我退出呢?
Apache会首先发送一个退出状态字(GRACEFUL_CHAR !)给这些Work进程:
static apr_status_t pod_signal_internal(ap_pod_t *pod){ apr_status_t rv; char char_of_death = '!'; apr_size_t one = 1; rv = apr_file_write(pod->pod_out, &char_of_death, &one); if (rv != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf, "write pipe_of_death"); }. return rv;}
但此时, Worker进程不会去读这些状态字, 因为他们还在沉睡。
这个时候Apache就会发送一个OPTIONS请求给自己, 唤醒这些沉睡的进程:
static apr_status_t dummy_connection(ap_pod_t *pod){//...有省略 srequest = apr_pstrcat(p, "OPTIONS * HTTP/1.0\r\nUser-Agent: ", ap_get_server_banner(), " (internal dummy connection)\r\n\r\n", NULL);//...有省略}
这些进程在处理完当前请求以后(OPTIONS请求), 就会发现, oh, 主进程让我退出。
static void child_main(int child_num_arg){//...有省略 while (!die_now && !shutdown_pending) {//...有省略 //1. listen //2. accept //3. process request if (ap_mpm_pod_check(pod) == APR_SUCCESS) { die_now = 1; }//...有省略 }//...有省略}
以上就是“Apache的Access Log有什么作用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。
--结束END--
本文标题: Apache的Access Log有什么作用
本文链接: https://lsjlt.com/news/310269.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0