15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > Nginx 常用配置清单有哪些?

Nginx 常用配置清单有哪些?

时间:2024-01-05 15:24:01 | 来源:网站运营

时间:2024-01-05 15:24:01 来源:网站运营

Nginx 常用配置清单有哪些?:nginx在两处会发挥作用:

从包含文件来看,建议修改/etc/nginx/sites-available/default

建议先备份原有配置,再修改

cp /etc/nginx/sites-available/default default.bakvim /etc/nginx/sites-available/default

1 nginx目录结构介绍

2 nginx.conf总体架构

在上面nginx服务目录介绍中,/usr/local/nginx/conf/nginx.conf是nginx服务主配置文件,也是其核心配置文件,去掉包含#号和空号的内容,大致看下nginx.conf配置文件结构

第一部分 全局块

主要设置一些影响 nginx 服务器整体运行的配置指令。

比如: worker_processes 1; , worker_processes 值越大,可以支持的并发处理量就越多。

第二部分 events块

events 块涉及的指令主要影响Nginx服务器与用户的网络连接。

比如: worker_connections 1024; ,支持的最杭州接数。

第三部分 http块

http 块又包括 http 全局块和 server 块,是服务器配置中最频繁的部分,包括配置代理、缓存、日志定义等绝大多数功能。

server块:配置虚拟主机的相关参数。

location块(URL匹配特定位置的设置):配置请求路由,以及各种页面的处理情况。

upstream(负载均衡服务器设置):指令主要用于负载均衡,设置一系列的后端服务器,upstream后的名称和后面的 proxy_pass要对应起来。

3 全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。通常包括下面几个部分:

1 配置运行Nginx服务器用户(组)

如:user nobody nobody; user是个主模块指令,指定Nginx Worker进程运行以及用户组。

指令格式:user user [group];

user:指定可以运行Nginx服务器的用户;group:可选项,可以运行Nginx服务器的用户组。

如果user指令不配置或者配置为user nobody nobody,默认由nobody账户运行

2 worker process数

Nginx服务器实现并发处理服务的关键。woker_processes是主模块指令,制定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。worker_processes: CPU核心数,(双核4线程,可以设置为4),默认:worker_processes: 1

