Apache Access Log中的OPTIONS *的含义

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Apache Access Log中的OPTIONS *的含义

在Apache的Access Log中会看到很多如下的访问日志:

 
 
  1. 127.0.0.1 - - [05/May/2011:10:54:07 +0800] "OPTIONS * HTTP/1.0" 200 -
  2. 127.0.0.1 - - [05/May/2011:10:54:08 +0800] "OPTIONS * HTTP/1.0" 200 -
  3. 127.0.0.1 - - [05/May/2011:10:54:09 +0800] "OPTIONS * HTTP/1.0" 200 -
  4. 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进程:

 
 
  1. static apr_status_t pod_signal_internal(ap_pod_t *pod)
  2. {
  3. apr_status_t rv;
  4. char char_of_death = '!';
  5. apr_size_t one = 1;
  6. rv = apr_file_write(pod->pod_out, &char_of_death, &one);
  7. if (rv != APR_SUCCESS) {
  8. ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
  9. "write pipe_of_death");
  10. }
  11. return rv;
  12. }

但此时, Worker进程不会去读这些状态字, 因为他们还在沉睡。

这个时候Apache就会发送一个OPTIONS请求给自己, 唤醒这些沉睡的进程:

 
 
  1. static apr_status_t dummy_connection(ap_pod_t *pod)
  2. {
  3. //...有省略
  4. /* Create the request string. We include a User-Agent so that
  5. * adminstrators can track down the cause of the odd-looking
  6. * requests in their logs.
  7. */
  8. srequest = apr_pstrcat(p, "OPTIONS * HTTP/1.0\r\nUser-Agent: ",
  9. ap_get_server_banner(),
  10. " (internal dummy connection)\r\n\r\n", NULL);
  11. //...有省略
  12. }

这些进程在处理完当前请求以后(OPTIONS请求), 就会发现, oh, 主进程让我退出。

 
 
  1. static void child_main(int child_num_arg)
  2. {
  3. //...有省略
  4. while (!die_now && !shutdown_pending) {
  5. //...有省略
  6. //1. listen
  7. //2. accept
  8. //3. process request
  9. /* Check the pod and the generation number after processing a
  10. * connection so that we'll go away if a graceful restart occurred
  11. * while we were processing the connection or we are the lucky
  12. * idle server process that gets to die.
  13. */
  14. if (ap_mpm_pod_check(pod) == APR_SUCCESS) { /* selected as idle? */
  15. die_now = 1;
  16. }
  17. //...有省略
  18. }
  19. //...有省略
  20. }

于是, 它就做完清理工作, 然后自我消亡了~~~

原文发布时间:2014-11-09

本文来自云栖合作伙伴“linux中国”

相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
目录
相关文章
|
2月前
|
存储 算法 数据挖掘
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(2)
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(2)
165 1
|
2月前
|
存储 安全 数据挖掘
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(1)
带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(1)
144 1
|
2月前
|
小程序
【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
405 0
|
2月前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
2月前
|
存储 监控 安全
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(1)
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(1)
197 1
|
2月前
|
SQL 分布式计算 Hadoop
org.apache.hadoop.security.AccessControlException Permission denied: user=anonymous, access=WRITE...
在尝试通过 HiveServer2 远程执行 DDL 操作时遇到权限错误,错误信息显示匿名用户(`anonymous`)无权执行写操作。解决方案包括:1) 使用 `hdfs dfs -chmod -R +777 /warehouse` 给目录授权(不推荐,仅适用于测试环境);2) 配置 Hive 和 Hadoop,创建具有权限的用户,如 `ad`,并将该用户添加到 Hive 的管理员角色和 Hadoop 的 proxyuser 配置中,然后重启相关服务。通过 `beeline` 测试连接和操作,确认权限问题已解决。
|
2月前
|
Oracle 关系型数据库 数据库
实时计算 Flink版操作报错合集之执行Flink job,报错“Could not execute SQL statement. Reason:org.apache.flink.table.api.ValidationException: One or more required options are missing”,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
146 0
|
2月前
|
SQL 存储 安全
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(2)
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(2)
237 0
|
2月前
|
Apache
web服务器(Apache)访问日志(access_log)详细解释
web服务器(Apache)访问日志(access_log)详细解释
|
2月前
|
存储 消息中间件 监控
Zoom 基于Apache Hudi 的流式日志处理实践
Zoom 基于Apache Hudi 的流式日志处理实践
56 1

推荐镜像

更多