加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

nginx.conf 配置及基本优化

发布时间:2020-12-13 14:06:51 所属栏目:Linux 来源:网络整理
导读:一:常用功能优化: 1:网络连接的优化: 只能在events模块设置,用于防止在同一一个时刻只有一个请求的情况下,出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的nginx会影响以部分性能。 events {accept_mutex on; #优化

一:常用功能优化:

1:网络连接的优化:

  只能在events模块设置,用于防止在同一一个时刻只有一个请求的情况下,出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的nginx会影响以部分性能。

events { accept_mutex on; #优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置,on为防止被同时唤醒,默认为off,因此nginx刚安装完以后要进行适当的优化。 }

2.设置是否允许同时接受多个网络连接:

  只能在events模块设置,Nginx服务器的每个工作进程可以同时接受多个新的网络连接,但是需要在配置文件中配置,此指令默认为关闭,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个,配置语法如下:

3.隐藏ngxin版本号:

  当前使用的nginx可能会有未知的漏洞,如果被黑客使用将会造成无法估量的损失,但是我们可以将nginx的版本隐藏,如下:

server_tokens off; #在http 模块当中配置

4.:选择事件驱动模型:

  Nginx支持众多的事件驱动,比如select、poll、epoll,只能设置在events模块中设置:

5:配置单个工作进程的最大连接数:

  通过worker_connections number;进行设置,numebr为整数,number的值不能大于操作系统能打开的最大的文件句柄数,使用ulimit -n可以查看当前操作系统支持的最大文件句柄数,默认为为1024.

6:定义MIME-Type:

  在浏览器当中可以显示的内容有HTML/GIF/XML/Flash等内容,浏览器为取得这些资源需要使用MIME Type,即MIME是网络资源的媒体类型,Nginx作为Web服务器必须要能够识别全都请求的资源类型,在nginx.conf文件中引用了一个第三方文件,使用include导入:

7:自定义访问日志:

  访问日志是记录客户端即用户的具体请求内容信息,全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level,因此有着本质的区别,而且Nginx的错误日志一般只有一个,但是访问日志可以在不同server中定义多个,定义一个日志需要使用access_log指定日志的保存路径,使用log_format指定日志的格式,格式中定义要保存的具体日志内容:

log_format main access_log /var/log/nginx/access.log main;</span></span></span></span></span></span></span></span></span></span></pre>

8:将日志定义为json格式:

  在使用日志分析工具如ELK对访问日志做统计的时候,就需要将日志格式定义为json格式,以便于取相应字段的key做统计,完整的定义如下:

   log_format logstash_json access_log  /var/log/nginx/json.access.log  logstash_json;  #定义日志路径为/var/log/nginx/json.access.log,并引用在主配置文件nginx.conf中定义的json日志格式</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码">

<img src="https://www.52php.cn/res/2019/02-12/10/51e409b11aa51c150090697429a953ed.gif" alt="复制代码">

json格式的日志内如下:

{

9:配置允许sendfile方式传输文件:

  是由后端程序负责把源文件打包加密生成目标文件,然后程序读取目标文件返回给浏览器;这种做法有个致命的缺陷就是占用大量后端程序资源,如果遇到一些访客下载速度巨慢,就会造成大量资源被长期占用得不到释放(如后端程序占用的CPU/内存/进程等),很快后端程序就会因为没有资源可用而无法正常提供服务。通常表现就是 nginx报502错误,而sendfile打开后配合location可以实现有nginx检测文件使用存在,如果存在就有nginx直接提供静态文件的浏览服务,因此可以提升服务器性能.

  可以配置在http、server或者location模块,配置如下:

10:配置nginx工作进程最大打开文件数:

  可以设置为linux系统最大打开的文件数量一致,在全局模块配置

worker_rlimit_nofile

11:会话保持时间:

  用户和服务器建立连接后客户端分配keep-alive链接超时时间,服务器将在这个超时时间过后关闭链接,我们将它设置低些可以让ngnix持续工作的时间更长,1.8.1默认为65秒,一般不超过120秒。

keepalive_timeout 如果设置为0表示关闭会话保持功能,将如下显示:
  Connection:close #浏览器收到的服务器返回的报文

12配置网络监听:

  使用命令listen,可以配置监听IP+端口,端口或监听unix socket:

listen

?二:server部分主要配置:

1、基于域名和IP的虚拟主机

2、location 模块正则匹配配置:

  在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。

  location 正则匹配的语法:

=-f和!-<span style="color: #000000">f #用来判断是否存在文件
-d和!-<span style="color: #000000">d #用来判断是否存在目录
-e和!-<span style="color: #000000">e #用来判断是否存在文件或目录
-x和!-x #用来判断文件是否可执行

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码">

<img src="https://www.52php.cn/res/2019/02-12/10/51e409b11aa51c150090697429a953ed.gif" alt="复制代码">

?3、常见http状态码:

?4.在server部分使用location配置一个web界面:

要求:在html/localtion/myweb 里面有个index.html文件里面写了myweb,当访问nginx 服务器的/myweb的时候要显示此html文件的内容:

location ~/<span style="color: #000000"&gt;myweb { #区分大小写,即访问Myweb是不行的
    root html/localtion;  #定义myweb所在的路径,即在浏览器访问myweb的时候,实际是访问的html/localtion/<span style="color: #000000"&gt;myweb目录里面的web内容
    index   index.html; #默认首页文件类型
}
    error_page   <span style="color: #800080"&gt;500 <span style="color: #800080"&gt;502 <span style="color: #800080"&gt;503 <span style="color: #800080"&gt;504  /<span style="color: #000000"&gt;50x.html;
    location = /<span style="color: #000000"&gt;50x.html {
        root   html;
    }</span></span></span></span></span></span></span></span></span></span></span></span></span></pre>

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码">

<img src="https://www.52php.cn/res/2019/02-12/10/51e409b11aa51c150090697429a953ed.gif" alt="复制代码">

验证如下:

三:sysctl.conf针对IPv4内核的7个参数的配置优化:

1、net.core.netdev_max_backlog ?#每个网络接口的处理速率比内核处理包的速度快的时候,允许发送队列的最大数目。

[root@Server1 nginx]# sysctl -a |

2、net.core.somaxconn: #用于调节系统同时发起的TCP连接数,默认值一般为128,在客户端存在高并发请求的时候,128就变得比较小了,可能会导致链接超时或者重传问题。

net.core.somaxconn =

3、net.ipv4.tcp_max_orphans:设置系统中做多允许多少TCP套接字不被关联到任何一个用户文件句柄上,如果超出这个值,没有与用户文件句柄关联的TCP套接字将立即被复位,同时给出警告信息,这个值是简单防止DDOS(Denial of service)的攻击,在内存比较充足的时候可以设置大一些:

net.ipv4.tcp_max_orphans =

4、net.ipv4.tcp_max_syn_backlog #用于记录尚未收到客户度确认消息的连接请求的最大值,一般要设置大一些:

net.ipv4.tcp_max_syn_backlog =

5、net.ipv4.tcp_timestamps #用于设置时间戳,可以避免序列号的卷绕,有时候会出现数据包用之前的序列号的情况,此值默认为1表示不允许序列号的数据包,对于Nginx服务器来说,要改为0禁用对于TCP时间戳的支持,这样TCP协议会让内核接受这种数据包,从而避免网络异常,如下:

net.ipv4.tcp_timestamps =

6、net.ipv4.tcp_synack_retries #用于设置内核放弃TCP连接之前向客户端发生SYN+ACK包的数量,网络连接建立需要三次握手,客户端首先向服务器发生一个连接请求,服务器收到后由内核回复一个SYN+ACK的报文,这个值不能设置过多,会影响服务器的性能,还会引起syn攻击:

net.ipv4.tcp_synack_retries =

7、net.ipv4.tcp_syn_retries ?#与上一个功能类似,设置为1即可:

net.ipv4.tcp_syn_retries =

:配置文件中针对CPU的2个优化参数:

1、woker_precess #设置Nginx 启动多少个工作进程的数量2、woker_cpu_affinit #固定Nginx 工作进程所运行的CPU核心

五:配置文件中与网络相关的4个指令:

<p class="header-name">六:配置文件中与驱动模型相关的8个指令:?


<p class="header-name">1、use; #用于指定Nginx 使用的事件驱动模型


<p class="header-name">2、woker_process; #指定Nginx启动的工作进程的数量


<p class="header-name">3、woker_connections ?65535; #指定Nginx 每个工作进程的最大连接数,woker_connections ?* ?woker_process即为Nginx的最大连接数量。


<p class="header-name">4、woker_rlimit_sigpending 65535 ?#Nginx每个进程的事件信号队列的上限长度,如果超出长度,Nginx则使用poll模型处理客户的请求。


<p class="header-name">5、devpoll_changes 和 devpoll_events #用于设置Nginx 在/dev/poll 模型下Nginx服务器可以与内核之间传递事件的数量,前一个设置传递给内核的事件数量,后一个设置从内核读取的事件数量,默认为512。


<p class="header-name">6、kqueue_changes 和 kqueue_events #设置在kqueue模型下Nginx服务器可以与内核之间传递事件的数量,前一个设置传递给内核的事件数量,后一个设置从内核读取的事件数量,默认为512。


<p class="header-name">7、epoll_events #设置在epoll驱动模式下Nginx 服务器可以与内核之间传递事件的数量,默认为512。


<p class="header-name">8、rtsig_signo ?#设置Nginx在rtsig 模式使用的两个信号中的第一个,第二个信号是在第一个信号的编号上加1.


<p class="header-name">9、rtsig_overflow #这些参数指定如何处理rtsig队列溢出。当溢出发生在nginx清空rtsig队列时,它们将连续调用poll()和 rtsig.poll()来处理未完成的事件,直到rtsig被排空以防止新的溢出,当溢出处理完毕,nginx再次启用rtsig模式,rtsig_overflow_events specifies指定经过poll()的事件数,默认为16,rtsig_overflow_test指定poll()处理多少事件后nginx将排空rtsig队列,默认值为32,rtsig_overflow_threshold只能运行在Linux 2.4.x内核下,在排空rtsig队列前nginx检查内核以确定队列是怎样被填满的。默认值为1/10,“rtsig_overflow_threshold 3”意为1/3。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读