网上推荐:据实践表明,nginx的这个参数在一般情况下开4个或8个就可以了,再往上开的话优化不太大。(https://www.cnblogs.com/aaron-agu/p/8003831.html

指令格式:worker_processes number | auto;

number : Nginx 进程最多可以产生的worker process 数。auto : Nginx 进程将自动检测。在按照上面的配置格式配置了之后,假如上面的数目是2,那么启动Nginx服务器后,在后台主机上查看Nginx的进程情况,可以看到应该是有2个Nginx进程。

3.错误日志的存放路径

error_log 是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug,info,notice,warn,error,erit可供选择,其中,debug输出日志最为详细,而crit输出日志最少。

指定格式:error_log file | stderr;

如:error_log logs/error.log info;

4.Nginx进程PID存放路径

Nginx进程是作为系统守护进程在进行,需要在某个文件中保存当前运行程序的主进程号,Nginx支持该保存文件路径的定义。

指令格式:pid file;

如:pid logs/nginx.pid; pid是个主模块指令,用来指定进程pid的存储文件位置。

5.worker_rlimit_nofile

指定进程可以打开的最多文件描述数目,理论值应该是最多打开文件数(ulimit -n )与nginx进程数相除,但是Nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。

现在在Linux2.6 内核下开启文件打开数为65535,worker_rlimit_nofile 就相应应该填写65535.这是因为Nginx调度时请求到进程并不是那么均衡,所以假如填写10240,总并发量达到3-4万时就有进程超过10240了,这就会返回502。

如:worker_rlimit_nofile 65535; 用来绑定worker进程和CPU,Linux内核2.4 以上可用

4 events块

events事件指令是设定Nginx的工作模式及连接数上限。每个配置选项的含义解释如下:

1.use

如:use epoll;

use是事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll 。其中select 和poll 都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。

2.worker_connections

如:worker_connections 65536;

work_connections也是个事件模块指令,用于定义Nginx每个进程的最杭州接数,默认是1024。注意一下几点:

  1. connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。
  2. 内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx。
  3. 进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,
nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;

设置ulimits:ulimit -SHn 65535

通过 ps -elf | grep nginx 找到 nginx 的worker进程ID

通过 cat /proc/31613/limits 查看,其中2291是worker进程ID,请注意其中的Max open files

从上面的分析可以看出nginx占用内存小,处理性能高,通过提高服务器的配置,Nginx可以应对更大的连接数

注意:

以上两个worker_processes与worker_connections 设置好合适大小,可以提示nginx处理性能,非常重要。原作者的话:

As a general rule you need the only worker with large number of worker_connections, say 10,000 or 20,000.However, if nginx does CPU-intensive work as SSL or gzipping and you have 2 or more CPU, then you may set worker_processes to be equal to CPU number.Besides, if you serve many static files and the total size of the files is bigger than memory, then you may increase worker_processes to utilize a full disk bandwidth.

翻译:

一般一个进程足够了,你可以把连接数设得很大。(worker_processes: 1,worker_connections: 10,000)

如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样(worker_processes: CPU核心数)或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,以充分利用IO带宽(主要似乎是IO操作有block)

5 http块

1 定义MIMI-Type

如:include mime.types;

指令格式:include file;

该指令主要用于将其他的Nginx配置或第三方模块的配置引用到当前的主配文件中,减少主配置文件的复杂度。default_type application/octet-stream;

default_type:属于HTTP核心模块指令,这里设定默认类型为二进制流。也就是当文件类型未定义时使用这种方式,

2 自定义服务日志

log_format 是Nginx的HttpLog模块指令,用于指定Nginx日志的输出日志。当然其中还有更为详细的配置,但是这里只做大略的研究学习,不过分深入细节。

3 允许sendfile方式传输文件

指令格式:sendfile on;

这个指令中的参数on是表示开启高效文件传输模式,默认是关闭状态(off),将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;

4 连接超时时间

指令格式:keepalive_timeout number;

长连接超时时间,单位是秒:设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;

如:keepalive_timeout 65;

5 server块的配置,即虚拟主机的配置

server #网站配置区域{ listen 80; #默认监听80端口 server_name www.lulu.com; #提供服务的域名主机名 location / { root html; #站点根目录(这里html是相对路径,默认网站根目录为:/usr/local/nginx/html) index index.thml index.htm; #默认首页文件,多个用空格分开 } error_page 500 502 503 504 /50x.html; #出现对应http状态码时,使用50x.html回应客户 location = /50x.thml { root html; #指定对应目录 }}

6 include /etc/nginx/conf.d/*.conf;

设置http端配置包含/etc/nginx/conf.d目录中所有以".conf"文件结尾的配置文件,一般将server段配置文件放在该目录下。

6 实例

1.反向代理案例

server { listen 80; server_name 192.168.4.32; #监听地址 location / { root html; #/html目录 proxy_pass http://127.0.0.1:8080; #请求转向 index index.html index.htm; #设置默认页 } }

2.负载均衡案例

在浏览器地址栏输入 http://192.168.4.32/example,平均到 5000 和 8080 端口中,实现负载均衡效果。

upstream myserver { server 192.167.4.32:5000; server 192.168.4.32:8080; } server { listen 80; #监听端口 server_name 192.168.4.32; #监听地址 location / { root html; #html目录 index index.html index.htm; #设置默认页 proxy_pass http://myserver; #请求转向 myserver 定义的服务器列表 } }

3.直接编写/etc/nginx/nginx.conf

user nginx_wb; #Linux下使用 top查寻后显示的用户名称# worker_processes 值越大,可以支持的并发处理量就越多 worker_processes auto; pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;daemon off;events { #支持的最杭州接数1024 默认为512 worker_connections 768; accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept off; #设置一个进程是否同时接受多个网络连接,默认为off}http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; #Nginx 的默认值是 65 秒,有些浏览器最多只保持60秒,所以可设定为 60 秒。若将它设置为 0,就禁止了keepalive连接。 keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; #sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 # server_names_hash_bucket_size 64; # server_name_in_redirect off; ###定义上游服务器(需要被nginx真实代理访问的服务器),和下面的server配套使用 upstream backServer{ #轮询服务器,weight为服务器权重,与访问频率成正比,max_fails最大超时次数,fail_timeout为中断时间 server 172.16.2.57:8080 weight=3 max_fails=1 fail_timeout=60s; server 172.16.2.57:8081 weight=3 max_fails=1 fail_timeout=60s; #server 192.168.10.121:3333 backup; #热备 } server { #keepalive_requests 120; #单连接请求上限次数 ##监听的端口号 listen 80; ### 监听地址 服务名称 server_name www.lzh.com; #### 匹配URL路径地址 /表示匹配所有路径地址 默认不区分大小写 location / { #故障转移的条件:如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。 proxy_next_upstream http_502 http_504 error timeout invalid_header; ### 指定上游服务器负载均衡服务器,这个名称和upstrean后的名称一致 proxy_pass http://backServer; ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间 proxy_connect_timeout 1s; ###nginx发送给上游服务器(真实访问的服务器)超时时间 proxy_send_timeout 1s; ### nginx接受上游服务器(真实访问的服务器)超时时间 proxy_read_timeout 1s; # 重试次数 proxy_next_upstream_tries 3; index index.html index.htm; #deny 127.0.0.1; #拒绝的ip #allow 172.18.5.54; #允许的ip } } include /etc/nginx/mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain # SSL Settings ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; # Logging Settings #access_log off; #取消服务日志 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # Gzip Settings gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;}#mail {# # See sample authentication script at:# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript# # # auth_http localhost/auth.php;# # pop3_capabilities "TOP" "USER";# # imap_capabilities "IMAP4rev1" "UIDPLUS";# # server {# listen localhost:110;# protocol pop3;# proxy on;# }# # server {# listen localhost:143;# protocol imap;# proxy on;# }#}

4.实际使用过的负载均衡配置

worker_processes 8;# error_log logs/error.log;error_log /dev/null;events { worker_connections 65535;}http { upstream api{ server 10.132.237.12:10523; server 10.132.237.12:10520; } log_format main '$time_iso8601|$remote_addr|' '$http_x_forwarded_for|$status|$request_time|$upstream_response_time|' '$request_length|$body_bytes_sent|$host|$request|$http_referer|$http_user_agent'; server { listen 10521; client_max_body_size 10M; # access_log logs/access.log main; proxy_read_timeout 5; proxy_send_timeout 5; access_log off; location / { proxy_pass http://api/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }}

5.排错地址

/var/log/nginx/error.log

/var/log/nginx/access.log.

6.不重启的情况下加载配置

测试是否写对了:nginx -t

不重启服务的情况下,加载新的内容:nginx -s reload

参考文献

  1. Nginx配置参数中文说明详解(负载均衡与反向代理)https://www.jb51.net/article/182585.htm

关键词:清单,配置

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