当前位置: 首页 > news >正文

Nginx-配置详解

 帮助文档                                                      
nginx documentation                 

Nginx文档

Nginx基本功能:

静态资源的web服务器
http协议反向代理服务器
pop3/imap4协议反向代理服务器
FastCGI(LNMP),uWSGI(python)等协议
模块化(非DSO),如zip, SSL模块

Nginx的功能

静态的web资源服务器html,图片,js,css,txt等静态资源
结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
http/https协议的反向代理
imap4/pop3协议的反向代理
tcp/udp协议的请求转发(反向代理)

Nginx 1.20编译安装

安装编译环境:

yum install gcc pcre-devel openssl-devel zlib-devel

创建nginx用户:

useradd -r -s /sbin/nologin nginx

进入解nginx解压缩路径,编译安装

./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_modulemake && make install


 
创建软连接到环境变量中

ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx

添加开机启动

vim /etc/rc.d/rc.local
/usr/sbin/nginxchmod +x /etc/rc.d/rc.local

Windows终端持续访问:

注:域名为nginx主机,根据自己主机地址或域名修改

while ($true) {curl -Uri "http://www.apep.com"Start-Sleep -Milliseconds 500
}


Nginx目录结构和命令

 ls /apps/nginx/   

        html是测试页, sbin是主程序 

ls /apps/nginx/sbin/

        nginx 只有一个程序文件

 ls /apps/nginx/html/

        50x.html index.html 测试网页

nginx:默认为启动nginx

        -h 查看帮助选项

         -V 查看版本和配置选项-t 测试nginx语法错误

        -c filename 指定配置文件(default: /etc/nginx/nginx.conf)

        -s signal 发送信号给master进程, signal: stop, quit, reopen, reload

                         nginx -s stop        停止nginx

                        nginx -s reload      重新加载配置文件

        -g directives 在命令行中指明全局指令

Nginx配置

