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. UML中的图的出现顺序

    上接:UML从需求到设计--用例 从开始接触UML到现在对UML逐渐有了更深入的了解.刚开始,对于UML总是感觉UML就是图.一提起UML 就想着这个是画图的东西. 具体这些图都是干什么的.为什么会有 ...

  2. Java Hour 60 逃不开的GC

    第一个大家都应该知道的概念就是应用程序中不断的new 分配了内存,却没有显式的代码去清理内存,而执行这个清理过程的自动垃圾回收的过程就叫做GC. 但是,JVM 说明并没有要求一定要有GC,JVM 说明 ...

  3. GDUT 校赛02 dp回文串

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABSkAAAIhCAIAAAAtmainAAAgAElEQVR4nOzdfaxkd33n+ZJacstqa3 ...

  4. RTP与RTCP协议介绍

    转自:http://zhangjunhd.blog.51cto.com/113473/25481/ 本文主要介绍RTP与RTCP协议. author: ZJ   06-11-17 Blog: [url ...

  5. (二)WebRTC手记之框架与接口

    转自:http://www.cnblogs.com/fangkm/p/4370492.html 转载请注明出处:http://www.cnblogs.com/fangkm/p/4370492.html ...

  6. HttpSession--会话

  7. 设置session失效的几种方法

    转自:http://www.cnblogs.com/linjiqin/archive/2011/06/15/2081673.html 在系统登录后,都会设置一个当前session失效的时间,以确保在用 ...

  8. ArcGIS for Android地图控件的5大常见操作

    GIS的开发中,什么时候都少不了地图操作.ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS ...

  9. hdu 5761 Rowe Bo 微分方程

    1010 Rower Bo 首先这个题微分方程强解显然是可以的,但是可以发现如果设参比较巧妙就能得到很方便的做法. 先分解v_1v​1​​, 设船到原点的距离是rr,容易列出方程 \frac{ dr} ...

  10. 简单几何(直线位置) POJ 1269 Intersecting Lines

    题目传送门 题意:判断两条直线的位置关系,共线或平行或相交 分析:先判断平行还是共线,最后就是相交.平行用叉积判断向量,共线的话也用叉积判断点,相交求交点 /********************* ...