Nginx
 is
an open-source Web Server. It is a high-performance HTTP server that uses very
low server resources, is reliable and integrates beautifully with Linux. In this
article, I’ll talk about optimizing your nginx server for maximum
performance.

Install
Nginx with a minimal number of modules

Run
Nginx with only the required modules. This reduces the memory footprint and
hence the server performance. Example configuration

./configure --prefix=/webserver/nginx --without-mail_pop3_module --without-mail_imap_module  --without-mail_smtp_module --with-http_ssl_module  --with-http_stub_status_module  --with-http_gzip_static_module

worker_processes

A
worker process is a single-threaded process. If Nginx is doing CPU-intensive
work such as SSL or gzipping and you have 2 or more CPUs/cores, then you may set
worker_processes to be equal to the number of CPUs or cores. Example, i’m
running nginx on server has CPU is X3340 (4 cores) then i set worker_processes
= 4
. If you are serving a lot of static files and the total size of the
files is bigger than the available memory, then you may increase
worker_processes to fully utilize disk bandwidth.

worker_connections

This
sets the number of connections that each worker can handle. You can determine
the value by using ulimit
-n
command which output is something like 1024, then your worker
connections would need to be set to 1024 or less but 1024 is a good default
setting.
You
can work out the maximum clients value by multiplying this and the
worker_processes settings

max_clients = worker_processes * worker_connections

Buffers

One
of the most important things you need to tweak is the buffer sizes you allow
Nginx to use. If the buffer sizes are set too low Nginx will have to store the
responses from upstreams in a temporary file which causes both write and read
IO, the more traffic you get the more of a problem this becomes. Edit and set
the buffer size limitations for all clients as follows:

client_body_buffer_size 8K;
client_header_buffer_size 1k;
client_max_body_size 2m;
large_client_header_buffers 2 1k;

Where,

1.
client_body_buffer_size:
 The directive specifies the client request
body buffer size. If the request body is more than the buffer, then the entire
request body or some part is written in a temporary file.
2.
client_header_buffer_size:
 Directive sets the headerbuffer size for the
request header from client. For the overwhelming majority of requests it is
completely sufficient a buffer size of 1K.
3.
client_max_body_size:
 Directive assigns the maximum accepted body size
of client request, indicated by the line Content-Length in the header of
request. If size is greater the given one, then the client gets the error
“Request Entity Too Large” (413).
4.
large_client_header_buffers:
 Directive assigns the maximum number and
size of buffers for large headers to read from client request. The request line
can not be bigger than the size of one buffer, if the client send a bigger
header nginx returns error “Request URI too large” (414). The longest header
line of request also must be not more than the size of one buffer, otherwise the
client get the error “Bad request” (400).

You
also need to control timeouts to improve server performance and cut clients.
Edit it as follows:

client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     15;
send_timeout          10;

Where,

1.
client_body_timeout:
 Directive sets the read timeout for the request
body from client. The timeout is set only if a body is not get in one readstep.
If after this time the client send nothing, nginx returns error “Request time
out” (408).
2.
client_header_timeout:
 Directive assigns timeout with reading of the
title of the request of client. The timeout is set only if a header is not get
in one readstep. If after this time the client send nothing, nginx returns error
“Request time out” (408).
3.
keepalive_timeout:
 The first parameter assigns the timeout for
keep-alive connections with the client. The server will close connections after
this time. The optional second parameter assigns the time value in the header
Keep-Alive: timeout=time of the response. This header can convince some browsers
to close the connection, so that the server does not have to. Without this
parameter, nginx does not send a Keep-Alive header (though this is not what
makes a connection “keep-alive”).
4.
send_timeout:
 Directive assigns response timeout to client. Timeout is
established not on entire transfer of answer, but only between two operations of
reading, if after this time client will take nothing, then nginx is shutting
down the connection.

Access
Logs

By
default nginx will write every request to a file on disk for logging purposes.
If you don’t use access logs for anything you can simply just turn it off and
avoid the disk writes.

access_log off;

Gzip

Gzip
compress content before it is delivered to the client. It’s a simple and
effective way to speed up your site.

gzip             on;
gzip_comp_level  2;
gzip_min_length  1000;
gzip_proxied     expired no-cache no-store private auth;
gzip_types       text/plain application/xml;
gzip_disable     "MSIE [1-6]\.";

Caching
static files

80%
of the end-user response time is spent on the front-end. Most of this time is
tied up in downloading all the components in the page: images, stylesheets,
scripts, Flash, etc. Reducing the number of components in turn reduces the
number of HTTP requests required to render the page. Example, i’m using the
following configuration to cache static files on nginx

