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

为了更好的指导部署与测试艺术升系统nginx网站服务器高性能同时下安全稳定运行,需要对nginx服务进行调优与加固;

本次进行Nginx服务调优加固主要从以下几个部分:

本文档仅供内部使用,禁止外传,帮助研发人员,运维人员对系统长期稳定的运行提供技术文档参考。

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx作为负载均衡服务器, Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。

Nginx版本选择:

项目结构:



Nginx文档帮助: http://nginx.org/en/docs/
Nginx首页地址目录: /usr/share/nginx/html
Nginx配置文件:



localtion 请求匹配的url实是一个正则表达式:

Nginx 匹配判断表达式:

例如,匹配末尾为如下后缀的静态并判断是否存在该文件, 如不存在则404。



查看可用模块编译参数:http://nginx.org/en/docs/configure.html



http_gzip模块
开启gzip压缩输出(常常是大于1kb的静态文件),减少网络传输;



http_fastcgi_module模块
nginx可以用来请求路由到FastCGI服务器运行应用程序由各种框架和PHP编程语言等。可以开启FastCGI的缓存功能以及将静态资源进行剥离,从而提高性能。



keepalive模块
长连接对性能有很大的影响,通过减少CPU和网络开销需要开启或关闭连接;



http_ssl_module模块
Nginx开启支持Https协议的SSL模块

Linux内核参数部分默认值不适合高并发,Linux内核调优,主要涉及到网络和文件系统、内存等的优化,

下面是我常用的内核调优配置:



文件描述符
文件描述符是操作系统资源,用于表示连接、打开的文件,以及其他信息。NGINX 每个连接可以使用两个文件描述符。
例如如果NGINX充当代理时,通常一个文件描述符表示客户端连接,另一个连接到代理服务器,如果开启了HTTP 保持连接,这个比例会更低(译注:为什么更低呢)。

对于有大量连接服务的系统,下面的设置可能需要调整一下:



精简模块:Nginx由于不断添加新的功能,附带的模块也越来越多,建议一般常用的服务器软件使用源码编译安装管理;

(1) 减小Nginx编译后的文件大小



(2) 指定GCC编译参数
修改GCC编译参数提高编译优化级别稳妥起见采用 -O2 这也是大多数软件编译推荐的优化级别。

GCC编译参数优化 [可选项] 总共提供了5级编译优化级别:



常用编译参数:



缓存和压缩与限制可以提高性能
NGINX的一些额外功能可用于提高Web应用的性能,调优的时候web应用不需要关掉但值得一提,因为它们的影响可能很重要。

简单示例:



1) 永久重定向

例如,配置 http 向 https 跳转 (永久)



nginx配置文件指令优化一览表



描述:Nginx因为安全配置不合适导致的安全问题,Nginx的默认配置中存在一些安全问题,例如版本号信息泄露、未配置使用SSL协议等。
对Nginx进行安全配置可以有效的防范一些常见安全问题,按照基线标准做好安全配置能够减少安全事件的发生,保证采用Nginx服务器系统应用安全运行;

Nginx安全配置项:

温馨提示: 在修改相应的源代码文件后需重新编译。

设置成功后验证:



应配置非root低权限用户来运行nginx服务,设置如下建立Nginx用户组和用户,采用user指令指运行用户

加固方法:



我们应该为提供的站点配置Secure Sockets Layer Protocol (SSL协议),配置其是为了数据传输的安全,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。



不应使用不安全SSLv2、SSLv3协议即以下和存在脆弱性的加密套件(ciphers), 我们应该使用较新的TLS协议也应该优于旧的,并使用安全的加密套件。



HTTP Referrer Spam是垃圾信息发送者用来提高他们正在尝试推广的网站的互联网搜索引擎排名一种技术,如果他们的垃圾信息链接显示在访问日志中,并且这些日志被搜索引擎扫描,则会对网站排名产生不利影响
加固方法:



