Debugging Apache Internal Dummy Connections: IPv6 ::1 OPTIONS Requests in Access Logs


2 views

In Apache HTTP server environments, you might encounter millions of log entries like this:

::1 - - [21/Nov/2011:16:15:54 +0000] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.15 (Unix) PHP/5.2.13 (internal dummy connection)"

These are internal health checks performed by Apache's worker management system. The IPv6 notation (::1) appears because modern Linux systems prioritize IPv6 loopback addresses over IPv4 (127.0.0.1).

Apache creates these dummy connections to:

  • Maintain worker processes in ready state
  • Test server responsiveness
  • Prevent connection setup delays

The requests are completely normal and indicate proper server operation. They become problematic only when:

  • Log rotation issues occur due to volume
  • Monitoring systems misinterpret them as real traffic
  • Storage gets filled with log files

To manage these logs without disabling essential functionality:

Option 1: Conditional logging

SetEnvIf User-Agent "internal dummy connection" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog

Option 2: Modify LogLevel

LogLevel warn
# Instead of:
# LogLevel debug

Option 3: IPv4 fallback

# In /etc/gai.conf
precedence ::ffff:0:0/96  100

While these connections consume minimal resources, in high-traffic environments you might want to adjust:

# In httpd.conf
KeepAliveTimeout 2
MaxKeepAliveRequests 100
MinSpareServers 5
MaxSpareServers 10

The exact tuning depends on your server's workload and available memory.

For log analysis tools, create a custom log format that excludes dummy connections:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" customlog
CustomLog /var/log/apache2/access.log customlog env=!dontlog

Remember that completely blocking these connections might negatively impact server performance during traffic spikes.


If you're seeing millions of entries like this in your Apache access logs:

::1 - - [21/Nov/2011:16:15:54 +0000] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.15 (Unix) PHP/5.2.13 (internal dummy connection)"

These are Apache's internal health check requests that appear even without any external traffic. The IPv6 notation (::1) represents localhost (equivalent to 127.0.0.1 in IPv4).

Apache creates these dummy connections for several internal operations:

  • Server maintenance tasks
  • Module initialization checks
  • Keep-alive monitoring
  • Prefork MPM child process management

The OPTIONS * HTTP/1.0 method is a special request type that:

1. Doesn't target any specific resource
2. Checks server capabilities
3. Maintains persistent connections
4. Helps child processes stay alive

To reduce or eliminate these logs while maintaining functionality:

# In httpd.conf or your virtual host configuration
LogLevel warn
SetEnvIf User-Agent "internal dummy connection" dontlog
CustomLog logs/access_log common env=!dontlog

# For mod_status users
<Location /server-status>
    SetHandler server-status
    Require local
    ExtendedStatus On
</Location>

For more granular control using conditional logging:

# Filter out both IPv4 and IPv6 dummy connections
SetEnvIf Remote_Addr "127\.0\.0\.1" loopback
SetEnvIf Remote_Addr "::1" loopback
CustomLog logs/access_log combined env=!loopback

While these connections are lightweight, excessive logging can:

  • Inflate log file sizes unnecessarily
  • Increase disk I/O operations
  • Make log analysis more difficult
  • Potentially trigger log rotation prematurely

This behavior varies across Apache versions:

Version Behavior
2.2.x Frequent dummy connections
2.4.x Reduced frequency
2.4.41+ Configurable via new directives

Instead of completely disabling these logs, consider:

# Create a separate log file just for internal requests
CustomLog logs/internal_conn.log "%h %l %u %t \"%r\" %>s %b" env=loopback