目录

安装

Nginx操作命令

https反向代理

负载均衡

轮询

加权轮询

最少连接

加权最少连接

IP Hash

普通 Hash

动静分离

资源压缩

缓冲区

缓存机制

解决跨域

防盗链设计

配置SLL证书

性能优化

打开长连接配置

开启零拷贝技术

开启无延迟或多包共发机制

调整Worker工作进程

开启CPU亲和机制

开启epoll模型及调整并发连接数

文件传输配置

工具

参考


安装

nginx-tutorial/nginx-ops.md at master · dunwu/nginx-tutorial (github.com)

Nginx 安装配置 | 菜鸟教程 (runoob.com)

开放80端口,并更新防火墙:

[root@localhost]# firewall-cmd --zone=public --add-port=80/tcp --permanent  
[root@localhost]# firewall-cmd --reload  
[root@localhost]# firewall-cmd --zone=public --list-ports

Nginx操作命令

nginx -s stop       快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
nginx -s quit       平稳关闭Nginx,保存相关信息,有安排的结束web服务。
nginx -s reload     因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen     重新打开日志文件。
nginx -c filename   为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t            不运行,仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
nginx -v            显示 nginx 的版本。
nginx -V            显示 nginx 的版本,编译器版本和配置参数。

https反向代理

  #HTTP服务器server {#监听443端口。443为知名端口号,主要用于HTTPS协议listen       443 ssl;#定义使用www.xx.com访问server_name  www.helloworld.com;#ssl证书文件位置(常见证书文件格式为:crt/pem)ssl_certificate      cert.pem;#ssl证书key位置ssl_certificate_key  cert.key;#ssl配置参数(选择性配置)ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;#数字签名,此处使用MD5ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / {root   /root;index  index.html index.htm;}}

负载均衡