location ~* "\.(js|ico|gif|jpg|png|css|html|htm|swf|htc|xml|bmp|cur)$" {
root /home/site/public_html;
       add_header Pragma "public";
       add_header Cache-Control "public";
expires     3M;
       access_log  off;
log_not_found off;
}

KeepAlive

KeepAlive allows
multiple requests to be sent over the same TCP/IP connection. Turning it on can
greatly improve the speed of your server, particularly when you have static
pages and are serving quite a bit of images from your server. An example would
be a catalogue site with screenshots. From my experience it is best to keep it
On.
keepalive_timeout in
nginx has default is very high. I recommend change it to 10-20.

keepalive_timeout 15

Make
best nginx configuration

To
make best nginx configuration, you should visit to http://wiki.nginx.org/Pitfalls

nginx调优的更多相关文章

  1. nginx调优(二)

    nginx调优(一) (1).Fastcgi调优 FastCGI全称快速通用网关接口(FastCommonGatewayInterface),可以认为FastCGI是静态服务和动态服务的一个接口.Fa ...

  2. nginx调优配置

    nginx调优配置 user www www; #工作进程:数目.根据硬件调整,通常等于CPU数量或者2倍于CPU. worker_processes 8; worker_cpu_affinity 0 ...

  3. 记一次单机Nginx调优,效果立竿见影

    一.物理环境 1.系统是Centos 8,系统配置 2核4G,8M带宽,一台很轻的应用服务器. 2.站点部署情况.但站点部署两个实例,占用两个端口,使用nginx 负载转发到这两个web站点.  二. ...

  4. nginx调优(一)

    (1).隐藏nginx版本号 隐藏版本号可以有效避免黑客根据nginx版本信息,查找对应漏洞进行攻击. 下载nginx源码包(http://nginx.org/en/download.html)并上传 ...

  5. nginx调优buffer参数设置

    内容来自 https://blog.tanteng.me/2016/03/nginx-buffer-params/.有空再详细了解 Nginx性能调优之buffer参数设置 打开Nginx的error ...

  6. nginx 调优

    般来说nginx配置文件中对优化比较有作用的为以下几项:worker_processes 8;1 nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity 0 ...

  7. Nginx 调优经验记录

    1.2017年连续爆出5.x版本xshell安全问题和intel的cpu设计漏洞 ,此时我就注意到尽量少暴露自己线上使用的工具以及版本.例如:mysql版本,以及缓存层策略,服务器版本等,以下为 隐藏 ...

  8. Linux学习系列之Nginx调优实战

    Nginx配置文件性能微调 全局的配置 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofi ...

  9. Nginx调优实战

    Nginx配置文件性能微调 全局的配置 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofi ...

随机推荐

  1. SQL事务的使用

    在 SQL Server 中数据库事务处理是个重要的概念,也稍微有些不容易理解,很多 SQL 初学者编写的事务处理代码存往往存在漏洞,本文介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正 ...

  2. android去掉标题栏

    在AndroidManifest.xml修改 把 <applicationandroid:allowBackup="true"android:icon="@draw ...

  3. Kali Linux 2016.2发布提供虚拟机以及系统镜像下载

    Kali Linux 2016.2发布提供虚拟机以及系统镜像下载   Kali Linux 2016.2发布提供虚拟机以及系统镜像下载,本次Kali Linux 2016.2提供了五种桌面模式,分别为 ...

  4. Codeforces Round #330 (Div. 2)

    C题题目出错了,unrating,2题就能有很好的名次,只能呵呵了. 水 A - Vitaly and Night /***************************************** ...

  5. 递推DP URAL 1009 K-based Numbers

    题目传送门 题意:n位数,k进制,求个数分析:dp[i][j] 表示i位数,当前数字为j的个数:若j==0,不加dp[i-1][0]; 代码1: #include <cstdio> #in ...

  6. LightOJ1158 Anagram Division(状压DP)

    题目问一个数字字符串的不重复全排列有几个能被d整除. dp[S][m]表示用字符集合S构成的%d为m的数字字符串个数 dp[0][0]=0 我为人人转移,dp[S+{x}][(m*10+str[x]- ...

  7. BZOJ 1067 & Interval_Tree

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3099 Solved: 800 Description 我们常常 ...

  8. 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...

  9. Linux(Redhat)下redis安装

    原文:http://www.javaweb1024.com/data/NoSQL/2015/06/29/785.html redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系 ...

  10. java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...