当恶意攻击者采用扫描器进行扫描时候利用use-agent判断是否是常用的工具扫描以及特定的版本,是则返回错误或者重定向;



Nginx支持webdav,虽然默认情况下不会编译。如果使用webdav,则应该在Nginx策略中禁用此规则。
加固方法: dav_methods 应设置为off



当访问一个特制的URL时,如"../nginx.status",stub_status模块提供一个简短的Nginx服务器状态摘要,大多数情况下不应启用此模块。
加固方法:nginx.conf文件中stub_status不应设置为:on



如果在浏览器中出现Nginx自动生成的错误消息,默认情况下会包含Nginx的版本号,这些信息可以被攻击者用来帮助他们发现服务器的潜在漏洞
加固方法: 关闭"Server"响应头中输出的Nginx版本号将server_tokens应设置为:off



client_body_timeout设置请求体(request body)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。
加固方法:nginx.conf文件中client_body_timeout应设置为:10



client_header_timeout设置等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1)。仅当在一次read中没有收到请求头,才会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。

加固方法:nginx.conf文件中client_header_timeout应设置为:10



keepalive_timeout设置与client的keep-alive连接超时时间。服务器将会在这个时间后关闭连接。

加固方法:nginx.conf文件中keepalive_timeout应设置为:55



send_timeout设置客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。

加固方法:nginx.conf文件中send_timeout应设置为:10



GET和POST是Internet上最常用的方法。Web服务器方法在RFC 2616中定义禁用不需要实现的可用方法。

加固方法:



limit_zone 配置项限制来自客户端的同时连接数。通过此模块可以从一个地址限制分配会话的同时连接数量或特殊情况。

加固方法:nginx.conf文件中limit_zone应设置为:slimits $binary_remote_addr 5m



该配置项控制一个会话同时连接的最大数量,即限制来自单个IP地址的连接数量。

加固方法:nginx.conf 文件中 limit_conn 应设置为: slimits 5



加固方法:





加固方法:



解决办法:





描述后端获取Proxy后的真实Client的IP获取需要安装--with-http_realip_module,然后后端程序采用JAVA(request.getAttribute("X-Real-IP"))进行获取;



描述: 如果要使用geoip地区选择,我们需要再nginx编译时加入 --with-http_geoip_module 编译参数。



描述: 为了防止外部站点引用我们的静态资源,我们需要设置那些域名可以访问我们的静态资源。



描述: 下面收集了Web服务中常规的安全响应头, 它可以保证不受到某些攻击,建议在指定的 server{} 代码块进行配置。



描述: 为了防止某些未备案的域名或者恶意镜像站域名绑定到我们服务器上, 导致服务器被警告关停,将会对业务或者SEO排名以及企业形象造成影响,我们可以通过如下方式进行防范。

执行结果:



描述: 有时你的网站可能只需要被某一IP或者IP段的地址请求访问,那么非白名单中的地址访问将被阻止访问, 我们可以如下配置;



常用nginx配置文件解释:

(1) 阿里巴巴提供的Concat或者Google的PageSpeed模块实现这个合并文件的功能。



(2) PHP-FPM的优化
如果您高负载网站使用PHP-FPM管理FastCGI对于PHP-FPM的优化非常重要



(3) 配置Resin on Linux或者Windows为我们可以打开 resin-3.1.9/bin/httpd.sh 在不影响其他代码的地方加入:-Dhttps.protocols=TLSv1.2, 例如

