Nginx 参数配置相关

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Nginx 参数配置相关


Nginx
参数配置相关


目的:

Nginx配置的点滴学习总结,主要目的在于分析Nginx与性能相关的一些参数设置,以便性能调优时选择最优配置

 

环境:

$ cd /usr/local/nginx/sbin/

$ ./nginx -v

nginx version: nginx/1.8.0

 

配置文件说明:

# cat /usr/local/nginx/conf/nginx.conf

#使用的用户和组

#user  nobody;

说明:

语法:user user [group];

默认值: user nobody nobody;

 

#定义工作衍生进程(worker processe)数

worker_processes  1;

 

说明:

语法:worker_processes number | auto; number:指定进程数量,auto:自动调整为可获取的CPU核数

默认值:worker_processes 1;

worker_processes的最佳值依赖很多因素,包括(但不局限于)CPU核数,存储数据的硬盘驱动数量,负载模式。如果拿捏不定的话,设置为可获取的CPU核数或者auto

1.3.81.2.5版本开始,才支持auto参数

参考连接:

http://nginx.org/en/docs/ngx_core_module.html#worker_processes

 

nginx有一个主进程和一些工作进程(Worker processes)。主进程主要用于读取和评估配置,维护工作进程。工作进程真正执行请求的处理。nginx采用基于事件的模型(event-based model)和依赖操作系统的机制有效的分发请求到不同的工作进程中。

参考连接:

http://nginx.org/en/docs/beginners_guide.html

 

# [ debug | info | notice | warn | error | crit ]

#可以在下方直接使用[ debug | info | notice | warn | error | crit ] 参数

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

 

说明:

语法:error_log file [level];

默认值:error_log logs/error.log error;

 

配置日志。如果没指定日志文件和日志级别,则使用默认文件和默认级别。

第一个参数:file -定义存储日志的文件,建议存储路径:/var/log/nginx.error_logstderr -选择标准错误文件;可通过指定”syslog:”前缀配置日志记录到sysLog,指定“memory:前缀和buffer大小来配置日志记录到循环内存缓冲区,这个通常用于调试,比如error_log memory:32m debug;

第二个参数:定义日志级别,默认为error,可以是以下参数之一:

debug, info, notice, warn, error, crit, alert,emerg。所列日志级别按严重程度升序排序。指定某个日志级别后,级别在其之后(更严重级别)的日志也会被记录。比如指定了warn,那么error, crit, alert, emerg级别的日志都会被记录。

如果需要调试日志,编译nginx时需要携带--with-debug选项编译,更多查看A debugging log

 

参考连接:

http://nginx.org/en/docs/debugging_log.html#memory

http://nginx.org/en/docs/ngx_core_module.html#error_log

 

#指定pid存放的路径,建议:pid /var/run/nginx.pid;

#pid        logs/nginx.pid;

 

events {

   #设置可以被单个工作进程打开的最大并发连接数

   worker_connections  1024;

}

设置可以被单个工作进程打开的最大并发连接数。需要注意的是,该设置包含了所有的连接(比如和代理服务的连接),不仅仅是同客户端的连接。另外,实际并发连接数不能超过当前可打开最大文件描述符数限制,可通过修改work rlimit nofile来修改当前可打开最大文件描述符数限制。如下:

worker_processes  1;

worker_rlimit_nofile 65535;

 

说明:

语法:worker_rlimit_nofile number;

 

修改工作进程可打开的文件描述符数。用于不重启main进程的情况下,增加可打开的文件描述符数。number的值不能大于操作系统的进程能打开的最大的文件句柄数

events中还可以指定连接处理方式,如下

events {

worker_connections  1024;

   #指定连接处理方式,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;

use kqueue;

 

}

说明:

语法:use method;

注意,通常没必要显示指定连接的处理方式。Nginx会自动采用最有效率的连接方式。

 

语法: accept_mutex on | off;

默认值: accept_mutex off;

如果开启accept_mutexworker进程将轮流接收新的连接。否则,所有进程都会收到新连接的通知,这样,如果果新连接数量很少的情况下,可能会导致一些工作进程浪费系统资源。

 

对于支持EPOLL除外标识的系统,或者使用reuseportlisten后面携带reuseport选项),没必要开启accept_mutexThere is no need to enable accept_mutex on systems that support the EPOLLEXCLUSIVE flag (1.11.3) or when using reuseport.

 

1.11.3版本之前,默认值为on

参考连接:

http://nginx.org/en/docs/ngx_core_module.html#worker_connections

http://nginx.org/en/docs/ngx_core_module.html#worker_rlimit_nofile

http://nginx.org/en/docs/events.html

