本标准是信息系统安全技术标准的一部分,主要目的是根据信息安全管理政策要求,为我司"Nginx web server"配置提供安全标准。php
本规范适用于我司全部Nginx web server。html
使用较新的稳定版本java
使用非root账号启动nginx
user www wwww; 或者 user nginx nginx;
记录access logweb
若是nginx启用了php fastcgi功能,必须添加以下配置,以预防文件名解析漏洞:正则表达式
server { .... if ( $fastcgi_script_name ~ \..*\/.*php ) { return 403; } .... }
上述配置将拦截相似这样的请求:安全
/1.jpg/x.php /my.dir/x.php
nginx启动账号应对web目录下全部文件及子目录无写权限,若是web应用需写日志文件,不该该放在web目录下。spa
假设web目录是/var/www/html,正确的权限设置应该是:日志
chown -R root:root /var/www/html && chmod -R 0755 /var/www/htmlcode
即属主是root,权限是0755,子目录权限跟父目录彻底同样。
若是web应用确实须要支持文件上传功能,或因其它缘由须要对WEB目录可写,应在nginx里面限制可写目录无脚本执行权限。假设可写目录为"/upload",配置示例以下:
server { .... location ~ ^/upload/.*\.php { return 403; } .... location ~ \.php$ { fastcgi_pass *; } }
注意1:"location ~ ^/upload/.*\.php"必须写在前面!对于location的正则表达式,nginx是按照前后顺序来匹配的,具体可参见http://wiki.nginx.org/HttpCoreModule#location
注意2:假设web服务启动账号为nobody,可写目录是/var/www/html/upload,正确的权限设置应该是:
chown -R nobody:nobody /var/www/html/upload && chmod -R 0755 /var/www/html/upload
便可写目录的属主应该为web启动账号,权限应该为0755,子目录的权限应该跟父目录彻底一致。
Nginx默认是不容许列出整个目录的,若是在nginx.conf文件,在location server 或 http段中手工设定了autoindex on;选项,请移除禁用该功能。