upstream nginx_boot{  # 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2  server 192.168.0.000:8080 weight=100 max_fails=2 fail_timeout=30s;   server 192.168.0.000:8090 weight=200 max_fails=2 fail_timeout=30s;  # 这里的IP请配置成你WEB服务所在的机器IP
}  server {  location / {  root   html;  # 配置一下index的地址,最后加上index.ftl。index  index.html index.htm index.jsp index.ftl;  proxy_set_header Host $host;  proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 请求交给名为nginx_boot的upstream上  proxy_pass http://nginx_boot;  }
}

轮询

upstream bck_testing_01 {# 默认所有服务器权重为 1server 192.168.250.220:8080server 192.168.250.221:8080server 192.168.250.222:8080
}

加权轮询

upstream bck_testing_01 {server 192.168.250.220:8080   weight=3server 192.168.250.221:8080              # default weight=1server 192.168.250.222:8080              # default weight=1
}

最少连接

upstream bck_testing_01 {least_conn;# with default weight for all (weight=1)server 192.168.250.220:8080server 192.168.250.221:8080server 192.168.250.222:8080
}

加权最少连接

upstream bck_testing_01 {least_conn;server 192.168.250.220:8080   weight=3server 192.168.250.221:8080              # default weight=1server 192.168.250.222:8080              # default weight=1
}

IP Hash

upstream bck_testing_01 {ip_hash;# with default weight for all (weight=1)server 192.168.250.220:8080server 192.168.250.221:8080server 192.168.250.222:8080}

普通 Hash

upstream bck_testing_01 {hash $request_uri;# with default weight for all (weight=1)server 192.168.250.220:8080server 192.168.250.221:8080server 192.168.250.222:8080}

动静分离

location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){  root   /soft/nginx/static_resources;  #静态资源目录expires 7d;
}

资源压缩

http{# 开启压缩机制gzip on;# 指定会被压缩的文件类型(也可自己配置其他类型)gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;# 设置压缩级别,越高资源消耗越大,但压缩效果越好gzip_comp_level 5;# 在头部中添加Vary: Accept-Encoding(建议开启)gzip_vary on;# 处理压缩请求的缓冲区数量和大小gzip_buffers 16 8k;# 对于不支持压缩功能的客户端请求不开启压缩机制gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩# 设置压缩响应所支持的HTTP最低版本gzip_http_version 1.1;# 设置触发压缩的最小阈值gzip_min_length 2k;# 关闭对后端服务器的响应结果进行压缩gzip_proxied off;
}

在上述的压缩配置中,最后一个gzip_proxied选项,可以根据系统的实际情况决定,总共存在多种选项:

  • off:关闭Nginx对后台服务器的响应结果进行压缩。

  • expired:如果响应头中包含Expires信息,则开启压缩。

  • no-cache:如果响应头中包含Cache-Control:no-cache信息,则开启压缩。

  • no-store:如果响应头中包含Cache-Control:no-store信息,则开启压缩。

  • private:如果响应头中包含Cache-Control:private信息,则开启压缩。

  • no_last_modified:如果响应头中不包含Last-Modified信息,则开启压缩。

  • no_etag:如果响应头中不包含ETag信息,则开启压缩。

  • auth:如果响应头中包含Authorization信息,则开启压缩。

  • any:无条件对后端的响应结果开启压缩机制。

缓冲区

  • proxy_buffering:是否启用缓冲机制,默认为on关闭状态。

  • client_body_buffer_size:设置缓冲客户端请求数据的内存大小。

  • proxy_buffers:为每个请求/连接设置缓冲区的数量和大小,默认4 4k/8k

  • proxy_buffer_size:设置用于存储响应头的缓冲区大小。

  • proxy_busy_buffers_size:在后端数据没有完全接收完成时,Nginx可以将busy状态的缓冲返回给客户端,该参数用来设置busy状态的buffer具体有多大,默认为proxy_buffer_size*2

  • proxy_temp_path:当内存缓冲区存满时,可以将数据临时存放到磁盘,该参数是设置存储缓冲数据的目录。语法:proxy_temp_path path; path是临时目录的路径

  • proxy_temp_file_write_size:设置每次写数据到临时文件的大小限制。

  • proxy_max_temp_file_size:设置临时的缓冲目录中允许存储的最大容量。

  • 非缓冲参数项:

    • proxy_connect_timeout:设置与后端服务器建立连接时的超时时间。

    • proxy_read_timeout:设置从后端服务器读取响应数据的超时时间。

    • proxy_send_timeout:设置向后端服务器传输请求数据的超时时间

http{  proxy_connect_timeout 10;  proxy_read_timeout 120;  proxy_send_timeout 10;  proxy_buffering on;  client_body_buffer_size 512k;  proxy_buffers 4 64k;  proxy_buffer_size 16k;  proxy_busy_buffers_size 128k;  proxy_temp_file_write_size 128k;  proxy_temp_path /soft/nginx/temp_buffer;
}

缓存机制

语法

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

  • path:缓存的路径地址。

  • levels:缓存存储的层次结构,最多允许三层目录。

  • use_temp_path:是否使用临时目录。

  • keys_zone:指定一个共享内存空间来存储热点Key(1M可存储8000个Key)。

  • inactive:设置缓存多长时间未被访问后删除(默认是十分钟)。

  • max_size:允许缓存的最大存储空间,超出后会基于LRU算法移除缓存,Nginx会创建一个Cache manager的进程移除数据,也可以通过purge方式。

  • manager_files:manager进程每次移除缓存文件数量的上限。

  • manager_sleep:manager进程每次移除缓存文件的时间上限。

  • manager_threshold:manager进程每次移除缓存后的间隔时间。

  • loader_files:重启Nginx载入缓存时,每次加载的个数,默认100。

  • loader_sleep:每次载入时,允许的最大时间上限,默认200ms。

  • loader_threshold:一次载入后,停顿的时间间隔,默认50ms。

  • purger:是否开启purge方式移除数据。

  • purger_files:每次移除缓存文件时的数量。

  • purger_sleep:每次移除时,允许消耗的最大时间。

  • purger_threshold:每次移除完成后,停顿的间隔时间。

http{  # 设置缓存的目录,并且内存中缓存区名为hot_cache,大小为128m,  # 三天未被访问过的缓存自动清楚,磁盘中缓存的最大容量为2GB。proxy_cache_path /soft/nginx/cache levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g;  server{  location / {  # 使用名为nginx_cache的缓存空间  proxy_cache hot_cache;  # 对于200、206、304、301、302状态码的数据缓存1天  proxy_cache_valid 200 206 304 301 302 1d;  # 对于其他状态的数据缓存30分钟  proxy_cache_valid any 30m;  # 定义生成缓存键的规则(请求的url+参数作为key)  proxy_cache_key $host$uri$is_args$args;  # 资源至少被重复访问三次后再加入缓存  proxy_cache_min_uses 3;  # 出现重复请求时,只让一个去后端读数据,其他的从缓存中读取  proxy_cache_lock on;  # 上面的锁超时时间为3s,超过3s未获取数据,其他请求直接去后端  proxy_cache_lock_timeout 3s;  # 对于请求参数或cookie中声明了不缓存的数据,不再加入缓存  proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;  # 在响应头中添加一个缓存是否命中的状态(便于调试)  add_header Cache-status $upstream_cache_status;  }  }
}

解决跨域

location / {  # 允许跨域的请求,可以自定义变量$http_origin,*表示所有  add_header 'Access-Control-Allow-Origin' *;  # 允许携带cookie请求  add_header 'Access-Control-Allow-Credentials' 'true';  # 允许跨域请求的方法:GET,POST,OPTIONS,PUT  add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';  # 允许请求时携带的头部信息,*表示所有  add_header 'Access-Control-Allow-Headers' *;  # 允许发送按段获取资源的请求  add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';  # 一定要有!!!否则Post请求无法进行跨域!# 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求  if ($request_method = 'OPTIONS') {  add_header 'Access-Control-Max-Age' 1728000;  add_header 'Content-Type' 'text/plain; charset=utf-8';  add_header 'Content-Length' 0;  # 对于Options方式的请求返回204,表示接受跨域请求  return 204;  }
}

防盗链设计

场景:a网站不让b网站使用a的静态资源,所以设置防盗链

语法

valid_referers none | blocked | server_names | string ...;

  • none:表示接受没有Referer字段的HTTP请求访问。

  • blocked:表示允许http://https//以外的请求访问。

  • server_names:资源的白名单,这里可以指定允许访问的域名。

  • string:可自定义字符串,支配通配符、正则表达式写法。

案例

# 在动静分离的location中开启防盗链机制
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){  # 最后面的值在上线前可配置为允许的域名地址  valid_referers blocked 192.168.12.129;  if ($invalid_referer) {  # 可以配置成返回一张禁止盗取的图片  # rewrite   ^/ http://xx.xx.com/NO.jpg;  # 也可直接返回403  return   403;  }  root   /soft/nginx/static_resources;  expires 7d;
}

配置SLL证书

# ----------HTTPS配置-----------
server {  # 监听HTTPS默认的443端口  listen 443;  # 配置自己项目的域名  server_name www.xxx.com;  # 打开SSL加密传输  ssl on;  # 输入域名后,首页文件所在的目录  root html;  # 配置首页的文件名  index index.html index.htm index.jsp index.ftl;  # 配置自己下载的数字证书  ssl_certificate  certificate/xxx.pem;  # 配置自己下载的服务器私钥  ssl_certificate_key certificate/xxx.key;  # 停止通信时,加密会话的有效期,在该时间段内不需要重新交换密钥  ssl_session_timeout 5m;  # TLS握手时,服务器采用的密码套件  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  # 服务器支持的TLS版本  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  # 开启由服务器决定采用的密码套件  ssl_prefer_server_ciphers on;  location / {  ....  }
}  # ---------HTTP请求转HTTPS-------------
server {  # 监听HTTP默认的80端口  listen 80;  # 如果80端口出现访问该域名的请求  server_name www.xxx.com;  # 将请求改写为HTTPS(这里写你配置了HTTPS的域名)  rewrite ^(.*)$ https://www.xxx.com;
}

性能优化

打开长连接配置

upstream xxx {  
    # 长连接数  
    keepalive 32;  
    # 每个长连接提供的最大请求数  
    keepalived_requests 100;  
    # 每个长连接没有新的请求时,保持的最长时间  
    keepalive_timeout 60s;  
}

开启零拷贝技术

sendfile on; # 开启零拷贝机制

开启无延迟或多包共发机制

tcp_nodelay on;  
tcp_nopush on;

交互性很强的应用,可以手动开启tcp_nodelay配置,让应用程序向内核递交的每个数据包都会立即发送出去。但这样会产生大量的TCP报文头,增加很大的网络开销。

实时性要求并不高,追求的则是更高的吞吐,那么则可以开启tcp_nopush配置项,这个配置就类似于“塞子”的意思,首先将连接塞住,使得数据先不发出去,等到拔去塞子后再发出去。设置该选项后,内核会尽量把小数据包拼接成一个大的数据包(一个MTU)再发送出去.

调整Worker工作进程

worker_processes auto;

工作进程的数量最高开到8个就OK了,8个之后就不会有再大的性能提升。

同时也可以稍微调整一下每个工作进程能够打开的文件句柄数:

# 每个Worker能打开的文件描述符,最少调整至1W以上,负荷较高建议2-3W  
worker_rlimit_nofile 20000;

开启CPU亲和机制

CPU亲和机制则是指将每个Nginx的工作进程,绑定在固定的CPU核心上,从而减小CPU切换带来的时间开销和资源损耗,开启方式如下:

worker_cpu_affinity auto;

开启epoll模型及调整并发连接数

epoll属于select/poll接口的增强版,因此采用该模型能够大程度上提升单个Worker的性能,如下:

events {  
    # 使用epoll网络模型  
    use epoll;  
    # 调整每个Worker能够处理的连接数上限  
    worker_connections  10240;  
}

文件传输配置

四个参数值都可以根据自己项目的实际情况来配置。

工具

生成配置文件

NGINXConfig | DigitalOcean

参考

Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化... (qq.com)

dunwu/nginx-tutorial: 这是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx。 (github.com)

性能怪兽-Nginx常用配置指北相关推荐

  1. 终于等到了!阿里内部“性能怪兽”开源了,竟是Nginx+Redis

    前言 在开源界,高性能服务的典型代表就是Nginx和Redis.纵观这两个软件的源码,都是非常简洁高效的,也都是基于异步网络IO机制的,所以对于要学习高性能服务的程序员或者爱好者来说,研究这两个网络服 ...

  2. Ubuntu20.04基本配置指北——让Ubuntu成为可办公系统

    Ubuntu基本配置指北 本教程基于Ubuntu20.04版本进行配置,其余版本可能存在少许不同. wifi驱动 由于我的笔记本是Thinkpad,所以在去年安装Ubuntu20.01时会存在没有wi ...

  3. 酒浓码浓 - nginx常用配置

    nginx常用配置 1. 基础配置 main # 全局配置events { # nginx工作模式配置 }http { # http设置....server { # 服务器主机配置....locati ...

  4. 炫彩无界,性能怪兽,M1 扛鼎未来 —— 2021 年 Apple 春季新品发布会全记录

    北京时间 2021 年 4 月 21 日凌晨 1 点,期待已久的 Apple 春季新品发布会准时到来,各路媒体早先对本次发布的产品进行了预测,比如搭载 M1 芯片的 iPad Pro,果然如期到来了. ...

  5. 一加6html查看程序,一加6T评测 让你摸上瘾的残暴性能怪兽

    在浮躁的手机市场,一加的存在是极其特殊的--它从不蹭热点,而是专心打磨产品,只做旗舰,并且凭借"不将就"的态度收获了大批忠实的拥趸. 转眼半年过后,一加6的正统续作,一加6T正式在 ...

  6. 小米MIX2S的进化之路 极致设计的性能怪兽

    今日,小米手机于微信.微博等多平台同时宣布3月27日将发布小米MIX2S.这个消息有如惊雷一样,丢入尚在沉寂的手机市场中. 与往常不同的是,去年此时宣布的是小米6即将发布的消息,而今年是小米MIX2S ...

  7. 发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?...

    作者 | 伍杏玲 出品 | AI 科技大本营(ID:rgznai100) 头图 | 下载于ICphoto 2015 年,在英特尔就职 28 年的总裁 Renee James 辞职,正在大众纷纷猜测她将 ...

  8. 发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?

    2015 年,在英特尔就职 28 年的总裁 Renee James 辞职,正在大众纷纷猜测她将如何开启下一段旅程时,她有了创业的想法,2017 年带领新团队创立了专注于为云和边缘打造微处理器的 Amp ...

  9. Nginx常用配置清单

    本文来说下Nginx常用配置清单 文章目录 概述 侦听端口 访问日志 域名 静态资源 重定向 反向代理 负载均衡 SSL协议 概述 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同 ...

最新文章

  1. RollingFileAppender
  2. 【小白学习keras教程】十一、Keras中文本处理Text preprocessing
  3. 【Transformer】ATS: Adaptive Token Sampling For Efficient Vision Transformers
  4. Java中int和Integer的区别
  5. MySQL获取月份最后一天
  6. 手动下载股票列表 存入mongodb 并更新名字
  7. 洛谷P3358 最长k可重区间集问题(费用流)
  8. 7. jQuery 效果 - 滑动
  9. Tapestry5 事件分派机制
  10. 创客使用Fusion 360 - 制作模型
  11. 单片机问题,24V NPN接近开关信号,怎么接入到单片机
  12. CSS 第007篇 字体font
  13. 前端项目如何向一个后端项目传递数组?(批量删除如何传参)
  14. 一张图读懂系列|什么是量子?
  15. python 返回绝对值
  16. 各种OOM代码样例及解决方法
  17. CEPI扩大与三叶草生物合作,资助“S-三聚体”新冠疫苗候选物全球II/III期临床研究以获上市许可
  18. Unity3D插件之EasyTouch5入门
  19. 直播礼物特效-B站直播礼物分析
  20. 关于python plt使用说明

热门文章

  1. Maven的下载安装和使用
  2. android img 格式文件怎么打开,img文件怎么打开(如何解析system.img)
  3. lenovo g500 更换ssd
  4. MySQL的下载和安装(msi)
  5. 如何挑选购买葡萄酒?
  6. 请将此站点添加到ie受信任的站点中_关于上海市电子税务局添加可信站点的操作说明...
  7. 『感想』这几年的编程
  8. 上网浏览器如何选?适合的就是最好的
  9. 4k视频写入速度要求_4k视频最低需要多少速度的内存卡?
  10. 打破刻板印象,了解真正的商业智能BI