http://nginx.org/en/docs/ngx_core_module.html#accept_mutex

 

http {

   include       mime.types;

   default_type  application/octet-stream;

 

   #设置日志格式

   #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

   #                  '$status $body_bytes_sent "$http_referer" '

#                  '"$http_user_agent" "$http_x_forwarded_for"';

更多详情参考:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

 

   #设置访问日志,如果不必要的话,可以设置关闭access_log off;让读取磁盘IO操作更快

#access_log  logs/access.log  main;

更多详情参考:http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log

 

#sendfile()起作用,建议开启

   sendfile        on;

   #仅在sendfile开启的情况下使用tcp_nopush

#tcp_nopush     on;

更多详情参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#tcp_nopush

 

# tcp_nodelaysend_lowat在默认配置中是没有体现的

tcp_nodelay  on;

语法:tcp_nodelay on | off;

默认值:tcp_nodelay on;

开启、禁用TCP_NODELAY选项。该选项仅在连接处于keep-alive状态下使用。

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#tcp_nodelay

 

send_lowat       12000;

说明:

语法: send_lowat size;

默认值: send_lowat 0;

如果size设置为非0值,nginx将通过使用kqueueNOTE_LOWA标识或SO_SNDLOWAT选项尽量减少send操作次数

LinuxSolarisWindows上,该指令被忽略

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#send_lowat

 

   #keepalive_timeout  0;

keepalive_timeout  65;

 

说明:

语法:keepalive_timeout timeout [header_timeout];

默认值:keepalive_timeout 75s;

第一个参数:设置keep-alive客户端连接在服务器端保持open状态时间,超过这个时间服务器将关闭连接。如果设置为0,那么禁用keep-alive客户端连接。

第二个参数:可选参数,在响应头头域设置一个响应头Keep-Alive: timeout=time,其中time等于header_timeoutIE浏览器会在大致60s后自动关闭keep-alive连接。

这里如果设置时间太长,连接长时间不关闭,而导致连接太多,占用过多资源,所以值得根据具体情况设置。

参考连接:    http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout

 

#可以考虑补充以下指令

reset_timeout_connection on;

 

语法:reset_timedout_connection on | off;

默认值:reset_timedout_connection off;

帮助避免已经关闭的socket长时间处于FIN_WAIT1状态并占用缓冲区(This helps avoid keeping an already closed socket with filled buffers in a FIN_WAIT1 state for a long time)。也就说开启后,可以避免不必要的资源占用。

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#reset_timedout_connection

 

语法: send_timeout time;

默认值:send_timeout 60s;

设置传输响应体到客户端的超时时间。这里的超时时间是指两次成功写操作之间的时间间隔。在这个时间范围内,客户端没接收到任何数据,那么连接被关闭。

参考连接:http://nginx.org/en/docs/http/ngx_http_core_module.html#send_timeout

 

#gzip  on;

说明:

语法:gzip on | off;

开启、禁用压缩请求响应体(response),开启后可大大减少传输数据的大小,建议开启。可以配合其它gzip_xxxx设置使用。

gzip on;

   gzip_min_length  1100;

   gzip_buffers     4 8k;

gzip_types       text/plain;

 

语法: gzip_min_length length;

默认:gzip_min_length 20;

设置仅响应头Content-Length的值超过gzip_min_length长度的响应体(response)才进行压缩。建议:如果请求小于1000字节,最好不要压缩它

参考连接:http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_min_length

 

语法:gzip_types mime-type ...;

默认值:gzip_types text/html;

指定除text/html之外的,需要压缩的响应体的MIME类型。如指定值*则匹配任意MIME类型(0.8.29)。携带text/html的响应体类型总是被压缩。

参考连接:http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_types

 

语法:gzip_buffers number size;

默认值:gzip_buffers 32 4k|16 8k;

设置用于压缩响应体的缓冲区数量和大小。默认的,buffer大小等于一个内存页大小,4K8K,取决于操作系统。

0.7.28为止,默认的使用44k8K

参考连接:http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_buffers

 

更多参数研究,查看官方文档:http://nginx.org/en/docs/

 

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
1月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
132 1
|
5月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
627 87
|
16天前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
157 18
|
5月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。
|
18天前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
145 17
|
2月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
3月前
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
568 10
|
2月前
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
113 0
|
4月前
|
安全 应用服务中间件 网络安全
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
262 0
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
|
4月前
|
JSON 前端开发 应用服务中间件
配置Nginx根据IP地址进行流量限制以及返回JSON格式数据的方案
最后,记得在任何生产环境部署之前,进行透彻测试以确保一切运转如预期。遵循这些战术,守卫你的网络城堡不再是难题。
196 3