安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

安全开发运维必备的Nginx代理Web服务器性能优化与安全加

1月1日 话藏心投稿
  1。引言1。1目的
  为了更好的指导部署与测试艺术升系统nginx网站服务器高性能同时下安全稳定运行,需要对nginx服务进行调优与加固;
  本次进行Nginx服务调优加固主要从以下几个部分:模块性能优化系统内核优化编译安装优化性能参数优化安全加固配置1。2目标范围
  本文档仅供内部使用,禁止外传,帮助研发人员,运维人员对系统长期稳定的运行提供技术文档参考。1。3读者对象项目经理开发人员测试人员运维人员相关领导2。参考说明2。1帮助参考
  Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAPPOP3SMTP服务器。Nginx作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP程序对外进行服务,也可以支持作为HTTP代理服务器对外进行服务。
  Nginx版本选择:Mainlineversion最新版本,推荐测试的业务项目的时候使用Stableversion稳定版本,推荐项目上线实际使用Legacyversions历史版本,不推荐选择可能存在脆弱性漏洞
  项目结构:编译后的nginx项目结结构etcnginxclientbodytemp客户端上面的临时文件存放目录confnginx的配置文件存放目录fastcgitempfastcgi的临时文件存放目录html存放静态资源或者脚本文件的地方logsnginx日志文件proxytempnginx正向反向代理缓存文件存放目录sbinnginx可执行文件scgitempscgi临时文件目录uwsgitempuwsgi临时文件存放目录
  Nginx文档帮助:http:nginx。orgendocs
  Nginx首页地址目录:usrsharenginxhtml
  Nginx配置文件:etcnginxnginx。confusrlocalnginxconfnginx。confusrlocaletcnginxnginx。conf
  2。2参数说明
  localtion请求匹配的url实是一个正则表达式:语法规则:location〔〕uri{。。。}参数解析:表示精确匹配,这个优先级也是最高的通用匹配,任何请求都会匹配到,默认匹配。表示区分大小写的正则匹配表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)!和!分别为区分大小写不匹配及不区分大小写不匹配的正则!,!:分别标识为区分大小写不匹配及不区分大小写不匹配的正则表示uri以某个常规字符串开头,理解为匹配url路径即可。nginx不对url做编码,因此请求为static20aa,可以被规则staticaa匹配到(注意是空格)
  Nginx匹配判断表达式:f和!f:用来判断是否存在文件d和!d:用来判断是否存在目录e和!e:用来判断是否存在文件或目录x和!x:用来判断文件是否可执行
  例如,匹配末尾为如下后缀的静态并判断是否存在该文件,如不存在则404。location。(jscssjpgjpeggifpngswf){if(frequestfilename){return403;}}
  3。3模块说明
  查看可用模块编译参数:http:nginx。orgendocsconfigure。html可以通过运行。configurehelp查看编译帮助,决定是否需要安装哪些模块,比如下面的ssi模块能够实现访问shtml页面。configurehelp
  httpgzip模块
  开启gzip压缩输出(常常是大于1kb的静态文件),减少网络传输;gzipminlength1k设置允许压缩的页面最小字节数页面字节数从contentlength中进行获取,默认值是20gzipbuffers416k设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。416k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。gzipcomplevel2gzip压缩比,其值从1到9数字越大压缩率越高,越消耗CPU负载也越高gziptypes匹配mime类型进行压缩,无论是否指定texthtml类型总是会被压缩的,推荐配置:gziptypestextplaintextcssapplicationjsonapplicationxjavascripttextxmlapplicationxmlapplicationxmlrsstextjavascript。gziphttpversion1。0用于识别http协议的版本早期的浏览器不支持Gzip压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项;如果你用了Nginx的反向代理并期望也启用Gzip压缩的话,由于末端通信是http1。0,故请设置为1。0。gzipproxiedanyNginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含Via的header头。gzipvaryon和http头有关系会在响应头加个Vary:AcceptEncoding,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
  httpfastcgimodule模块
  nginx可以用来请求路由到FastCGI服务器运行应用程序由各种框架和PHP编程语言等。可以开启FastCGI的缓存功能以及将静态资源进行剥离,从而提高性能。指令:fastcgitemppath定义FastCGI缓存文件保存临时路径。指令:fastcgicachepath定义FastCGI缓存文件保存路径和缓存的其它参数。缓存数据以二进制数据文件形式存储,缓存文件名和key都是通过对访问URL使用MD5计算获得的结果。缓存文件先保存至fastcgitemppath指定的临时目录下,然后通过重命名操作移至fastcgicachepath指定的缓存目录。建议fastcgitemppath和fastcgicachepath设为同一分区,同分区移动操作效率更高。示例:fastcgicachepathtmpfastcgicachelevels1:2keyszonecachefastcgi:16minactive30mmaxsize1g;levels指定了目录结构,子目录数以16为基数;keyszone指定了共享内存区名和大小,用于保存缓存key和数据信息;inactive指定了缓存数据保存的时间,当这段时间内未被访问将被移出;maxsize指定了缓存使用的最大磁盘空间,超过容量时将最近最少使用数据删除。示例中使用tmpfastcgitemp作为FastCGI缓存的临时目录;tmpfastcgicache作为FastCGI缓存保存的最终目录;一级子目录为16的一次方16个,二级子目录为16的2次方256个;共享内存区名为cachefastcgi,占用内存128MB;缓存过期时间为30分钟;缓存数据保存于磁盘的最大空间大小为1GB。指令:fastcgicachekey定义FastCGI缓存关键字。启用FastCGI缓存必须加上这个配置,不然访问所有PHP的请求都为访问第一个PHP文件URL的结果。指令:fastcgicachevalid为指定的Http状态码指定缓存时间。指令:fastcgicacheminuses指定经过多少次请求相同的URL将被缓存。指令:fastcgicacheusestale指定当连接FastCGI服务器发生错误时,哪些情况使用过期数据回应。指令:fastcgicache缓存使用哪个共享内存区
  keepalive模块
  长连接对性能有很大的影响,通过减少CPU和网络开销需要开启或关闭连接;keepalivetimeout闲长连接保持打开状态的时间;keepaliverequests单个客户端长连接可以请求的数量;keepalive上游服务器长连接的相关指令,每个工作进程中空闲长连接到上游服务器保持开启的连接数量(没有默认值)。
  要使用连接到上游服务器的长连接,必须要配置文件中下面的指令:proxyhttpversion1。1;proxysetheaderC
  httpsslmodule模块
  Nginx开启支持Https协议的SSL模块NginxSSL性能调优sslprotocolsTLSv1TLSv1。1TLSv1。2;注意这里的加密方式sslciphersECDHERSAAES256SHA384:AES256SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;sslsessioncacheshared:SSL:10m;sslsessiontimeout10m;3。服务优化3。1系统内核
  Linux内核参数部分默认值不适合高并发,Linux内核调优,主要涉及到网络和文件系统、内存等的优化,临时方法可以通过调整Proc文件系统,需要注意调整Proc文件系统系统重启后还原至默认值(不推荐)。永久修改etcsysctl。conf配置文件永久保存
  下面是我常用的内核调优配置:grepqnet。ipv4。tcpmaxtwbucketsetcsysctl。confcatetcsysctl。confEOFnet。core。rmemdefault262144net。core。rmemmax16777216net。core。wmemdefault262144net。core。wmemmax16777216缓冲区队列设置与连接及其如何排队相关调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合并发请求数来调节此值。net。core。somaxconn262144在提交到CPU前网卡中数据包缓冲的速率,高带宽下提高这个值可提高性能;检查内核日志文件中有关这个设置的错误,根据网卡文档中的建议修改这个值。net。core。netdevmaxbacklog262144设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上net。ipv4。tcpmaxorphans262144用于记录那些尚未收到客户端确认信息的连接请求的最大值(根据类才更改)net。ipv4。tcpmaxsynbacklog1024设定timewait的数量默认是180000设为10000。net。ipv4。tcpmaxtwbuckets10000在高并发情况端口值的起止范围一般端口号设置是1024到65000,用来设定允许系统打开的端口范围;net。ipv4。iplocalportrange102465500用于设置启用timewait快速回收net。ipv4。tcptwrecycle1用于设置开启重用,允许将TIMEWAITsockets重新用于新的TCP连接。net。ipv4。tcptwreuse1用于设置开启SYNCookies,当出现SYN等待队列溢出时,启用cookies进行处理。net。ipv4。tcpsyncookies1决定了内核放弃连接之前发送SYNACK包的数量。net。ipv4。tcpsynackretries1表示在内核放弃建立连接之前发送SYN包的数量。net。ipv4。tcpsynretries1决定了套接字保持在FINWAIT2状态的时间。默认值是60秒。正确设置这个值非常重要,有时即使一个负载很小的Web服务器,也会出现大量的死套接字而产生内存溢出的风险。net。ipv4。tcpfintimeout30选项表示当keepalive启用的时候,TCP发送keepalive消息的频度。默认值是2(单位是小时)。net。ipv4。tcpkeepalivetime600net。ipv4。tcpkeepaliveintvl30net。ipv4。tcpkeepaliveprobes3net。ipv4。tcpmem78643210485761572864文件描述符系统级别的限制kernel。sem25032000100128fs。filemax6815744vm。swappiness10fs。aiomaxnr1048576EOFsysctlp
  文件描述符
  文件描述符是操作系统资源,用于表示连接、打开的文件,以及其他信息。NGINX每个连接可以使用两个文件描述符。
  例如如果NGINX充当代理时,通常一个文件描述符表示客户端连接,另一个连接到代理服务器,如果开启了HTTP保持连接,这个比例会更低(译注:为什么更低呢)。
  对于有大量连接服务的系统,下面的设置可能需要调整一下:修改文件描述符方式vimetcsecuritylimits。confnofile65536用户级别文件描述符限制然后进行启动文件修改echoulimitHsn65536etcprofile
  3。2编译优化
  精简模块:Nginx由于不断添加新的功能,附带的模块也越来越多,建议一般常用的服务器软件使用源码编译安装管理;
  (1)减小Nginx编译后的文件大小编译Nginx时默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后一个Nginx要有好几兆字节;因此可以在编译之前,修改相关源码,取消debug模式;找到源码目录下autoccgcc文件debugCFLAGSCFLAGSg注释掉或删掉这两行,即可取消debug模式。lsalhusrlocalnginxsbinnginxrwxrxrx。1rootroot915KAug1709:49usrlocalnginxsbinnginx可以看到体积大大减少
  (2)指定GCC编译参数
  修改GCC编译参数提高编译优化级别稳妥起见采用O2这也是大多数软件编译推荐的优化级别。Nginx源码文件autoccgcc搜索NGXGCCOPT默认GCC编译参数为O,可以直接修改内容为NGXGCCOPTO2或者在。configure配置时添加withccoptO2选项。withccoptO3编译级别withcpuoptCPU为特定的CPU编译,有效的值包括:pentium,pentiumpro,pentium3,pentium4,athlon,opteron,amd64,sparc32,sparc64,ppc64
  GCC编译参数优化〔可选项〕总共提供了5级编译优化级别:O0:无优化。O和O1:使用能减少目标代码尺寸以及执行时间并且不会使编译时间明显增加的优化,在编译大型程序的时候会显著增加编译时内存的使用。O2:包含O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。编译器不执行循环展开以及函数内联。此选项将增加编译时间和目标文件的执行性能。Os:可以看成O2。5,专门优化目标文件大小,执行所有的不增加目标文件大小的O2优化选项,并且执行专门减小目标文件大小的优化选项。适用于磁盘空间紧张时使用。但有可能有未知的问题发生,况且目前硬盘容量很大,常用程序无必要使用。O3:打开所有O2的优化选项外增加finlinefunctions、funswitchloops、fgcseafterreload优化选项。相对于O2性能并未有较多提高,编译时间也最长,生成的目标文件也更大更占内存,有时性能不增反而降低,甚至产生不可预知的问题(包括错误),所以并不被大多数软件安装推荐,除非有绝对把握方可使用此优化级别。
  常用编译参数:编译0:常规编译参数configurearguments:安装的目录或者路径prefixetcnginxsbinpathusrsbinnginxmodulespathusrlib64nginxmodulesconfpathetcnginxnginx。conferrorlogpathvarlognginxerror。loghttplogpathvarlognginxaccess。logpidpathvarrunnginx。pidlockpathvarrunnginx。lock执行对应模块nginx所保留的临时文件httpclientbodytemppathvarcachenginxclienttemphttpproxytemppathvarcachenginxproxytemphttpfastcgitemppathvarcachenginxfastcgitemphttpuwsgitemppathvarcachenginxuwsgitemphttpscgitemppathvarcachenginxscgitemp启动的用户和组用户usernginxgroupnginx模块参数withcompatwithfileaiowiththreadswithhttpadditionmodulewithhttpauthrequestmodulewithhttpdavmodulewithhttpflvmodulewithhttpgunzipmodulewithhttpgzipstaticmodulewithhttpmp4modulewithhttprandomindexmodulewithhttprealipmodulewithhttpsecurelinkmodulewithhttpslicemodulewithhttpsslmodulewithhttpstubstatusmodulewithhttpsubmodulewithhttpv2modulewithmailwithmailsslmodulewithstreamwithstreamrealipmodulewithstreamsslmodulewithstreamsslprereadmodule设置额外的参数将被添加到CFLAGSwithccoptO2gpipeWallWp,DFORTIFYSOURCE2fexceptionsfstackprotectorstrongparamsspbuffersize4grecordgccswitchesm64mtunegenericfPIC设置附件参数,链接系统库withldoptWl,z,relroWl,z,nowpie编译1:除多余模块。configureprefixAppnginxusernginxgroupnginxwithhttpstubstatusmodulewithouthttpauthbasicmodulewithouthttpautoindexmodulewithouthttpbrowsermodulewithouthttpemptygifmodulewithouthttpgeomodulewithouthttplimitconnmodulewithouthttplimitreqmodulewithouthttpmapmodulewithouthttpmemcachedmodulewithouthttpproxymodulewithouthttpreferermodulewithouthttpscgimodulewithouthttpsplitclientsmodulewithouthttpssimodulewithouthttpupstreamiphashmodulewithouthttpupstreamkeepalivemodulewithouthttpupstreamleastconnmodulewithouthttpuseridmodulewithouthttpuwsgimodulewithoutmailimapmodulewithoutmailpop3modulewithoutmailsmtpmodulewithoutpollmodulewithoutselectmodulewithccoptO2
  3。3性能优化
  缓存和压缩与限制可以提高性能
  NGINX的一些额外功能可用于提高Web应用的性能,调优的时候web应用不需要关掉但值得一提,因为它们的影响可能很重要。1)缓存
  一个启用NGINX缓存的情景,一组web或者应用服务器负载均衡,可以显著缩短对客户端的响应时间,同时大幅度降低后端服务器的负载。缓存本身就可以作个专题来讲,这里我们就不试图讲它了。网页资源缓存location。(xmlhtmlhtm){资源决绝对目录设置日志文件的相对路径或完整路径accesslogpathtofile。开启日志记录设置过期时间expires24h;}样式、JS、图片资源缓存location。(cssjsicogifjpgjpegpng){禁用404错误日志关闭日志缓存时间7天expires7d;}字体资源缓存location。(eotttfotfwoffwoff2svg){}2)压缩
  所以使用更小的网络带宽。然而尽管压缩数据会消耗CPU资源,但当需要减少网络带宽使用时这样做非常有效。需要注意的是,不能对已压缩的文件再压缩例如JPEG文件。启用gzip压缩启用gzip压缩的最小文件,小于设置值的文件将不会压缩gzipminlength2k;gzip压缩级别,110,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明gzipcomplevel2;进行压缩的文件类型,javascript有多种形,其中的值可以在mime。types文件中找到。建议在httpheader中添加Vary:AcceptEncoding支持3)限制
  防止用户消耗太多的资源,避免影响系统性能和用户体验及安全性,以下是相关的指令:limitconnandlimitconnzoneNGINX接受客户连接的数量限制,例如单个IP地址的连接。设置这些指令可以防止单个用户打开太多的连接,消耗超出自己的资源。limitreqandlimitreqzonNGINX处理请求的速度限制,与limitrate有相同的功能。可以提高安全性,尤其是对登录页面,通过对用户限制请求速率设置一个合理的值,避免太慢的程序覆盖你的应用请求(比如DDoS攻击)。limitrate传输到客户端响应速度的限制(每个打开多个连接的客户消耗更多的带宽)。设置这个限制防止系统过载,确保所有客户端更均匀的服务质量。maxconns上游配置块中服务器指令参数。在上游服务器组中单个服务器可接受最大并发数量。使用这个限制防止上游服务器过载。设置值为0(默认值)表示没有限制。queue(NGINXPlus商业版本提供)创建一个队列,用来存放在上游服务器中超出他们最大maxcons限制数量的请求。这个指令可以设置队列请求的最大值,还可以选择设置在错误返回之前最大等待时间(默认值是60秒)。如果忽略这个指令,请求不会放入队列。
  简单示例:http{请根据业务需求配置同一IP地址连接数limitconnzonebinaryremoteaddrzonewwwweiyigeektop:10m;请根据业务需求配置同一IP地址请求速率limitreqzonebinaryremoteaddrzoneblogweiyigeektop:10mrate1server{建议创建黑白名单allow内部IP或负载均衡IP;deny恶意IP;限流locationdownload{表示单个IP连接数不超过2个limitconnwwwweiyigeektop2;表示单个IP请求速率为1s一个,允许超过频率限制的请求数不多于5个,最多请求不能超过burstrate数量。limitreqzoneblogweiyigeektopburst5aliasdataweiyigeek。}}}4)减少磁盘IO
  减少磁盘IO次数可以帮助我们更好的提升服务器性能,增强服务器的负载能力。关闭不需要记录指定目录或者文件访问日志errorlogdevnull为日志写入创建缓存区减少IO次数,例如下面当缓存达到128k或者日志刷新时间为1m时将写入日志文件中(gzip压缩日志按需开启)accesslogvarlognginxaccess。logmainbuffer128kgzipflush1m;
  3。4运营优化
  1)永久重定向
  如果你的站点需要让httpURL跳转到https,则非建议设置永久重定向,而非临时重定向,这可以帮助你站点更好的被收录(SEO)。
  例如,配置http向https跳转(永久)方式1。Redirect(重定向)推荐server{listen80;servernameweiyigeek。topwww。weiyigeek。return301https:}方式2。ReWrite重写server{listen80;servernameweiyigeek。topwww。weiyigeek。判断请求host是否是www。weiyigeek。top,如果是weiyigeek。top则重写为www。weiyigeek。topif(httphost!www。weiyigeek。top34;{rewrite(。)https:www。weiyigeek。top1}}
  3。5配置优化
  nginx配置文件指令优化一览表
  位置
  指令
  说明
  优化
  main
  workerprocesses
  工作进程数的选择包括(但不限于)CPU核心的数量、存储数据的硬盘数量及负载模式
  设置auto或者catproccpuinfo
  main
  workercpuaffinity
  Nginx默认未开启CPU绑定,绑定工作进程到对应CPU核心
  多核CPU建议设置CPU绑定,绑定样例:
  workerprocesses4;
  workercpuaffinity0001001001001000;
  main
  workerrlimitnofile
  打开文件数限制(默认值1024),受限于系统的用户进程打开文件数限制,未设置则使用系统默认值
  修改用户打开文件数限制:
  echonofile65536etcsecuritylimits。conf
  修改所有Shell和通过Shell启动的进程打开文件数限制:
  echoulimitn65536etcprofile
  临时生效(重启后生效):ulimitn65536
  main
  workerconnections
  Nginx一个工作进程的最大同时连接数,不仅限于客户端连接,包括了和后端被代理服务器等其他的连接
  建议设置成与workerrlimitnofile值相等
  mian
  sendfile
  在http或server或location环境中包含sendfile指令。
  NGINX可以不需要切换到用户态,就把缓存或磁盘上的内容写入套接字而且写的速度非常快,消耗更少的CPU周期。
  注意尽管使用sendfile()数据拷贝可以绕过用户态但不适用于常规的NGINX处理改变内容的链和过滤器比如gzip
  建议设置成on
  mainevents
  acceptmutex
  惊群问题:
  如果指令值为on启用,那么将轮流唤醒一个工作进程接收处理新的连接,其余工作进程继续保持睡眠
  如果指令值为off关闭,那么将唤醒所有工作进程,由系统通过use指令指定的网络IO模型调度决定由哪个工作进程处理,未接收到连接请求的工作进程继续保持睡眠
  on开启状态为了稳定参数值;
  off关闭状态提高性能和吞吐量但是会带来上下文切换增多或者负载升高等等其它资源更多消耗的后果(推荐)
  mainevents
  use
  定义了Nginx设置用于复用客户端线程的轮询方法(也可称多路复用网络IO模型),自然是选择效率更高的优先(默认即可)
  useepoll
  main
  openfilecache
  开启关闭打开文件缓存默认值off关闭,强烈建议开启可以避免重新打开同一文件带来的系统开销节省响应时间
  max数字设置缓存元素的最大数量
  inactive时间设置超时当缓存溢出时使用LRU(最近最少使用)算法删除缓存中的元素;在这段时间内缓存元素如果没有被访问将从缓存中删除;
  openfilecachemax65536inactive60s
  main
  openfilecachevalid
  设置检查openfilecache缓存的元素的时间间隔
  80s
  main
  openfilecacheminuses
  设置在由openfilecache指令的inactive参数配置的超时时间内文件应该被访问的最小次数。
  如果访问次数大于等于此值,文件描述符会保留在缓存中,否则从缓存中删除。
  1hrmain
  errorlog
  错误的访问请求日志记录,当并发很大时Nginx的访问日志和错误日志的保存肯定会造成对磁盘的大量读写也将影响Nginx的性能
  注释即可或者错误日志设置为error或者crit
  mainhttp
  accesslog
  成功的访问请求日志记录,如必须保存日志,可以按每日或者每时或者其它时间段对日志做切割,这也可以减小IO,虽然可能效果不是特别大,不过因为日志文件尺寸变小了很多,也方便查阅或归档分析日志
  建议开启日志记录级别main
  mainhttp
  gzip
  默认开启了gzip压缩功能:增加CPU的处理时间和负载(默认即可)
  关闭gzip压缩功能:虽然减少了CPU计算节省了服务器的响应时间,但网站页面总体响应时间反而加长了静态文件数据传输时间增加;
  设置gzipon即可;(该模块中有附带参数)
  mainhttp
  keepalivetimeout
  空闲长连接保持打开状态的时间;复用之前已建立的TCP连接接收请求、发送回应,减少重新建立TCP连接的资源时间开销
  正数为开启持久连接(常规设置120)而0关闭。
  当网站页面内容以静态为主时,开启持久连接;
  动态网页且不能被转化为静态页面,则关闭持久连接;
  mainhttp
  keepaliverequests
  单个客户端长连接可以请求的数量但是当使用压力测试工具从一个客户端发送多个请求测试时,这个值设更高些特别有用
  默认值是100
  mainhttpserverlocation
  expires
  浏览器缓存设置HTTP应答中的Expires和CacheControl头标。Expires一般结合LastModified使用比较缓存时间,避免了从服务器再次传送文件内容减小了服务器压力,节省了带宽同时也提高了用户访问速度
  1表示永远过期不缓存,推荐静态文件如jscss等等访问设置expires30
  4。安全配置
  描述:Nginx因为安全配置不合适导致的安全问题,Nginx的默认配置中存在一些安全问题,例如版本号信息泄露、未配置使用SSL协议等。
  对Nginx进行安全配置可以有效的防范一些常见安全问题,按照基线标准做好安全配置能够减少安全事件的发生,保证采用Nginx服务器系统应用安全运行;
  Nginx安全配置项:0。隐藏nginx服务及其版本
  温馨提示:在修改相应的源代码文件后需重新编译。方式1:vinginx1。9。11srchttpngxhttpheaderfiltermodule。cstaticcharngxhttpserverstring〔〕Server:LTWS;修改处修改nginxhttpheaderfiltermodulevinginx1。9。11srchttpngxhttpspecialresponse。cstaticucharngxhttperrorfulltail〔〕centerNGINXVERcenterhrcenterhttp:www。weiyigeek。staticucharngxhttperrortail〔〕hrcenterLTWS设置响应头版本版本vimsrccorenginx。hdefineNGINXVERSIONsecWaf可以改成你要的版本号defineNGINXVER1。1NGINXVERSION改成你的服务名称
  设置成功后验证:
  1。低权限用户运行服务
  应配置非root低权限用户来运行nginx服务,设置如下建立Nginx用户组和用户,采用user指令指运行用户
  加固方法:useraddMgnginxwebssbinnologinnginxwebnginx。conf中配置或者编译的时候指定nginx安装编译参数usernginxgroupnginxusernginxweb
  2。配置SSL及其会话复用
  我们应该为提供的站点配置SecureSocketsLayerProtocol(SSL协议),配置其是为了数据传输的安全,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。server{开启SSL与http2支持listen443sslhttp2;listen〔::〕:443sslhttp2;开启SSL,如果想http与https公用一个配置则可以将其注释(thessldirectiveisdeprecated)配置证书链与证书密钥sslcertificateetcnginxsslfullchain。sslcertificatekeyetcnginxsslweiyigeek。top。ssl会话复用超时时间以及会话复用缓存大小sslsessiontimeout1d;sslsessioncacheshared:MozSSL:10m;about40000sessions。。。。。。}
  3。限制SSL协议与加密套件
  不应使用不安全SSLv2、SSLv3协议即以下和存在脆弱性的加密套件(ciphers),我们应该使用较新的TLS协议也应该优于旧的,并使用安全的加密套件。兼容性较为通用的SSL协议与加密算法套件sslprotocolsTLSv1TLSv1。1TLSv1。2TLSv1。3;sslciphersECDHEECDSAAES128GCMSHA256:ECDHERSAAES128GCMSHA256:ECDHEECDSAAES256GCMSHA384:ECDHERSAAES256GCMSHA384:ECDHEECDSACHACHA20POLY1305:ECDHERSACHACHA20POLY1305:ECDHE:ECDH:AES:HIGH:EECDHCHACHA20:EECDHCHACHA20draft:EECDHAES128:RSAAES128:EECDHAES256:RSAAES256:EECDH3DES:RSA3DES:DHERSAAES128GCMSHA256:DHERSAAES256GCMSHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4;浏览器客户端自动协商加密套件(为了兼容性)
  4。拦截垃圾信息
  HTTPReferrerSpam是垃圾信息发送者用来提高他们正在尝试推广的网站的互联网搜索引擎排名一种技术,如果他们的垃圾信息链接显示在访问日志中,并且这些日志被搜索引擎扫描,则会对网站排名产生不利影响
  加固方法:if(httpreferer(babesforsalegirljewelrylovenuditorganicpokerpornsexteen)){return403;}
  5。恶意扫描拦截
  当恶意攻击者采用扫描器进行扫描时候利用useagent判断是否是常用的工具扫描以及特定的版本,是则返回错误或者重定向;封杀各种useragentif(httpuseragentjavapythonperlrubycurlbashechounamebase64decodemd5sumselectconcathttprequesthttpclientnmapscannessuswvs){return403;}if(httpuseragent){return403;}封杀特定的文件扩展名比如。bak以及目录;location。(bakswpsaveshsqlmdbsvngitold){rewrite(。)}location(adminphpadminstatus){}
  6。禁用WebDAV
  Nginx支持webdav,虽然默认情况下不会编译。如果使用webdav,则应该在Nginx策略中禁用此规则。
  加固方法:davmethods应设置为off
  7。禁用Nginx状态模块
  当访问一个特制的URL时,如。。nginx。status,stubstatus模块提供一个简短的Nginx服务器状态摘要,大多数情况下不应启用此模块。
  加固方法:nginx。conf文件中stubstatus不应设置为:on
  8。关闭默认错误页上的Nginx版本号
  如果在浏览器中出现Nginx自动生成的错误消息,默认情况下会包含Nginx的版本号,这些信息可以被攻击者用来帮助他们发现服务器的潜在漏洞
  加固方法:关闭Server响应头中输出的Nginx版本号将servertokens应设置为:offservertokensoff
  9。设置clientbodytimeout超时
  clientbodytimeout设置请求体(requestbody)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后Nginx返回HTTP状态码408(Requesttimedout)。
  加固方法:nginx。conf文件中clientbodytimeout应设置为:10
  10。设置clientheadertimeout
  clientheadertimeout设置等待client发送一个请求头的超时时间(例如:GETHTTP1。1)。仅当在一次read中没有收到请求头,才会设为超时。超时后Nginx返回HTTP状态码408(Requesttimedout)。
  加固方法:nginx。conf文件中clientheadertimeout应设置为:10
  11。设置keepalivetimeout超时
  keepalivetimeout设置与client的keepalive连接超时时间。服务器将会在这个时间后关闭连接。
  加固方法:nginx。conf文件中keepalivetimeout应设置为:55
  12。设置sendtimeout超时
  sendtimeout设置客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。
  加固方法:nginx。conf文件中sendtimeout应设置为:10
  13。Nginx可用的方法应限制为GET,HEAD,POST
  GET和POST是Internet上最常用的方法。Web服务器方法在RFC2616中定义禁用不需要实现的可用方法。
  加固方法:nginx。conf文件中应存在if(requestmethod!(GETHEADPOST))
  14。控制并发连接limitzoneslimits
  limitzone配置项限制来自客户端的同时连接数。通过此模块可以从一个地址限制分配会话的同时连接数量或特殊情况。
  加固方法:nginx。conf文件中limitzone应设置为:slimitsbinaryremoteaddr5m设定保存各个键(例如binaryremoteaddr)状态的共享内存空间的参数,zone空间名字:大小大小的计算与变量有关limitconnzonebinaryremoteaddrzoneops:10m;
  15。控制并发连接limitconnslimits
  该配置项控制一个会话同时连接的最大数量,即限制来自单个IP地址的连接数量。
  加固方法:nginx。conf文件中limitconn应设置为:slimits5表示同一IP同一时间只允许10个连接limitconnops5;
  16。主机防webshell跨目录浏览以及列目录
  加固方法:a。在nginx。conf里把每个虚拟主机站点请求端口给区别开b。为每个站点建一个conf,并进行配置c。修改phpfpm启动脚本d。启动服务在mainhttpserver段中设置开启或者关闭(对于需要列目录的则开启,否则默认是关闭的)autoindexoff
  17。文件名解析漏洞phpinfo,加入fcgi。conf即可if(requestfilename(。)。php){setphpurl1;}if(!ephpurl。php){return403;}
  18。访问权限控制nginx
  加固方法:nginx。conflocationscript{authbasicwelcometoweiyigeek。github。authbasicuserfilevarwwwtestscript。}建立htpasswd密码进行认证mkdirvarwwwtestscriptperleprintcrypt(baidu。eud,n);nnUygd3RSf3u6echonginx:nnUygd3RSf3u6varwwwtestscript。htpasswdusrlocalnginxsbinnginxsreload
  19。异常状态返回200隐藏URL
  解决办法:server{listen80;servernameweiyigeek。indexindex。htmlindex。htmindex。errorpage404200404。}
  20。安全模块的选择安全检测模块选择httpsubmodulehttpstubstatusmodulexssnginxmodulewithhttpsslmodule
  21。记录访问者真实IP
  描述后端获取Proxy后的真实Client的IP获取需要安装withhttprealipmodule,然后后端程序采用JAVA(request。getAttribute(XRealIP))进行获取;setrealipfrom100。0。0。08;(这里是已知的代理ip)realipheaderXForwardedF代理转发location{proxypasshttp:weiyigeek。top}proxysetheaderHproxysetheaderXForwardedFsetRif(Real(d)。(d)。(d)。(d),(。)){setReal1。2。3。4;}proxysetheaderXRealIP区别proxyaddxforwardedfor较下面多一个remoteaddr的(只能获取到与服务器本身直连的上层请求ip)httpxforwardedfor日志获取httpxrealipremoteaddr前提条件是cdn那边也设置了Xforward否则获取的是cdn的ip
  22。地区访问响应措施
  描述:如果要使用geoip地区选择,我们需要再nginx编译时加入withhttpgeoipmodule编译参数。例如,访问者IP地址不为中国或者美国的都返回403。if(geoipcountrycode!(CNUS)){return403;}
  23。资源防盗链设置
  描述:为了防止外部站点引用我们的静态资源,我们需要设置那些域名可以访问我们的静态资源。none:Referer来源头部为空的情况blocked:Referer来源头部不为空servernames:Referer来源头部包含当前的servernames(当前域名)location。(gifjpgpngswfflv){validreferersnoneblockedweiyigeek。topservernames。google。。baidu。;这是可以盗链的域名或IP地址,一般情况可以把google,baidu,sogou,soso,bing,feedsky,zhuaxia,photozero等域名放进来if(invalidreferer){这样设置能够防盗链,不断地302重定向很多次,可能会加重服务器的负担,所以不建议这么做,除非有单独的图片服务器支持return403;或者返回403错误代码或者JSON字符串返回jsonaddheaderContentTcharsetutf8;return200{msg:valid};本地目录重写rewrite。。(gifjpgjpegpng)staticqrcode。重写远程URLrewritehttps:www。weiyigeek。toppictureimagesdetailsimage1。}}
  24。常规安全响应头配置
  描述:下面收集了Web服务中常规的安全响应头,它可以保证不受到某些攻击,建议在指定的server{}代码块进行配置。HSTS(ngxhttpheadersmoduleisrequired)应该只使用HTTPS而不是使用HTTP通信addheaderStrictTransportSecuritymaxage31536000;includeSubDXXSProtectionaddheaderXXSSProtection1;MIME模拟探测addheaderXContentTypeOFrame安全控制addheaderXFrameOptionsALLOWFROMmusic。163。SpiderRobots爬取策略限制addheaderXRobotsTCORS跨域设置addheaderAccessControlAllowOrigin。weiyigeek。addheaderAccessControlAllowMethodsGET;addheaderAccessControlAllowHeadersDNT,XMxReqToken,KeepAlive,UserAgent,XRequestedWith,IfModifiedSince,CacheControl,ContentType,ACSP现在让我们允许自托管scripts、images、CSS、fonts和AJAX,以及jQueryCDN托管脚本和GoogleAnalytics的内容:ContentSecurityPolicy:scriptsrcselfhttps:code。jquery。comhttps:www。googleanalytics。imgsrcselfhttps:www。googleanalytics。
  25。防止非所属域名解析到服务器
  描述:为了防止某些未备案的域名或者恶意镜像站域名绑定到我们服务器上,导致服务器被警告关停,将会对业务或者SEO排名以及企业形象造成影响,我们可以通过如下方式进行防范。server{listen80servername82。156。18。253;禁止搜索引擎收录IPaddheaderXRobotsTagnoindex,noarchive,location{IP地址访问强制301跳转if(host82。156。18。253){return301https:www。weiyigeek。topindex。}请求host非指定域名时返回jsonif(host!weiyigeek。top){addheaderContentTcharsetutf8;return200{status:error,Author:WeiyiGeek,Site:https:www。weiyigeek。top,Chinese:大佬,请不要把你的域名解析到我的服务器上,English:Friend,Pleasedonotresolveyourdomainnametomyserver};return301https:space。bilibili。com385802642;}}。。。}
  执行结果:curlI82。156。18。253HTTP1。1301MovedPermanentlyServer:nginxDate:Mon,11Apr202212:15:02GMTContentType:texthtmlContentLength:162Connection:keepaliveLocation:https:www。weiyigeek。topindex。htmlXRobotsTag:noindex,noarchive,nosnippetcurlinsecureIhttps:82。156。18。253HTTP2301server:nginxdate:Mon,11Apr202212:15:24GMTcontenttype:texthtmlcontentlength:162location:https:www。weiyigeek。topindex。htmlxrobotstag:noindex,noarchive,nosnippetcurlweiyigeek。cn{status:error,Author:WeiyiGeek,Site:https:www。weiyigeek。top,Chinese:大佬,请不要把你的域名解析到我的服务器上,English:Friend,Pleasedonotresolveyourdomainnametomyserver}
  25。限制指定客户端地址访问
  描述:有时你的网站可能只需要被某一IP或者IP段的地址请求访问,那么非白名单中的地址访问将被阻止访问,我们可以如下配置;location{allow12。97。167。194;allow12。33。1。2;allow12。152。49。4;}
  5。配置说明
  常用nginx配置文件解释:〔Main〕Nginx启动的用户(建议非root用户)〔Main〕NGINX工作进程数设置值和CPU核心数一致(优化选项)采用grepprocessorproccpuinfowcl进行查看或者〔Main〕工作模式与连接数上限即每个工作进程可以处理并发的最大连接数(优化选项)events{〔Mainevents〕nginx作为反向代理服务器单个进程最大连接数(最大连接数连接数进程数)建议与workerrlimitnofile一致workerconnections65535;〔Mainevents〕use〔kqueuertsigepolldevpollselectpoll〕;epoll模型是Linux2。6以上版本内核中的高性能网络IO模型,如果跑在FreeBSD上面,就用kqueue模型。〔Mainevents〕提高性能和吞吐量}〔Main〕高并发参数(通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗)(优化选项)workercpuaffinity0001001001001000;四核的时候假如是8cpu分配如下:workercpuaffinity0000000100000010000001000000100000010000001000000100000010000000〔Main〕默认是没有设置,可以限制为操作系统最大的限制65535。(优化选项)workerrlimitnofile65535〔Main〕日志位置和日志级别〔debuginfonoticewarnerrorcrit〕errorloglogserror。errorloglogserror。errorloglogserror。errorloglogserror。服务进程启动文件pidvarrunnginx。当前主配置文件包含其他的nginx模块配置文件includeetcnginxconf。d。〔Main部分〕http服务器提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。http{文件扩展名与文件类型映射表includemime。默认文件类型响应的编码格式charsetUTF8;服务器名字的hash表大小servernameshashbucketsize128;缓冲区代理缓冲用户端请求的最大字节数,clientbodybuffersize128k上传文件大小限制clientheaderbuffersize4k;允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值clientmaxbodysize10m文件访问缓存设置与系统文件描述符设置一致openfilecachemax65536inactive60s;openfilecachevalid80s;openfilecacheminuses1;largeclientheaderbuffers464k;设定请求缓nginx日志记录格式logformatmainremoteaddrremoteuser〔timelocal〕使用缓冲而不是每条日志记录都单独执行写操作,NGINX会缓冲一连串的日志记录使用单个操作把它们一起写到文件中。accessloglogsaccess。logmainbuffer1024flush60s;关闭server信息头响应〔MAINhttp〕开启高效文件传输模式,指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换(与acceptmutex关联配置)对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用可设置为off,以平衡磁盘与网络IO处理速度,降低系统的负载。系统调用可以实现从一个文件描述符到另一个文件描述符的数据拷贝,通常实现零拷贝,这能加速TCP数据传输当配置环境下有sendfile指令和激活内容更改过滤器的指令时NGINX会自动禁用sendfile。(优化选项)防止网络阻塞,不过要包涵在keepalived参数才有效空闲长连接保持打开状态的时间(优化选项)长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传120s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。keepalivetimeout120;用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间客户端没有任何活动,Nginx将会关闭连接sendtimeout180s模块httpgzip开启gzip压缩输出,减少网络传输。最小压缩文件大小(注意不能小于1k)gzipminlength1k;压缩缓冲区gzipbuffers464k;压缩版本(默认1。1,前端如果是squid2。5请使用1。0)gziphttpversion1。1;压缩等级gzipcomplevel2;压缩类型,默认就已经包含texthtml,模块fastcgiFastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。fastcgicachepathtmpfastcgicachelevels1:2keyszonecachefastcgi:128minactive30mmaxsize1g;指定的Http状态码指定缓存时间fastcgicachevalid2003021h;fastcgicachevalid3011d;fastcgicachevalidany1m;fastcgicacheminuses1;fastcgicacheusestaleerrortimeouthttp500http503指定链接到后端FastCGI的超时时间。fastcgiconnecttimeout300;向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。fastcgisendtimeout300;指定接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。fastcgireadtimeout300;指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为gastcgibuffers选项指定的缓冲区大小。fastcgibuffersize64k;一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存fastcgibuffers464k;建议设置为fastcgibuffer的两倍,繁忙时候的bufferfastcgibusybufferssize128k;fastcgitempfilewritesize128k;〔Mainhttp〕配置虚拟主机设置http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置server{〔Mainhttpserver〕ngnix监听端口listen80;服务器名:虚拟主机的域名可以写多个域名,可以通过正则匹配。实现访问http时自动跳转到httpsreturn301https:accessloglogshost。access。请求正则匹配的来判断访问路径,默认访问localhost:80访问的是下面这个路径的网页location{站点根目录你网站文件存放的地方定义路径下默认访问的文件名,一般跟着root放indexindex。htmlindex。开启限制IP连接数的时候需要使用limitzonecrawlerbinaryremoteaddr10m;访问控制模块默认就会安装,而且写法也非常简单,可以分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何一个规则就停止往下匹配(安全选项)allow192。168。10。100;allow172。29。73。024;认证访问通过httpddevel工具的htpasswd来为访问的路径设置登录密码(安全选项)比如:htpasswdcnginx。htpasswdadmin生成了默认使用CRYPT加密的密码文件authbasicNginxStatusauthbasicuserfileusrlocalnginxnginx。passwd列出目录autoindexNginx默认是不允许列出整个目录的合适下载服务器。(非常不推荐)如需此功能,打开nginx。conf文件,在location,server或http段中加入autoindexon显示出文件的确切大小单位是bytes。改为off后显示出文件的大概大小,单位是kB或者MB或者GBautoindexexactsizeoff默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间}errorpage404404。将服务器错误页面直接指向静态页面50x。htmlerrorpage50050250350450x。location50x。html{}代理PHP脚本到Apache上监听127。0。0。1:80末尾以php或者php5结尾的location。(phpphp5)?{proxypasshttp:127。0。0。1;}将PHP脚本传递到正在监听127。0。0。1:9000的FastCGI服务器location。。(phpphp5){fastcgipass127。0。0。1:9000;fastcgipassunix:tmpphp。为了安全推荐方式fastcgiindexindex。fastcgiparamSCRIPTFILENAME}如果Apache的文档根目录与nginx的根目录一致,则拒绝访问。htaccess文件location。ht{}静态资源正则请求路径匹配location。。(gifjpgjpegpngbmpswftxtcsvdocdocxxlsxlsxpptpptxflv){roote:expires30d;缓存有效期30天访问记录}JS和CSS缓存时间设置location。。(jscsshtmlxml){expires30d;}访问控制也可以加入认证locationnginxstatus{nginx中的stubstatus模块主要用于查看Nginx的一些状态信息。本模块默认没有安装需要编译安装。allow192。168。1。024;allow127。0。0。1;}}Nginx反向代理〔Mainhttp〕upstream模块设置反向代理和负载均衡的连接的内部web应用服务IP端口upstreammonitorserver{seesion记录访问的主机,比如第一次访问该服务器后就记录,之后再访问都是该服务器了进行了绑定内网的应用服务,weigth参数表示权值越高被分配到的几率越大。maxfails当有maxfails个请求失败,就表示后端的服务器不可用,默认为1将其设置为0可以关闭检查failtimeout在以后的failtimeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器server192。168。0。131:80weight9maxfails5failtimeout600s;server192。168。0。132:80weight1maxfails5failtimeout600s;}server指令配置项server{listen80;请求响应的域名servernameblog。weiyigeek。location{模块httpproxy:反向代理主要配置即反向代理,对应upstream负载均衡器proxypasshttp:代理服务器相关信息头设置如果是有涉及redirect的服务,一定要加上端口8081,否则默认tomcat在redirect时候默认找80端口proxysetheaderH转发请求的原IP地址,程序中通过request。getHeader(ProxyClientIP)获得ipproxysetheaderXRealIP端的Web服务器可以通过XForwardedFor获取用户真实IPproxysetheaderXForwardedFnginx跟后端服务器连接超时时间(代理连接超时)模块httpproxy代理超时设置proxyconnecttimeout60s;nginx跟后端服务器连接超时时间(代理连接超时)proxyreadtimeout60s;后端服务器数据回传时间(代理发送超时)间proxysendtimeout30s;设置代理服务器(nginx)从后端realserver读取并保存用户头信息的缓冲区大小,默认与proxybuffers大小相同,其实可以将这个指令值设的小一点proxybuffersize4kproxybuffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的proxybuffers432k高负荷下缓冲大小(proxybuffers2)proxybusybufferssize64k当proxybuffers放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M它与proxycache没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。proxymaxtempfilesize0当缓存被代理的服务器响应到临时文件时,限制每次写临时文件的大小。proxytemppath(可以在编译的时候)指定写到哪那个目录。proxytempfilewritesize64k把cookie的作用域替换成我们的域名。proxycookiedomaingoogle。com。hkwww。example。proxysetheaderHostwww。google。com。设置反向代理得header请求头proxyredirecthttp:www。google。com。重定向proxyredirecthttp:https:;subfilterwww。google。com。hkwww。example。把谷歌的域名替换成自己的,注意需要安装nginx的subfilter模块反向代理的配置。END}本地动静分离反向代理配置所有jsp的页面均交由tomcat或resin处理location。(jspjspxdo)?{proxysetheaderHproxysetheaderXRealIPproxysetheaderXForwardedFproxypasshttp:127。0。0。1:8080;}所有静态文件由nginx直接读取不经过tomcat或resinlocation。(htmhtmlgifjpgjpegpngbmpswfiocrarziptxtflvmiddocpptpdfxlsmp3wma){expires15d;}location。(jscss){expires1h;}}另一个虚拟主机,混合使用IP、名称和基于端口的配置server{listen80;listen〔::〕:80;servernameweiyigeek。return301https:}server{listen443sslhttp2;listen〔::〕:443sslhttp2;servernameweiyigeek。HSTS(ngxhttpheadersmoduleisrequired)应该只使用HTTPS而不是使用HTTP通信addheaderStrictTransportSecuritymaxage31536000;includeSubDXXSProtectionaddheaderXXSSProtection1;MIME模拟探测addheaderXContentTypeOFrame安全控制addheaderXFrameOptionsALLOWFROMmusic。163。SpiderRobots爬取策略限制addheaderXRobotsT不限制addheaderXRobotsTagnoindex,noarchive,限制开启SSL,如果想http与https公用一个配置则可以将其注释(thessldirectiveisdeprecated)配置证书链与证书密钥sslcertificateetcnginxsslfullchain。sslcertificatekeyetcnginxsslweiyigeek。top。ssl会话复用超时时间以及会话复用缓存大小sslsessiontimeout1d;sslsessioncacheshared:MozSSL:10m;about40000sessions配置双证书时开启否则应该关闭OCSP使用根CA和中间证书验证OCSP响应的信任链ssltrustedcertificateetcnginxsslca。仅使用ECDH是不用配置ssldhparam的否则你应该为它配置上curlhttps:sslconfig。mozilla。orgffdhe2048。兼容性较为通用的SSL协议与加密算法套件sslprotocolsTLSv1TLSv1。1TLSv1。2TLSv1。3;sslciphersECDHEECDSAAES128GCMSHA256:ECDHERSAAES128GCMSHA256:ECDHEECDSAAES256GCMSHA384:ECDHERSAAES256GCMSHA384:ECDHEECDSACHACHA20POLY1305:ECDHERSACHACHA20POLY1305:ECDHE:ECDH:AES:HIGH:EECDHCHACHA20:EECDHCHACHA20draft:EECDHAES128:RSAAES128:EECDHAES256:RSAAES256:EECDH3DES:RSA3DES:DHERSAAES128GCMSHA256:DHERSAAES256GCMSHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4;安全配置:sslciphersECDHERSAAES128GCMSHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;证书常规握手加密算法方式共十八个,ECDHE、DHE、AES开头分别6个;sslciphersECDHERSAAES128GCMSHA256:ECDHERSAAES256GCMSHA384:DHERSAAES256GCMSHA384:DHERSAAES128GCMSHA256:ECDHERSAAES256SHA384:ECDHERSAAES128SHA256:ECDHERSAAES256SHA:ECDHERSAAES128SHA:DHERSAAES256SHA256:DHERSAAES128SHA256:DHERSAAES256SHA:DHERSAAES128SHA:AES256GCMSHA384:AES128GCMSHA256:AES256SHA256:AES128SHA256:AES256SHA:AES128SHA:HIGH:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DES:!MD5:!RC4;为了兼容性推荐服务器自动选择要使用的算法套件replacewiththeIPaddressofyourresolverresolver223。6。6。68。8。8。8192。168。12。254;}}6。补充知识
  (1)阿里巴巴提供的Concat或者Google的PageSpeed模块实现这个合并文件的功能。Concat源代码网址:https:github。comalibabanginxhttpconcatPageSpeed源代码网址:https:github。compagespeedngxpagespeed。
  (2)PHPFPM的优化
  如果您高负载网站使用PHPFPM管理FastCGI对于PHPFPM的优化非常重要1。增加FastCGI进程数:把PHPFastCGI子进程数调到100或以上,在4G内存的服务器上200就可以建议通过压力测试获取最佳值。2。增加PHPFPM打开文件描述符的限制vipathtophpfpm。conf找到1024,把1024更改为4096或者更高,之后重启PHPFPMetcsecuritylimits。confhardnofile65536softnofile655363。适当增加maxrequests:标签maxrequests指明了每个children最多处理多少个请求后便会被关闭默认的设置是500。
  (3)配置ResinonLinux或者Windows为我们可以打开resin3。1。9binhttpd。sh在不影响其他代码的地方加入:Dhttps。protocolsTLSv1。2,例如execJAVAEXEjarDhttps。protocolsTLSv1。2{RESINHOME}libresin。jarexecJAVAEXEjar{RESINHOME}libresin。jar
  原文地址:https:blog。weiyigeek。top201992122。html
投诉 评论 转载

今日区块链资讯1。韩国统计局(KOSTAT)将在3月31日对2万个家庭的加密货币持有量进行估值抽样调查,但调查结果不会向公众公布。KOSTAT将加密货币定义为正在加密货币交易所交易的虚拟资产……刚刚,百度公司终于被判公开道歉了,终审判决维持原判,立即生效刚刚,百度公司终于被判公开道歉了,终审判决维持原判,立即生效【陈平诉百度侵权第五系列案定了,北京西城法院判百度公开道歉和赔偿,终审维持原判】一、作家称百度侵权,被判公开道……德国时尚服饰品牌PhilippPlein接受比特币等15种加近期不少知名的时尚品牌宣布将跨足区块链产业,像是LV、Burberry以及DolceGabbana都推出了属于自己品牌的NFT。德国知名服饰品牌PhilippPlein也接续着……年底取消购车补贴2022年清洁能源汽车将占中国总销量18据法国《论坛报》网站近日报道,中国将逐步停止帮助电动汽车制造商做生意的补贴政策。有关部门宣布,中国将在2022年底取消对电动汽车和混合动力汽车的补贴。在中国制定到2060年实现……沸腾!华为HarmonyOS2来了!鸿蒙初现,看看谁在它的朋文:李婷石丹ID:BMR2004沸腾!华为HarmonyOS2面世,引发了市场及各社交媒体的讨论与关注度直线飙升。6月2日晚,HarmonyOS2今日发布冲上……董明珠曾经吹过的牛,又有几个实现了呢?员工双休和公积金交了吗格力未给员工足额交纳公积金,这个事大家都知道了。从这件事当中就可以看出董小姐,完全就是一个说话不怎么负责任的人。她曾经所说的话有几个实现了呢?以前她看小米手机做得不错,因为当时……华为官宣2月27日发布会,但是Mate50系列不太可能此次亮华为智慧办公春季发布会官宣,确认将在2月27日21点30分召开发布会,此次发布会的主题为超级终端,超级创造力。,并附上一张有五颗星球的海报。但是官方并未透露将要在发布会上展示哪……c语言opencv删除图片c语言opencv删除图片在进行图像处理的时候,经常要进行图像的剔除。下面我们学习一下opencv删除图像的函数。intresultremove(imgpath〔i〕。c……安全开发运维必备的Nginx代理Web服务器性能优化与安全加1。引言1。1目的为了更好的指导部署与测试艺术升系统nginx网站服务器高性能同时下安全稳定运行,需要对nginx服务进行调优与加固;本次进行Nginx服务调优加固……比亚迪插混引领新能源现在自主品牌诸如吉利汽车、长安汽车、长城汽车、奇瑞汽车等其实都在研发自家的插混车型,大家都在研发或者刚刚上市不久,唯独比亚迪已经在插混领域大卖了。估计那几家自主品牌做梦也……东芯上市首日大涨,176名员工干出200亿市值,背后是江苏企12月10日,存储芯片企业东芯股份正式登录资本市场。截至收盘,东芯股份股价为46。75元,涨幅为54。90,市值达到206。75亿元。存储芯片是电子系统中存储和计算数据的……交易所终极形态WEB3。0去中心化交易所MEMEDEX展露头不久前,俄罗斯对乌克兰展开了军事行动,这场冲突不仅扰乱了全球地缘政治秩序,也冲击着全球资本市场,加密领域亦不例外。一方面,伴随着局势的变化,比特币等加密货币价格大幅震荡;另一方……
做自媒体,有哪些常用的工具值得推荐?1。14版本defer性能大幅度提升,内部实现了开放编码优化为你深度解开VIVOS12Pro的美丽面纱2018Q4全球手机市场报告华为市场份额排名第三自己的工资凭什么不能讨论?苹果WWDC2021终极剧透五大系统重磅升级,MacBook选购手机四大误区,买新不买旧只是其中之一,另外三点更重要阻击小米华为和OPPO,百度进军电视行业推小度86寸巨屏智能为何越来越多的妈妈开始选择国产奶粉?国产奶粉选购攻略十荟团被顶格罚款,社区团购没有无辜者雷军人狠话不多,8GB128GB,一亿像素四摄手机仅需125年轻人的第一把机械键盘,米物ART三模机械键盘

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利