设为首页 收藏本站
查看: 643|回复: 0

[经验分享] Apache Access Log中的Options的含义)ZT)http://www.laruence.com/2011/05/05/2002.html

[复制链接]

尚未签到

发表于 2015-8-5 11:41:40 | 显示全部楼层 |阅读模式
  说是, 在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进程出来, 以满足当前的请求.(参看:http://lamp.linux.gov.cn/Apache/ApacheMenu/mod /prefork.html).
  而在这些请求高峰过后, 如果额外fork出来的进程数大于了MaxSpareServers, Apache就会告诉这些worker进程退出, 那么问题就来了,,
  这些进程都在沉睡中啊, 怎么告诉他们, 并且让他们自我退出呢?
  Apache会首先发送一个退出状态字(GRACEFUL_CHAR !)给这些Work进程.

  • static apr_status_tpod_signal_internal(ap_pod_t*pod)
  • {
  •     apr_status_trv;
  •     char char_of_death = '!';
  •     apr_size_tone = 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_tdummy_connection(ap_pod_t*pod)
  • {
  • //...有省略
  •     /* Create the request string. We include a User-Agent so that
  • * adminstrators can track down the cause of the odd-looking
  • * requests in their logs.
  • */
  •     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

  •         /* Check the pod and the generation number after processing a
  • * connection so that we'll go away if a graceful restart occurred
  • * while we were processing the connection or we are the lucky
  • * idle server process that gets to die.
  • */
  •         if (ap_mpm_pod_check(pod) == APR_SUCCESS) { /* selected as idle? */
  •             die_now = 1;
  •         }
  • //...有省略
  •    }
  • //...有省略
  • }
  于是, 它就做完清理工作,, 然后自我消亡了~~~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94414-1-1.html 上篇帖子: Drupal 6 Clean URL configuration on Windows XP and Apache 2.2(依此实现Clean URL) 下篇帖子: Apache上的防图片/mp3盗链配置:mod_rewrite it
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表