nginx调优
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调优的更多相关文章
- nginx调优(二)
nginx调优(一) (1).Fastcgi调优 FastCGI全称快速通用网关接口(FastCommonGatewayInterface),可以认为FastCGI是静态服务和动态服务的一个接口.Fa ...
- nginx调优配置
nginx调优配置 user www www; #工作进程:数目.根据硬件调整,通常等于CPU数量或者2倍于CPU. worker_processes 8; worker_cpu_affinity 0 ...
- 记一次单机Nginx调优,效果立竿见影
一.物理环境 1.系统是Centos 8,系统配置 2核4G,8M带宽,一台很轻的应用服务器. 2.站点部署情况.但站点部署两个实例,占用两个端口,使用nginx 负载转发到这两个web站点. 二. ...
- nginx调优(一)
(1).隐藏nginx版本号 隐藏版本号可以有效避免黑客根据nginx版本信息,查找对应漏洞进行攻击. 下载nginx源码包(http://nginx.org/en/download.html)并上传 ...
- nginx调优buffer参数设置
内容来自 https://blog.tanteng.me/2016/03/nginx-buffer-params/.有空再详细了解 Nginx性能调优之buffer参数设置 打开Nginx的error ...
- nginx 调优
般来说nginx配置文件中对优化比较有作用的为以下几项:worker_processes 8;1 nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity 0 ...
- Nginx 调优经验记录
1.2017年连续爆出5.x版本xshell安全问题和intel的cpu设计漏洞 ,此时我就注意到尽量少暴露自己线上使用的工具以及版本.例如:mysql版本,以及缓存层策略,服务器版本等,以下为 隐藏 ...
- Linux学习系列之Nginx调优实战
Nginx配置文件性能微调 全局的配置 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofi ...
- Nginx调优实战
Nginx配置文件性能微调 全局的配置 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofi ...
随机推荐
- 解决Inno Setup制作安装包无法创建桌面快捷方式的问题
转自:http://yedward.net/?id=104 昨天想把个java程序做成exe安装软件,然后就去下载了Inno Setup这个软件安装包制作软件,Inno Setup这个软件确实非常好用 ...
- 基于superagent 与 cheerio 的node简单爬虫
最近重新玩起了node,便总结下基本的东西,在本文中通过node的superagent与cheerio来抓取分析网页的数据. 目的 superagent 抓取网页 cheerio 分析网页 准备 N ...
- matlab中的ishghandle
ishghandle True for Handle Graphics object handles. ishghandle(H) returns an array that contains 1's ...
- 【练习】使用接口回调和handler实现数据加载到listview
代码结构 布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...
- Hark的数据结构与算法练习之地精(侏儒)排序
算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小 ...
- vim 全局替换命令
语法 :[addr]s/源字符串/目的字符串/[option] :%s/源字符串/目的字符串/c 全局替换命令为: :%s/源字符串/目的字符串/g [add ...
- JVM的GC实现详解
新生代中的98%对象都是“朝生夕死”的,所以并不需要按照1:1的比例来划分内存空间,而是将内存分为一块比较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivor. ...
- 2016 Multi-University Training Contest 8
solved 4/11 2016 Multi-University Training Contest 8 贪心 1001 Ball(BH) 代码: #include <bits/stdc++.h ...
- Codeforces Round #294 (Div. 2)
水 A. A and B and Chess /* 水题 */ #include <cstdio> #include <algorithm> #include <iost ...
- SQL 计算列
SQL计算列,可以解决一般标量计算(数学计算,如ColumnA*ColumnB)的问题,而子查询计算(如select sum(salary) from tableOther where id=’ABC ...