NGINX Performance Tuning

in nginx •  6 years ago 

Nginx is remarkably capable of serving a huge number of requests with a very efficient latency. With the proper combination of hardware and software, Nginx can concurrently handle a massive number of requests per second.

First, you need to install the latest version of Nginx. Follow the official guild to install Nginx. https://www.nginx.com/resources/wiki/start/topics/tutorials/install/

Before moving forward, keep a backup of the original configuration file cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig

I've written inline comments on each configuration parameters that you may need to optimize. Please go through each of them and update as per your requirements.

Now start editing :
vim /etc/nginx/nginx.conf

# Basically, this number should match the number of cores on your system.
# But, the latest version calculates it automatically.
# Run 'nproc' to find out the number of cpu cores.
worker_processes 12; # Assuming that you have 12 cores
# Number of file descriptors used for Nginx.
# This can be set in the OS with 'ulimit -n 20000'
# or using /etc/security/limits.conf.
# If you don't set it then OS settings will be used which is by default 2000.
worker_rlimit_nofile 1000;

# Only log critical errors.
error_log /var/log/nginx/error.log crit;

# Provides the configuration file context in which the directives
# that affect connection processing are specified.
events {
    # 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;

    # Optimized to serve many clients with each thread, essential for Linux
    use epoll;

    # Accept as many connections as possible after Nginx gets the notification
    # about a new connection.
    # May flood worker_connections, if that option is set too low.
    multi_accept on;
}
http {

    # To speed up IO disable access log
    access_log off;

    # Cache informations about FDs, frequently accessed files.
    # Changing this can boost performance.
    # Test and find out the best setting for you
    open_file_cache max=20000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    # Sendfile copies data between one FD and other from within the kernel.
    # More efficient than read() + write(), since this 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 sent, good for small data bursts in real time.
    tcp_nodelay on;

    # Server will close the connection after this time.
    keepalive_timeout 30;

    # Number of requests a client can make over the keep-alive connection.
    keepalive_requests 100000;

    # Allow the server to close connection on non responding client,
    # this will free up memory
    reset_timedout_connection on;

    # Send the client a "request timed out"
    # if the body is not loaded by this time.
    # Default is 60.
    client_body_timeout 10;

    # If client stop responding, free up memory. Default is 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]\.";
    include conf.d/*.conf;
    include sites-enabled/*.conf;
}

To verify the configurations is syntactically correct, run sudo nginx -t. If okay, run sudo nginx -s reload to reload the configurations.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!