原文地址: https://blog.weiyigeek.top/2019/9-2-122.html



  • Serverless鏋舵瀯寰湇鍔℃灦鏋勫垎甯冨紡鏋舵瀯鍗曚綋鏋舵瀯鍥涚杞欢鏋舵瀯璇﹁В_鐧惧害...
    绛旓細鐩墠,渚嬪鐧婚檰閴存潈鏈嶅姟,浜戞暟鎹簱鏈嶅姟绛夌涓夋柟鏈嶅姟鍦瀹夊叏鎬с佸彲鐢ㄦс佹ц兘鏂归潰閮借繘琛屼簡澶ч噺浼樺寲,寮鍙鍥㈤槦鐩存帴闆嗘垚绗笁鏂圭殑鏈嶅姟,鑳藉鏈夋晥鐨勯檷浣庡紑鍙戞垚鏈,鍚屾椂浣垮緱搴旂敤鐨杩愮淮杩囩▼鍙樺緱鏇村姞娓呮櫚,鏈夋晥鐨勬彁鍗囦簡搴旂敤鐨勫彲缁存姢鎬с 鏇村揩鐨勫紑鍙戦熷害:杩欎竴鐐瑰湪鐜板湪浜掕仈缃戝垱涓氬叕鍙稿緱鍒板緢濂界殑浣撶幇,鍒涗笟鍏徃寰寰寮濮嬬敱浜庝汉鍛樺拰璧勯噾绛夐棶棰...
  • 鍏充簬杩愮淮:杩愮淮宸ヤ綔姊崇悊
    绛旓細闅忕潃闇姹傜殑澧為暱锛屾妧鑳藉崌绾т笌涓撲笟鍖</鎴愪负鍏抽敭锛岃繍缁翠汉鍛樹笓绮句簬鍚勮嚜鐨勯鍩燂細鏈嶅姟杩愯鐩戞帶锛岀幆澧冨缓璁撅紝宸ュ叿寮鍙戯紝鏁版嵁搴撶鐞嗗拰瀹夊叏闃叉姢銆侺inux杩愮淮棰嗗煙杩涗竴姝ョ粏鍖栦负锛氭湇鍔℃不鐞嗕笌璧勬簮绠$悊鐨凷RE锛屽熀纭璁炬柦缁存姢鐨凷YS锛屽伐鍏蜂笌骞冲彴寮鍙戠殑杩愮淮鐮斿彂锛屼互鍙婃暟鎹鐞嗗拰瀹夊叏鍔犲浐鐨凞BA鍜孲EC銆傛棩甯歌繍缁村伐鍏蜂笌瀹炶返</ 鍦ㄦ棩甯歌繍缁...
  • linux杩愮淮宸ョ▼甯堥兘闇瑕佸叿澶囧摢浜涙妧鑳
    绛旓細瀹夊叏鎰忚瘑!澶氱鐩戞帶淇濊瘉涓氬姟绋冲畾,鏁呴殰鏃惰兘蹇熻В鍐,鍚勭澶囦唤淇濊瘉璧勬枡瀹屾暣 蹇冩:绋冲娉板北,涓嶆ヤ笉韬, linux杩愮淮宸ョ▼甯堥兘闇瑕佸摢浜涙妧鑳 linux杩愮淮涔熷垎寰堝绉嶇殑銆 璧勬枡搴撹繍缁,寮鍙戣繍缁,搴旂敤杩愮淮绛夈 鍩烘湰鐨勭煡璇嗙偣:shell鎸囦护鐮,mysql澧炲垹璇绘敼,nginx,php,绛夊簲鐢ㄧ殑瀹夎,Linux鍩烘湰鎿嶄綔:闃茬伀澧欒瀹,鐜璁惧畾绛夈 鐒跺悗楂橀樁涓...
  • 174閬杩愮淮宸ョ▼甯堥潰璇曢(甯︾瓟妗)
    绛旓細娣卞叆瑙f瀽杩愮淮宸ョ▼甯堥潰璇曪細浠庡叆闂ㄥ埌瀹炶返 涓銆佽繍缁村ぇ鎻 杩愮淮锛屾槸涓椤瑰叧閿殑鎶鏈伐浣滐紝瀹冩兜鐩栦簡缃戠粶銆佺郴缁熴佹暟鎹簱銆佸紑鍙戙瀹夊叏鍜岀洃鎺х瓑澶氫釜棰嗗煙銆傝繍缁寸殑瑙掕壊濡傚悓涓涓闈㈡墜锛屾棦瑕佷繚闅滃ぇ鍨嬬粍缁囩殑缃戠粶杞‖浠剁ǔ瀹氳繍琛岋紝鍙堣纭繚涓氬姟杩炵画鎬у拰楂樻晥杩愪綔銆傚叾涓紝娓告垙杩愮淮灏や负鐙壒锛屽畠缁嗗垎涓轰簡寮鍙戣繍缁銆佸簲鐢ㄨ繍缁达紙...
  • 涓涓悎鏍肩殑杩愮淮宸ョ▼甯堝簲璇ユ帉鎻″摢浜涙妧鑳?
    绛旓細3銆佹帉鎻¤剼鏈瑷锛歴hell璇█鏄繖涓涓氫腑蹇呴』瑕佹帉鎻$殑锛屼竴浜涙瘮杈冪畝鍗曠殑绯荤粺绠$悊shell鑴氭湰鏄渶涓哄父瑙佺殑銆佷娇鐢ㄥ埌鐨勩傚彟澶栧氨鏄娇鐢ㄥ埌璇█灏辨槸Python锛屾槸褰撲笅姣旇緝鐏殑锛岀▼搴忔晥鐜囬珮銆佽瑷绠娲佹竻鏅扮瓑锛屽彲浠ュ疄鐜拌嚜鍔ㄥ寲杩愮淮銆4銆佺綉缁滄湇鍔★細缃戠珯杩愮淮锛屽綋鐒禬EB鏄牳蹇冧簡锛岃繖鍧楅渶瑕佹帉鎻$殑鏈nginx,apache web鏈嶅姟锛屽繀椤昏...
  • 浠庝簨杩愮淮宸ョ▼甯堝簲鍏峰鍝簺鐭ヨ瘑鍜岃兘鍔
    绛旓細.绛夛級锛岄渶瑕佹湁杩囧疄闄寮鍙缁忛獙锛屽惁鍒欏伐浣滀細闈炲父鐥涜嫤銆2銆佸簲鐢ㄦ柟闈㈤渶瑕佷簡瑙o細鎿嶄綔绯荤粺锛堜富瑕佹槸linux銆乥sd锛夈亀ebserver鐩稿叧 (nginx,apahe,php,lighttpd)銆佹暟鎹簱(mysql,oralce)锛岃繕鏈夌被浼肩郴缁熶紭鍖栵紝闆嗙兢鏂归潰鐨勪笢瑗裤3銆佺綉缁溿瀹夊叏锛屽瓨鍌ㄧ瓑闇瑕佺浉褰撲簡瑙c傚唴瀹规潵婧愪簬锛欼TSS绗﹀悎鎬ц瘎浼拌惤鍦板伐鍏-浜戦泙杩愮淮锛侊紒
  • 缃戠粶瀹夊叏杩愮淮宸ョ▼甯堟槸浠涔?
    绛旓細杩愮淮宸ョ▼甯堬細Google绉颁箣涓篠RE锛岀綉绔欏彲闈犳у伐绋嬪笀锛岀淮鎶ゆ湇鍔″櫒瀹夊叏涓庣ǔ瀹氶珮鏁堣繍琛屽伐绋嬪笀銆傜畝鍗曟潵璇达細浠庨」鐩寮鍙娴嬭瘯瀹屾瘯鍚庣殑鎵鏈夊伐浣滈兘鏄敱杩愮淮宸ョ▼甯堟潵璐熻矗缁存姢鍜岀鐞嗙殑锛屽彲浠ヨ鏄竴涓」鐩垚璐ョ殑鍏抽敭銆傛兂鍋氱綉缁瀹夊叏杩愮淮宸ョ▼甯堬紝鏉ラ粦椹▼搴忓憳
  • 鏁版嵁鑷姩鍖杩愮淮搴旇娉ㄦ剰鍝簺浜嬮」
    绛旓細浜у搧绾跨殑鍒掑垎涓鑸櫎浜嗘牴鎹笟鍔″垎绫诲垝鍒嗗嚑涓ぇ鐨勪骇鍝佺嚎澶栵紝杩橀渶瑕佸垝鍒嗕竴浜涘熀纭浜у搧绾匡紝濡傦細淇℃伅瀹夊叏浜у搧绾匡紝涓昏绠$悊淇℃伅瀹夊叏銆佺綉缁滃畨鍏ㄧ瓑绯荤粺鍜岃澶囩瓑;鍩虹鏈嶅姟浜у搧绾匡紝濡Nginx鍙嶅悜浠g悊澶ч儴鍒嗙郴缁燂紝Varnish缂撳瓨Web闈欐佽祫婧愮瓑銆傚湪杩欓噷鍗曠嫭璇翠竴涓嬩骇鍝佺嚎鍜岄」鐩寘鎷殑鏈嶅姟蹇呴』鍒跺畾杩愮淮浼樺厛绾х瓑绾с傝繍缁寸瓑绾х殑鍒跺畾涓...
  • 浜戣绠楀伐绋嬪笀闇瑕佹帉鎻′粈涔堟妧鏈
    绛旓細1浜戣绠楀伐绋嬪笀闇瑕佹帉鎻$殑鎶鏈 鍗佸ぇ闃舵鐢辨祬鍏ユ繁銆佸惊搴忔笎杩涳紝鍖呮嫭缁撳悎Linux鐨勭綉缁滃熀纭瀹炴垬銆丩inux绯荤粺閰嶇疆鍙婃湇鍔℃繁搴﹁В鏋愩丼hell鑴氭湰鑷姩鍖杩愮淮椤圭洰寮鍙銆佸紑婧愭暟鎹簱MySQL DBA鏋舵瀯鍙婁紭鍖栥佷富娴乄eb鏈嶅姟鍣Nginx鏋舵瀯浼樺寲銆佸ぇ鍨嬬綉绔欓珮骞跺彂椤圭洰LVS瀹炴垬鏂规銆侀珮鍙敤闆嗙兢鎶鏈佸垎甯冨紡瀛樺偍鎶鏈疌eph銆瀹夊叏闃插尽鎶鏈佹ц兘浼樺寲...
  • 杩愮淮宸ョ▼甯堥渶瑕佷粈涔堟妧鑳?
    绛旓細杩愮淮宸ョ▼甯堟墍闇鍩虹鎶鑳斤細绮鹃歴hell/Python/Perl绛1鑷2绉嶇紪绋嬭瑷 鐔熺粌鎺屾彙甯哥敤鏁版嵁缁撴瀯鍜岀畻娉曪紝骞惰兘鐏垫椿杩愮敤 鐔熸倝缃戠粶鍩虹鐭ヨ瘑 娣卞叆鐞嗚ВLinux鎿嶄綔绯荤粺 鍔犲垎鎶鑳斤細鐔熸倝寮婧愮殑鐩戞帶骞冲彴宸ュ叿锛屾瘮濡傦細Ganglia銆丯agios绛 鐔熺粌鎺屾彙Shell鑴氭湰鐔熸倝Awk銆丼ed绛夊熀纭宸ュ叿 鐔熸倝鍒嗗竷寮忚绠楁垨鑰呭瓨鍌ㄧ郴缁燂紝姣斿Hadoop/Hbase/Storm...
  • 扩展阅读:小视频网站哪个可以推广 ... 开发运维一体化平台 ... 干了一年运维废了 ... 运维nginx面试题 ... 开发干不下去了想转运维 ... visual studio ... 为什么没人愿意干运维 ... linux运维能做一辈子吗 ... 安全网站 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网