Nginx Configuration For Performance on Cloud Server Will Have Difference With a Physical Server With Multiple Processors or Multiple Cores. Previously, we talked about multi-core processors. This short guide will guide you for Nginx configuration for performance on Cloud Server instances – the cores are virtual, not physical.
Nginx Configuration For Performance on Cloud Server
Physical server, obviously will give measurable result; but the risks, cost of maintenance, difficulty in changing hardware in real time is more. Practically, we can not take much risk of going above the limit with a Cloud Server instance, it can die so badly that you can not even do a SSH. There is no real hard disk, if it fails to reboot, it is a challenge to return.
The global Nginx configuration file is located at :
/etc/nginx/nginx.conf. This falls among the Core Module documentation on the official website :
First is :
worker_processes for Cloud Server instances or Virtual Instances, should be the exact number of virtual cores. There is also an
auto option now. We can get the value of cores by running this command :
cat /proc/cpuinfo | grep processor | wc -l
File descriptors are part of the POSIX application programming interface. A file descriptor is a non-negative integer, representing in C programming language as the type int. We need to set the
worker_rlimit_nofile for this purpose, else the default value 2000 will work as max limit :
Next is :
block. The max clients value determines how much clients will be served per worker, which is multiplier of worker_connections and worker_processes. We can safely go with :
This is an example full configuration :
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent "$http_referer" '
open_file_cache max=5000 inactive=20s;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6]\.(?!.*SV1)"
Optionally, you can add :
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=10 nodelay;
This will limit the number of connections per single IP and the number of requests for a given session. Second part is defining the zone. You should test load average for performance tweaking rather than blindly running behind how many millions page a $40/month can serve. Thats honestly theoretical. Without, load balancing; single Cloud Server instance can badly fail even only 100 user opens same webpage of a WordPress installation.