NginxÇå¾²ÉèÖÃÖ¸ÄÏ£¬±ÜÃâÍøÕ¾¹¥»÷ºÍ¶ñÒâ»á¼û
nginxÇå¾²ÉèÖÃÖ¸ÄÏ£¬±ÜÃâÍøÕ¾¹¥»÷ºÍ¶ñÒâ»á¼û
СÐò£º
Ëæ×Å»¥ÁªÍøµÄ¿ìËÙÉú³¤£¬ÍøÂçÇå¾²ÎÊÌâÔ½À´Ô½ÊܹØ×¢¡£×÷Ϊһ¸öÍøÕ¾ÖÎÀíÔ±£¬±£»¤ÍøÕ¾ÃâÊܹ¥»÷ºÍ¶ñÒâ»á¼ûÊÇÖÁ¹ØÖ÷ÒªµÄ¡£Nginx×÷Ϊһ¸ö¸ßÐÔÄܵÄWebЧÀÍÆ÷ºÍ·´ÏòÊðÀíЧÀÍÆ÷£¬ÌṩÁ˸»ºñµÄÇå¾²ÉèÖÃÑ¡Ï¿ÉÒÔ×ÊÖúÎÒÃÇÔöÇ¿ÍøÕ¾µÄÇå¾²ÐÔ¡£±¾ÎĽ«ÏÈÈÝһЩ³£ÓõÄNginxÇå¾²ÉèÖã¬×ÊÖúÍøÕ¾ÖÎÀíÔ±±ÜÃâÍøÕ¾¹¥»÷ºÍ¶ñÒâ»á¼û¡£
Ò»¡¢ÏÞÖÆ»á¼ûÒªÁì
եȡ²»Çå¾²µÄHTTPÒªÁì
ĬÈÏÇéÐÎÏ£¬NginxÖ§³Ö¶àÖÖHTTPÒªÁ죬°üÀ¨GET¡¢POST¡¢OPTIONSµÈ¡£È»¶ø£¬Ä³Ð©HTTPÒªÁì¿ÉÄܱ£´æÇ徲Σº¦£¬ÀýÈçTRACEÒªÁì¿ÉÒÔ±»ÓÃÓÚ¿çÕ¾¾ç±¾(XSS)¹¥»÷¡£ÎÒÃÇ¿ÉÒÔʹÓÃNginxµÄ”limit_except”Ö¸ÁîÀ´ÏÞÖÆijЩHTTPÒªÁìµÄ»á¼û¡£
ʾÀý´úÂ룺
location / { limit_except GET POST { deny all; } }
µÇ¼ºó¸´ÖÆ
¹Ø±Õ²»ÐëÒªµÄĿ¼Áбí
ÈôÊÇNginxµÄĿ¼ûÓÐĬÈϵÄindexÎļþ£¬»á×Ô¶¯Õ¹Ê¾Ä¿Â¼ÏµÄÎļþÁÐ±í£¬Õâ¿ÉÄÜ»á̻¶Ãô¸ÐÐÅÏ¢¡£ÎÒÃÇ¿ÉÒÔͨ¹ýեȡ×Ô¶¯Ä¿Â¼ÁбíµÄ·½·¨À´×èÖ¹´ËÐÐΪ¡£
ʾÀý´úÂ룺
location / { autoindex off; }
µÇ¼ºó¸´ÖÆ
¶þ¡¢±ÜÃâ¶ñÒâÇëÇóºÍ¹¥»÷
±ÜÃâ¶ñÒâÇëÇó
¶ñÒâÇëÇó°üÀ¨´ó×ÚµÄÇëÇó¡¢´óÎļþÉÏ´«¡¢¶ñÒâ¾ç±¾µÈµÈ£¬Õâ»áµ¼ÖÂЧÀÍÆ÷¸ºÔعý¸ß¡£ÎÒÃÇ¿ÉÒÔͨ¹ýÉèÖÃÇëÇóÏÞÖÆ£¬À´±ÜÃâÕâÖÖÇéÐα¬·¢¡£
ʾÀý´úÂ룺
http { limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s; server { location / { limit_req zone=req_limit burst=5 nodelay; # ÆäËûÉèÖà } } }
µÇ¼ºó¸´ÖÆ
ÉÏÊö´úÂëÖУ¬ÎÒÃÇʹÓÔlimit_req_zone”Ö¸ÁîÀ´½ç˵ÇëÇóÏÞÖÆÇøÓò£¬ÉèÖÃÏÞÖƵľÞϸºÍËÙÂÊ£¨Ã¿Ãë×î¶àÔÊÐí1¸öÇëÇ󣩡£È»ºó£¬ÔÚÏìÓ¦µÄ”server”ÉèÖÃÖÐʹÓÔlimit_req”Ö¸ÁîÀ´Ó¦ÓøÃÏÞÖÆÇøÓò¡£
±ÜÃâ³£¼û¹¥»÷
NginxĬÈÏÌṩÁËһЩ±ÜÃâ³£¼û¹¥»÷µÄÉèÖÃÑ¡ÏÀýÈ磺
±ÜÃ⻺³åÇøÒç³ö¹¥»÷£ºproxy_buffer_size ºÍ proxy_buffers ÉèÖÃÑ¡Ïî
±ÜÃâHTTPÇëÇóÍ·¹ý´ó¹¥»÷£ºlarge_client_header_buffers ÉèÖÃÑ¡Ïî
±ÜÃâURI³¤¶È¹ý´ó¹¥»÷£ºlarge_client_header_buffers ÉèÖÃÑ¡Ïî
±ÜÃâ¶ñÒâÇëÇó£ºclient_max_body_size ÉèÖÃÑ¡Ïî
±ÜÃâDDoS¹¥»÷£ºlimit_conn ºÍ limit_req ÉèÖÃÑ¡Ïî
Èý¡¢Ê¹ÓÃHTTPS°ü¹ÜÊý¾Ý´«ÊäÇå¾²
HTTPSÐÒé¿ÉÒÔ°ü¹ÜÊý¾Ý´«ÊäµÄÉñÃØÐÔºÍÍêÕûÐÔ£¬±ÜÃâÊý¾Ý±»ÇÔÈ¡»ò¸Ä¶¯¡£Ê¹ÓÃHTTPS¿ÉÒÔ±ÜÃâÖÐÐÄÈ˹¥»÷¡¢Êý¾ÝЮÖƵÈÇå¾²ÎÊÌâ¡£ÎÒÃÇ¿ÉÒÔʹÓÃNginxÌṩµÄSSLÄ£¿éÀ´ÉèÖÃHTTPS¡£
ʾÀý´úÂ룺
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; location / { # ÆäËûÉèÖà } }
µÇ¼ºó¸´ÖÆ
ÉÏÊö´úÂëÖУ¬ÎÒÃÇʹÓÃlisten 443 sslÖ¸ÁîÀ´¼àÌý443¶Ë¿Ú£¬²¢Ê¹ÓÃssl_certificateºÍssl_certificate_keyÉèÖÃÑ¡ÏîÖ¸¶¨SSLÖ¤Êé·¾¶¡£
½áÂÛ£º
±¾ÎÄÏÈÈÝÁËһЩ³£ÓõÄNginxÇå¾²ÉèÖÃÑ¡Ï°üÀ¨ÏÞÖÆ»á¼ûÒªÁì¡¢±ÜÃâ¶ñÒâÇëÇóºÍ¹¥»÷¡¢Ê¹ÓÃHTTPS°ü¹ÜÊý¾Ý´«ÊäÇå¾²µÈ¡£ËäÈ»£¬NginxµÄÇå¾²ÉèÖÃÉÐÓÐÐí¶àÆäËûµÄÑ¡ÏÕë¶Ô²î±ðµÄÇéÐοÉÒÔ¾ÙÐÐÏìÓ¦µÄÉèÖá£×÷ΪÍøÕ¾ÖÎÀíÔ±£¬ÎÒÃÇÐèÒªÇ×½ü¹Ø×¢ÍøÕ¾Çå¾²ÎÊÌ⣬²¢Ò»Ö±ÔöÇ¿Çå¾²ÉèÖã¬ÒÔ±£»¤ÍøÕ¾ÃâÊܹ¥»÷ºÍ¶ñÒâ»á¼ûµÄÍþв¡£
ÒÔÉϾÍÊÇNginxÇå¾²ÉèÖÃÖ¸ÄÏ£¬±ÜÃâÍøÕ¾¹¥»÷ºÍ¶ñÒâ»á¼ûµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