常见Nginx的安全设置


关键词

Nginx web服务 PHP

摘要

Nginx是当今比较流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。相信不少做服务器方面的都喜欢这个小巧的web服务。
Nginx是当今比较流行的Web服务器之一。它为世界上7%的web提供服务而且正在以惊人的速度增长。相信不少做服务器方面的都喜欢这个小巧的web服务。
下面是一些常见安全陷阱和解决方案的列表,它可以辅助来确保服务器上的Nginx部署是安全的。
1. 在配置文件中小心使用"if"。它是重写模块的一部分,不应该在任何地方使用。
“if”声明是重写模块评估指令强制性的部分。换个说法,Nginx的配置一般来说是声明式的。在有些情况下,由于用户的需求,他们试图在一些非重写指令内使用“if”,这导致了现在遇到的情况。虽然大多数情况下都能正常工作,但还是会存在问题。
看起来唯一正确的解决方案是在非重写的指令内完全禁用“if”。但是这样将更改现有的许多配置,所以暂时还做不到。
2. 将每个~ .php$请求转递给PHP。 即使文件名为hello.php.jpeg它也会匹配~ .php$这个正则而执行文件。
到目前为止现在有两个好方法可以解决上述问题。
不要轻易执行任意代码的混合方法。
如果没找到文件时使用try_files和only(在所有的动态执行情况下都应该注意) 将它转递给运行PHP的FCGI进程。
确认php.ini文件中cgi.fix_pathinfo设置为0 (cgi.fix_pathinfo=0) 。这样确保PHP检查文件全名(当它在文件结尾没有发现.php它将忽略)
修复正则表达式匹配不正确文件的问题。现在正则表达式认为任何文件都包含".php"。在站点后加“if”确保只有正确的文件才能运行。将/location ~ .php$和location ~ ..*/.*.php$都设置为return 403;
3. 禁用autoindex模块。这个可能在你使用的Nginx版本中已经更改了,如果没有的话只需在配置文件的location块中增加autoindex off;声明即可。
4. 禁用服务器上的ssi (服务器端引用)。这个可以通过在location块中添加ssi off; 。
5. 关闭服务器标记。如果开启的话(默认情况下)所有的错误页面都会显示服务器的版本和信息。将server_tokens off;声明添加到Nginx配置文件来解决这个问题。
6. 在配置文件中设置自定义缓存以限制缓冲区溢出攻击的可能性。
client_body_buffer_size  1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
7. 将timeout设低来防止DOS攻击。所有这些声明都可以放到主配置文件中。
client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     5 5;
send_timeout          10;
8. 限制用户连接数来预防DOS攻击。
limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;
9. 试着避免使用HTTP认证。HTTP认证默认使用crypt,它的哈希并不安全。如果你要用的话就用MD5(这也不是个好选择但负载方面比crypt好) 。
10. 保持与最新的Nginx安全更新。
相信通过上面的设置和更改之后,手中的Nginx服务器应该是相对比较安全的,但运维是一条没有止境的路,谁也没把握说百分百不会再出现问题了,不是吗?

 

文章的版权

洪哥写文章很苦逼,如果本文对您略有帮助,点击感兴趣的广告支持洪哥!万分感谢!本文属于“洪哥笔记”原创文章,转载请注明来源地址:常见Nginx的安全设置:http://www.splaybow.com/post/nginx-securitysettings.html

关注与收藏

如果您在服务器运维、网络管理、网站或系统开发过程中有任何疑问,洪哥以此为饭碗,请加QQ:115085382!
了解更多好文章,请关注我们的新浪微博和腾讯微博
亲,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D


« nginx session共享设置