配置文件的组成部分:                      
     主配置文件: nginx.conf             
     子配置文件 include conf.d/*.conf     
     fastcgi, uwsgi, scgi等协议相关的配置文件 
     mime.types:支持的mime类型

 主配置文件的配置指令:                   
     directive value [value2 ...]; 

正常运行必备的配置:                             
     user                                   
            指定worker进程的运行身份,如组不指定,默认和用户名同名           
            Syntax: user user [group];               
            Default: user nobody nobody;             
            Context: main                            
      
pid /PATH/TO/PID_FILE;                  
            指定存储nginx主进程PID的文件路径                     
      
include file | mask;                    
            指明包含进来的其它配置文件片断                          
load_module file ;                      
            模块加载配置文件: /usr/share/nginx/modules/*.conf
            指明要装载的动态模块路径: /usr/lib64/nginx/modules

 配置nginx管理配置文件: 

vim /lib/systemd/system/nginx.service[Unit]
Description=The NGINX HTTP and reverse proxy serverAfter=syslog.target network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -tExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target# systemctl daemon-reload //重载systemctl系统# systemctl enable nginx.service //设置为开机自启# systemctl start nginx //启动nginx# systemctl status nginx //查看nginx启动状态# systemctl reload nginx //平滑启动,重载# systemctl stop nginx //关闭nginx
killall -s HUP nginx //重启nginx服务killall -s QUIT nginx //停止Nginx服务

配置文件结构

Nginx 由多个模块组成,这些模块由配置文件中指定的指令(directive)控制。指令分为简单指令和块指令两类:

  • 简单指令:由指令名和参数组成,以空格分隔,以分号(;)结尾。
  • 块指令:结构与简单指令类似,但不以分号结尾,而是包含一组用大括号({})包裹的附加指令。如果块指令的大括号内可以包含其他指令,则称为上下文(context)(例如:eventshttpserverlocation)。

配置文件中未包含在任何上下文内的指令属于主上下文(main context)events 和 http 指令位于主上下文内,server 指令位于 http 上下文内,location 指令位于 server 上下文内。

# 符号后的剩余行内容视为注释。

主配置文件结构

全局配置

daemon on|off; #是否以守护进程方式运行,默认是on,即守护进程方式, off 用于调试或docker环境user  nginx nginx; #指定运行用户和组,不修改时,运行用户为安装配置时所指定的用户,修改该文件时,该文件为准。worker_processes  2; #指定工作进程数,默认为1,一般和CPU内核数量一致 #cat /proc/cpuinfo | grep "processor"| wc -l #查看服务器内核数worker_cpu_affinity 0010 0100; #cpu亲和性worker_rlimit_nofile 65535; #所有worker进程能打开的文件数量上限,最好与ulimit -n 的值保持一致#worker进程能够打开的最大文件数量,该值过低客户端会报50X错误,#该值一般可设置为65535;#error_log  logs/error.log; #错误日志文件位置#error_log  logs/error.log  notice; #注意级别错误日志 #error_log  logs/error.log  info; #信息级别错误日志,[debug|info|notice|warn|error|crit]#pid        logs/nginx.pid; #master进程pid存放位置

            CPU MASK: 00000001: 0号CPU                       
                                   00000010: 1号CPU                                  
                                   10000000: 7号CPU                                 

进程绑定实际cpu,提高响应速度

vim /etc/nginx/nginx.conf  #添加亲和性
worker_processes 2;
worker_cpu_affinity 0100 1000;

     查看work进程运行在哪个cpu上                                                  

watch -n 0.5  'ps axo pid,cmd,psr |grep nginx'
ab -n 100 -c 10 http://172.25.0.100/  

多次行都没有变化,此时我们可以进行触发。结果表示:

worker_priority -20; #指定worker进程的nice值,设定worker进程优先级: [-20,19]

                      
 

events--事件驱动相关的配置

events { #每个worker进程所能够打开的最大并发连接数,如10240,#总最大并发数: worker_processes * worker_connections#worker_connections 10240;  #指明并发连接请求的处理方法,默认自动选择最优方法                    #use method;  #use epoll;#处理新的连接请求的方法;on指由各个worker轮流处理新请求,#off指每个新请求的到达都会通知(唤醒)所有的worker进程,#但只有一个进程可获得连接,造成“惊群”,影响性能,#默认值为off,可优化为on#accept_mutex on | off; #此指令默认为off,即默认为一个worker进程只能一次接受一个新的网络连接, #on表示每个woker进程可以同时接受所有新的网络连接#multi_accept on|off; #调试和定位问题:是否以守护进程方式运行,默认是on,即守护进程方式, off用于调试或docker#daemon on|off;      #是否以master/worker模型运行nginx,默认为on,当指定off 将不启动worker#master_process on|off;        #错误日志文件及其级别;出于调试需要, 可设定为debug;#但debug仅在编译时使用了“--with-debug” 选项时才有效#/path/logfile: 记录到文件中#stderr: 发送到标准错误#syslog: server-address[,parameter=values] 发送到syslog#memory:size 内存#level:debug|info|notice|warn|error|crit|alter|emerg 日志级别#error_log file [level] ;   
}   
location 语法规则location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
语法规则很简单,一个location关键字,后面跟着可选的修饰符,后面是要匹配的字符,花括号中是要执行的操作。修饰符
= 表示精确匹配。只有请求的url路径与后面的字符串完全相等时,才会命中。
~ 表示该规则是使用正则定义的,区分大小写。
~* 表示该规则是使用正则定义的,不区分大小写。
^~ 表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找。匹配过程
对请求的url序列化。例如,对%xx等字符进行解码,去除url中多个相连的/,解析url中的.,..等。这一步是匹配的前置工作。location有两种表示形式,一种是使用前缀字符,一种是使用正则。如果是正则的话,前面有~或~*修饰符。具体的匹配过程如下:首先先检查使用前缀字符定义的location,选择最长匹配的项并记录下来。如果找到了精确匹配的location,也就是使用了=修饰符的location,结束查找,使用它的配置。然后按顺序查找使用正则定义的location,如果匹配则停止查找,使用它定义的配置。如果没有匹配的正则location,则使用前面记录的最长匹配前缀字符location。基于以上的匹配过程,我们可以得到以下两点启示:使用正则定义的location在配置文件中出现的顺序很重要。因为找到第一个匹配的正则后,查找就停止了,后面定义的正则就是再匹配也没有机会了。
使用精确匹配可以提高查找的速度。例如经常请求/的话,可以使用=来定义location。
示例
接下来我们以一个例子来具体说明一下匹配过程。假如我们有下面的一段配置文件:location = / {[ configuration A ]
}location / {[ configuration B ]
}location /user/ {[ configuration C ]
}location ^~ /images/ {[ configuration D ]
}location ~* \.(gif|jpg|jpeg)$ {[ configuration E ]
}
请求/精准匹配A,不再往下查找。请求/index.html匹配B。首先查找匹配的前缀字符,找到最长匹配是配置B,接着又按照顺序查找匹配的正则。结果没有找到,因此使用先前标记的最长匹配,即配置B。请求/user/index.html匹配C。首先找到最长匹配C,由于后面没有匹配的正则,所以使用最长匹配C。
请求/user/1.jpg匹配E。首先进行前缀字符的查找,找到最长匹配项C,继续进行正则查找,找到匹配项E。因此使用E。请求/images/1.jpg匹配D。首先进行前缀字符的查找,找到最长匹配D。但是,特殊的是它使用了^~修饰符,不再进行接下来的正则的匹配查找,因此使用D。这里,如果没有前面的修饰符,其实最终的匹配是E。大家可以想一想为什么。请求/documents/about.html匹配B。因为B表示任何以/开头的URL都匹配。在上面的配置中,只有B能满足,所以匹配B。总结:
location的配置有两种形式,前缀字符和正则。查找匹配的时候,先查找前缀字符,选择最长匹配项,再查找正则。正则的优先级高于前缀字符。正则的查找是按照在配置文件中的顺序进行的。因此正则的顺序很重要,建议越精细的放的越靠前。使用=精准匹配可以加快查找的顺序,如果根域名经常被访问的话建议使用=。
alias path
路径别名,文档映射的另一种机制;仅能用于location上下文示例:http://www.apep.com/bbs/index.htmllocation /bbs { 注意: /bbs 后建议不要加 /alias /web/forum/;} --> /web/forum/index.htmllocation /bbs/ {root /web/forum/;} --> /web/forum/bbs/index.html         location /i/ {root /data/w3;
}
The /data/w3/i/top.gif file will be sent in response to the “/i/top.gif” request.
/data/w3/i/top.gif 文件将被发送以响应“/i/top.gif”请求。注意: location中使用root指令和alias指令的意义不同(a) root,给定的路径对应于location中的/uri +左侧的/ 如:  /web/forum/  /bbs/(b) alias,给定的路径对应于location中的/uri 的完整路径  


    
    

Limit_rate对客户端进行限制的相关配置
limit_rate rate;limit_rate 10k;
限制响应给客户端的传输速率,单位是bytes/second
默认值0表示无限制    limit_except method ... { ... },仅用于location限制客户端使用除了指定的请求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE,
OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCHlimit_except GET {allow 172.25.0.0/24;deny all;
}
除了GET和HEAD 之外其它方法仅允许172.25.0.0/24网段主机使用
文件操作优化的配置
aio on | off | threads[=pool];是否启用aio功能,默认offdirectio size | off;当文件大于等于给定大小时,同步(直接)写磁盘,而非写缓存,默认off示例 :location /video/ {sendfile on;aio on;directio 8m;}

 

---------------------------ngx_http_auth_basic_module模块----------------------------------实现基于用户的访问控制,使用basic机制进行用户认证
auth_basic string | off;
auth_basic_user_file file;location /admin/ {auth_basic "Admin Area";auth_basic_user_file /etc/nginx/.ngxpasswd;} 用户口令文件:
1、明文文本:格式name:password:comment
2、加密文本:由htpasswd命令实现httpd-tools所提供
生成以登录账号和密码
htpasswd -b -c /etc/nginx/conf.d/.nginx_passwd alice centos
htpasswd -b  /etc/nginx/conf.d/.nginx_passwd bob centos
-----------------------ngx_http_autoindex_module---------------------------
配置文件下载服务
autoindex on | off;
自动文件索引功能,默为off
autoindex_exact_size on | off;
计算文件确切大小(单位bytes), off 显示大概大小( 单位K、 M),默认on
autoindex_localtime on | off ;
显示本机时间而非GMT(格林威治)时间,默认off
autoindex_format html | xml | json | jsonp;
显示索引的页面文件风格,默认html配置文件下载服务生产案例
在站点server段配置location /download {autoindex on;autoindex_exact_size off;autoindex_localtime on;limit_rate 100k;index index.html;
}
-----------------------ngx_http_stub_status_module---------------------
ngx_http_stub_status_module模块
用于输出nginx的基本状态信息, 输出信息示例:
Active connections: 291
server accepts handled requests #下面三个数分别对应accepts,handled,requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
Active connections:当前状态,活动状态的连接数
accepts:统计总值,已经接受的客户端请求的总数
handled:统计总值, 已处理完成的客户端请求总数,一般和accepts相同,除非拒绝
requests:统计总值,客户端发来的总的请求数
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数stub_status;
示例:
location /nginx_status {stub_status;allow 127.0.0.1;allow 172.25.0.0/24;deny all;
}

sha1sum:哈希算法比较文件内容是否一致 grep -Ev "#|^$" nginx.confpstree -p|grep nginx

相关文章:

  • 【论文精读】2023 CVPRW--EAVSR现实世界视频超分辨率(RealWorld VSR)
  • 响应面法(Response Surface Methodology ,RSM)
  • 鸿蒙Ability对比Android的Fragment
  • CSS2相关知识点
  • IvorySQL-WASM:免安装的数据库探索之旅
  • 【沉浸式求职学习day47】【JSP详解】
  • [Datagear] [SQL]实现分组统计同时带汇总行的两种方式对比分析
  • 深入理解会话管理:Cookie、Session与JWT的对比与应用
  • windows 下用yolov5 训练模型 给到opencv 使用
  • leetcode:2469. 温度转换(python3解法,数学相关算法题)
  • 一、ZooKeeper:分布式系统中的隐形协调大师
  • Seismic source model -- Brune model ( ω^2 model)
  • 静态时序分析与约束
  • MATLAB NLP 工具箱 文本预处理教程
  • Flink基于Yarn多种启动方式详解
  • 【羊圈——状压 + DP / 记忆化搜索DP】
  • vue 水印组件
  • 第三十四天打卡
  • 线程的一些基本知识
  • FME入门系列教程7-基于FME的ArcGIS空间数据互操作技术研究与实践
  • 西安直播网站开发/超能搜索引擎系统网站
  • 济南网站优化网站/网店推广有哪些方法
  • 东莞万江做网站/长沙seo关键词
  • wordpress语言包编辑/知乎关键词排名优化工具
  • 视频多的网站建设/seo技术 快速网站排名
  • 深圳响应样式网站建设费用/获客渠道找精准客户