; PHP-FPM Configuration for High Concurrency (1000+ concurrent users)
; This configuration optimizes PHP-FPM for production workloads with high traffic

[www]
; Process manager (dynamic is recommended for high concurrency)
pm = dynamic

; Maximum number of child processes (CRITICAL for 1000+ concurrent users)
; Each child can handle ~5-10 concurrent requests depending on request complexity
; 200 children = 1000-2000 concurrent requests capacity
pm.max_children = 200

; Number of children created on startup
pm.start_servers = 20

; Minimum number of idle servers
pm.min_spare_servers = 10

; Maximum number of idle servers
pm.max_spare_servers = 30

; Maximum requests per child before recycling (prevents memory leaks)
pm.max_requests = 500

; Request handling timeout (seconds)
request_terminate_timeout = 300

; Slow request timeout (seconds) - log requests taking longer than this
request_slowlog_timeout = 30s

; Process priority (lower = higher priority)
; -5 is a good balance between performance and system stability
process.priority = -5

; Maximum execution time (seconds)
php_admin_value[max_execution_time] = 300

; Memory limit per process
php_admin_value[memory_limit] = 256M

; Upload limits
php_admin_value[upload_max_filesize] = 50M
php_admin_value[post_max_size] = 50M

; Error logging
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

; Performance optimizations
php_admin_value[opcache.enable] = 1
php_admin_value[opcache.memory_consumption] = 256
php_admin_value[opcache.interned_strings_buffer] = 16
php_admin_value[opcache.max_accelerated_files] = 10000
php_admin_value[opcache.revalidate_freq] = 2
php_admin_value[opcache.fast_shutdown] = 1
php_admin_value[opcache.validate_timestamps] = 0

; Session settings for Redis
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://redis:6379"

; Security settings
php_admin_value[expose_php] = 0
php_admin_value[allow_url_fopen] = 1
php_admin_value[allow_url_include] = 0

; Realpath cache for performance
php_admin_value[realpath_cache_size] = 4M
php_admin_value[realpath_cache_ttl] = 600
