百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Nginx配置解析整理

bigegpt 2024-08-07 17:43 12 浏览

定义Nginx运行的用户和用户组

user www www;

进程数

建议设置为等于CPU总核心数。

worker_processes 8;

全局错误日志

全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

error_log /var/log/nginx/error.log info;

进程文件

pid /var/run/nginx.pid;

打开的最多文件描述符

一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。

worker_rlimit_nofile 65535;

event

单个进程最大连接数

并发总数是 worker_processes 和 worker_connections 的乘积

即 max_clients = worker_processes * worker_connections

在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么 为什么上面反向代理要除以4,应该说是一个经验值根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000worker_connections 值的设置跟物理内存大小有关

因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数

工作模式与连接数上限

events {

参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。

use epoll;

单个进程最大连接数(最大连接数=连接数*进程数)

worker_connections 65535;

}

查看可以打开的文件句柄数是多少

cat /proc/sys/fs/file-max

并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内

所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置,使得并发总数小于操作系统可以打开的最大文件数目,其实质也就是根据主机的物理CPU和内存进行配置

查看系统限制 ulimit -a

打开文件句柄数量限制

是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目)

系统总限制: /proc/sys/fs/file-max

当前使用句柄数:/proc/sys/fs/file-nr

修改句柄数:ulimit -SHn 65535

http

include mime.types; #文件扩展名与文件类型映射表

default_type application/octet-stream; #默认文件类型

charset utf-8; #默认编码

client_header_buffer_size 32k; #上传文件大小限制

sendfile

sendfile on; 开启高效文件传输模式

sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。

sendfile()还能够用来在两个文件夹之间移动数据

tcp_nopush 在linux/Unix系统中优化tcp数据传输,仅在sendfile开启时有效

autoindex on;#开启目录列表访问,合适下载服务器,默认关闭。

keepalive_timeout 120;#长连接超时时间,单位是秒

gzip

gzip on; 开启gzip压缩输出

gzip_min_length 1k; 设置允许压缩的页面最小字节数

页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。

gzip_buffers 4 16k; 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。

例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_http_version 1.0;压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

gzip_comp_level 2; 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间

gzip_types text/plain application/x-javascript text/css application/xml; 压缩类型

默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。

默认值: gzip_types text/html (默认不对js/css文件进行压缩)

压缩类型,匹配MIME类型进行压缩

设置哪压缩种文本文件可参考 conf/mime.types

gzip_disable "MSIE [1-6]\.";E6及以下禁止压缩

gzip_vary on;给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本

server

listen 80; 监听端口

server_name www.fangzy.me; 域名可以有多个,用空格隔开

charset koi8-r; 编码集

日志相关
access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;

root /data; 主目录

index index.html; 默认页

虚拟主机

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的

通过nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置

  • 基于ip的虚拟主机, (一块主机绑定多个ip地址)
  • 基于域名的虚拟主机(servername)
  • 基于端口的虚拟主机(listen如果不写ip端口模式)

http

server {

表示一个虚拟主机

}

}

location

映射/虚拟目录

location = / {
[ configuration A ]
}
?
location / {
[ configuration B ]
}
?
location /documents/ {
[ configuration C ]
}
?
location ^~ /images/ {
[ configuration D ]
}
?
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}

location [ = | ~ | ~* | ^~ ] uri { ... }

location URI {} 对当前路径及子路径下的所有对象都生效;

location = URI {} 注意URL最好为具体路径。 精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;

location ~ URI {} location ~* URI {} 模式匹配URI,此处的URI可使用正则表达式,~区分字符大小写,~*不区分字符大小写;

location ^~ URI {} 禁用正则表达式

优先级:= > ^~ > ~|~* > /|/dir/

location配置规则

location 的执行逻辑跟 location 的编辑顺序无关。 矫正:这句话不全对,“普通 location ”的匹配规则是“最大前缀”,因此“普通 location ”的确与 location 编辑顺序无关;

但是“正则 location ”的匹配规则是“顺序匹配,且只要匹配到第一个就停止后面的匹配”;

“普通location ”与“正则 location ”之间的匹配顺序是?先匹配普通 location ,再“考虑”匹配正则 location 。

注意这里的“考虑”是“可能”的意思,也就是说匹配完“普通 location ”后,有的时候需要继续匹配“正则 location ”,有的时候则不需要继续匹配“正则 location ”。两种情况下,不需要继续匹配正则 location :

  • ( 1 )当普通 location 前面指定了“ ^~ ”,特别告诉 Nginx 本条普通 location 一旦匹配上,则不需要继续正则匹配;
  • ( 2 )当普通location 恰好严格匹配上,不是最大前缀匹配,则不再继续匹配正则
  • IP访问控制

    location {

    deny IP /IP段

    deny 192.168.1.109;

    allow 192.168.1.0/24;192.168.0.0/16;192.0.0.0/8

    }

    用户认证访问

    模块ngx_http_auth_basic_module 允许使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问

    location ~ (.*)\.avi$ {

    auth_basic "closed site";

    auth_basic_user_file conf/users;

    }

    账号密码通过httpd-tools配置

    yum install httpd

    htpasswd -c -d /usr/local/users zhangyang

    nginx访问状态监控

    location /basic_status {

    stub_status on;

    }

    反向代理

    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

    location /basic_status {

    proxy_pass http://localhost/

    }


    upstream

    反向代理配合upstream使用

    upstream httpds {

    server 192.168.43.152:80;

    server 192.168.43.153:80;

    }

    weight(权重)

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    upstream httpds {

    server 127.0.0.1:8050 weight=10 down;

    server 127.0.0.1:8060 weight=1;

    server 127.0.0.1:8060 weight=1 backup;

    }

  • down:表示当前的server暂时不参与负载
  • weight:默认为1.weight越大,负载的权重就越大。
  • backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
  • max_conns

    可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800

    upstream httpds {

    server 127.0.0.1:8050 weight=5 max_conns=800;

    server 127.0.0.1:8060 weight=1;

    }

    max_fails、 fail_timeout

    max_fails:失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次

    max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒...以此循环,直到恢复。

    upstream httpds {

    server 127.0.0.1:8050 weight=1 max_fails=1 fail_timeout=20;

    server 127.0.0.1:8060 weight=1;

    }

    负载均衡算法

    轮询、 weight、 ip_hash、 url_hash、 least_conn、 least_time

    健康检查模块

    配置一个status的location

    location /status {

    check_status;

    }

    在upstream配置如下

    check interval=3000 rise=2 fall=5 timeout=1000 type=http;

    check_http_send "HEAD / HTTP/1.0\r\n\r\n";

    check_http_expect_alive http_2xx http_3xx;

    相关推荐

    方差分析简介(方差分析通俗理解)

    介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...

    正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃

    吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...

    Python数据可视化:箱线图多种库画法

    概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...

    多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读

    作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...

    方差分析 in R语言 and Excel(方差分析r语言例题)

    今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...

    可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图

    前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...

    matplotlib 必知的 15 个图(matplotlib各种图)

    施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...

    R ggplot2常用图表绘制指南(ggplot2绘制折线图)

    ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...

    Python数据可视化:从Pandas基础到Seaborn高级应用

    数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...

    Python 数据可视化常用命令备忘录

    本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...

    统计图的种类(统计图的种类及特点图片)

    统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...

    实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)

    大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

    通过AI提示词让Deepseek快速生成各种类型的图表制作

    在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...

    数据可视化:解析箱线图(box plot)

    箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...

    [seaborn] seaborn学习笔记1-箱形图Boxplot

    1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...