Last active
September 1, 2021 07:30
-
-
Save scovetta/5653919 to your computer and use it in GitHub Desktop.
Optimized Nginx configuration, from http://dak1n1.com/blog/12-nginx-performance-tuning
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This number should be, at maximum, the number of CPU cores on your system. | |
# (since nginx doesn't benefit from more than one worker per CPU.) | |
worker_processes 24; | |
# Number of file descriptors used for Nginx. This is set in the OS with 'ulimit -n 200000' | |
# or using /etc/security/limits.conf | |
worker_rlimit_nofile 200000; | |
# only log critical errors | |
error_log /var/log/nginx/error.log crit | |
# Determines how many clients will be served by each worker process. | |
# (Max clients = worker_connections * worker_processes) | |
# "Max clients" is also limited by the number of socket connections available on the system (~64k) | |
worker_connections 4000; | |
# essential for linux, optmized to serve many clients with each thread | |
use epoll; | |
# Accept as many connections as possible, after nginx gets notification about a new connection. | |
# May flood worker_connections, if that option is set too low. | |
multi_accept on; | |
# Caches information about open FDs, freqently accessed files. | |
# Changing this setting, in my environment, brought performance up from 560k req/sec, to 904k req/sec. | |
# I recommend using some varient of these options, though not the specific values listed below. | |
open_file_cache max=200000 inactive=20s; | |
open_file_cache_valid 30s; | |
open_file_cache_min_uses 2; | |
open_file_cache_errors on; | |
# Buffer log writes to speed up IO, or disable them altogether | |
#access_log /var/log/nginx/access.log main buffer=16k; | |
access_log off; | |
# Sendfile copies data between one FD and other from within the kernel. | |
# More efficient than read() + write(), since the requires transferring data to and from the user space. | |
sendfile on; | |
# Tcp_nopush causes nginx to attempt to send its HTTP response head in one packet, | |
# instead of using partial frames. This is useful for prepending headers before calling sendfile, | |
# or for throughput optimization. | |
tcp_nopush on; | |
# don't buffer data-sends (disable Nagle algorithm). Good for sending frequent small bursts of data in real time. | |
tcp_nodelay on; | |
# Timeout for keep-alive connections. Server will close connections after this time. | |
keepalive_timeout 30; | |
# Number of requests a client can make over the keep-alive connection. This is set high for testing. | |
keepalive_requests 100000; | |
# allow the server to close the connection after a client stops responding. Frees up socket-associated memory. | |
reset_timedout_connection on; | |
# send the client a "request timed out" if the body is not loaded by this time. Default 60. | |
client_body_timeout 10; | |
# If the client stops reading data, free up the stale client connection after this much time. Default 60. | |
send_timeout 2; | |
# Compression. Reduces the amount of data that needs to be transferred over the network | |
gzip on; | |
gzip_min_length 10240; | |
gzip_proxied expired no-cache no-store private auth; | |
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; | |
gzip_disable "MSIE [1-6]\."; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment