
############# 全局配置### 指定nginx worker 进程运行的用户和用户组,默认是 nobody 账号#user nobody;#user ngxin nginxGroupName### 指定 nginx 要开启的子进程数。每个进程平均耗费 10M~20M 内存。 一般与cpu 内核心数量成倍数 建议指定2倍。总进程数 N + 1(master 进程)### 主进程负责监控端口,协调工作进程的工作状态,分配工作任务;工作进程负责进行任务处理。worker_processes 4;### cpu 亲和值worker_cpu_affinity 0001 0010 0100 1000;### 用于指定一个 nginx 进程可以打开的最多文件描述符数目,这里是 65535。 需要使用命令 ulimit -n 65535 进程设置(详情下移)。总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。# worker_rlimit_nofile 65535;### 定义全局的错误日志文件。级别有6个 debug info notice warn error crit 。日志内存越来越少#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;### 指定进程ID 储存的文件位置#pid logs/nginx.pid;################## 工作模型配置events {### 指定工作模型 - io多路复用类型 (会在启动日志 (error_log 配置)中展示)use epoll;### 单个 worker 进程可以允许同时建立外部连接到数量。无论这个连接是外部主动建立的,还是内部建立的。这里需要注意的是,一个工作进程建立一个连接后,进程将打开一个文件副本。所以这个数量还受操作系统设定的,进程最大可打开的文件数有关。### 最大客户端连接数 = worker_process * worker_connections;### 作为反向代理时的最大连接数 = 最大客户端连接数 / 4worker_connections 65535;}############## httphttp {### 支持的文件 mime 类型include mime.types;###设置了默认的类型为 二进制流(表现为文件下载)default_type application/octet-stream;### 日志的类型 main 为名字,可以设置多个日志内容的格式,用其他的字符串命名,再后续的 access_log 等地方使用#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;### 是否支持文件上传下载功能sendfile on;#tcp_nopush on;### http 连接的最长时间。(大文件上传过程中可能连接超过该值,导致服务端报timeout,单不能过大,过大导致很多很快完成的请求但是释放不了连接,可以 so_keepalive=60s; 解决该问题)配置段:http, server, locationkeepalive_timeout 65;### 指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。 配置段:http, server, location#client_body_timeout 20;### 客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。#send_timeout 10;#gzip on;### 负载均衡upstream tuling {server 127.0.0.1:8080;}############## 主机配置一,可以配置多个server {### 监听的域名和端口listen 80;server_name localhost;#charset koi8-r;### 访问日志#access_log logs/host.access.log main;############# URL 匹配一,可以配置多个(这个可以配置地址转发)location / {root html;index index.html index.htm;}### 异常状态显示的页面#error_page 404 /404.html;error_page 500 502 503 504 /50x.htmllocation = /50x.html {root html;}location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_params;proxy_pass http://127.0.0.1;}location ~ \.ht {deny all;}### url 转发### 假如请求的 url 是:http://xxx/request/test.html### 则会被代理成: http://server.com/test.html (也就是 request 会被过滤)### 反之,proxy_pass 的url 最后没有加 /,### 则会被代理成: http://server.com/request/test.html (也就是 request 没有被过滤)#location ^~ /request/ {# proxy_pass http://server.com/#}### 反向代理location /jyb {proxy_pass http://qurt/;proxy_read_timeout 1800s;proxy_set_header Host $host:$server_port;proxy_set_header X-real-ip $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}}
# 添加用户和用户组groupadd wwwuseradd -g www www
worker_process 配置
一般一个进程足够了,你可以把连接数设得很大。
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,
以充分利用IO带宽(主要似乎是IO操作有block)。(一般开一个就够了,多开几个,可以减少机器io带来的影响。)
服务器是“多个CPU+gzip+网站总文件大小大于内存”的环境,worker_processes设置为CPU个数的两倍比较好。
worker_cpu_affinity cpu 亲和值
Nginx默认没有开启利用多核cpu,我们可以通过worker_processes指令来启动多个worker,但是worker最终运行在哪些cpu核上是系统层进行调度的;我们可以通过增加worker_cpu_affinity指令来对worker所运行的cpu核做绑定,以此充分利用cpu多核cpu的性能。cpu是任务处理、计算最关键的资源,cpu核越多,性能就越好;通过将nginx worker绑定到特定的CPU上可以避免因为worker被频繁调度带来的CPU的cache miss和某些cpu核负载不均的问题。
worker_cpu_affinity 默认是没有开启的。
worker_cpu_affinity 可以将同1个进程绑定在2个逻辑CPU上:
worker_processes 4;worker_cpu_affinity 0001 0010 0100 1000;worker_processes 8;worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;worker_processes 16;worker_cpu_affinity 0000000000000001 0000000000000010 0000000000000100 0000000000001000 0000000000010000 0000000000100000 0000000001000000 0000000010000000 0000000100000000 0000001000000000 0000010000000000 0000100000000000 0001000000000000 0010000000000000 0100000000000000 1000000000000000;worker_processes 2;worker_cpu_affinity 0101 1010;Bind the first worker to CPU0/CPU2, bind the second worker to CPU1/CPU3. This is suitable for HTT.0101也就是第1、3个逻辑CPU上,1010就是第2、4个逻辑CPU上。自适应的方式来启动一定数量的worker,并且自动绑定到对应的cpu核心上,这里启动的worker数量和cpu核心数相同;worker_processes auto;worker_cpu_affinity auto;
# 查看cpu信息cat /proc/cpuinfo## 查看cpu 进程数cat /proc/cpuinfo | grep processorprocessor : 0processor : 1processor : 2processor : 3
ulimit -n 修改最大连接数
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux默认只有1024,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。
使用 ulimit -n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535,-S指soft,-H指hard)
有如下三种修改方式:
可以修改配置文件/etc/profile
#vi /etc/profile
加入一行
ulimit -SHn 65536
https://www.jianshu.com/p/b4aadb88b19a ulimit详解
验证Nginx的“进程最大可打开文件数”是否起作用
在linux系统中,所有的进程都会有一个临时的核心配置文件描述,存放路径在 /pro/进程号/limit。
通过 ps -elf | grep nginx 获取到 pid.
cat /pro/[pid 进程号]/limits 输出中看到 Max open files 值。
工作模式。io 多路复用类型
5种
- select poll 标准工作模式,效率低
- kqueue BSD系统
- epoll Linux 系统
- rtsig
root 和 alias 的区别
root 会带上匹配的路径(path),配置端 http server location if
alias 不会带上匹配的路径(path),目录后面一定要加上 / ;配置段 只能在 location
# /t/a.htmllocation ^~ /t/ {root /www/html/; ## /www/html/t/a.thmlalias /www/html; ## /www/html/a.html}
