nginx安全与性能优化(下部)

来源:互联网 发布:利用淘宝赚钱灰色项目 编辑:程序博客网 时间:2024/06/05 10:34
11.隐藏nginx服务软件名信息实战
src/http/ngx_http_header_filter_module.c
vi +48 src/http/ngx_http_header_filter_module.c
找到行:
static char ngx_http_server_string[]= "Server: nginx"CRLF
static char ngx_http_server_full_string[] = "Server:" NGINX_VER CRLF
修改为:
static char ngx_http_server_string[]="Server: Ninja Web Server" CRLF;
static char ngx_http_server_full_string[]="Server:Ninja Web Server" CRLF;


修改错误信息:

src/http/ngx_http_special_response.c

12.配置nginx gzip压缩功能
nginx gzip压缩模块提供了对文件内容压缩的功能,允许nginx服务器将输出内容
在发送到客户端之前根据具体的策略进行压缩,以节约网络带宽,同时提升用户访问体验。
此功能同apache的mod_deflate压缩功能,依赖ngx_http_gzip_module模块,默认已安装。
要压缩的内容(js,css,html) 不要压缩的内容(图片,视频,flash)
nginx完整配置参数
gzip on
gzip_min_length 1k; #设置允许压缩的页面最小字节数
gzip_buffers 4 16k;
#设置压缩缓冲区大小。以上表示申请4个单位为16k的内存作为压缩结果流缓存,
默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_comp_level 2;#压缩比率。用来指定GZIP压缩比,1压缩比最小,处理速度最快;
9压缩比最大,传输速度最快,但处理最慢,比较消耗cpu资源
gzip_types text/xml application/javascript text/css;
#指定压缩类型
gzip_vary on;
vary header支持。该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如
用Squid缓存经过Nginx压缩的数据。
context http server

12.nginx防爬虫方法
假定一个场景:某个网站它可能不希望被网络爬虫抓取,例如测试环境不希望被抓取,以免对用户造成误导,那么需要在该网站中申明,本站不希望被抓取。有如下方法:
方法一:修改nginx.conf,禁止网络爬虫的ua,返回403。
server {
listen 80;
server_name 127.0.0.1;
#添加如下内容即可防止爬虫
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}

方法2:网站更目录下增加Robots.txt,放在站点根目录下。
在http://tool.chinaz.com/robots/站点可以针对现在的搜索引擎按照想要的规则生成robots.txt文件。
知识扩展:
? ? ? ?robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。


当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。
Robots协议是国际互联网界通行的道德规范,基于以下原则建立:
1、搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权;
2、网站有义务保护其使用者的个人信息和隐私不被侵犯。
当然,如果搜索引擎不遵守约定的Robots协议,那么通过在网站下增加robots.txt也是不起作用的。(在正式环境中,可以适当允许搜索引擎抓取收录)

13.nginx日志轮询
cat cur_nginx_log.sh
cd /usr/local/nginx/logs && \
/bin/mv www_access.log www_access_$(date +%F -d -1day).log
/usr/local/nginx/sbin/nginx -s reload 
然后将脚本加到定时任务里
00 00 * * * /bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1


14.不记录不需要的访问日志
对于健康检查或某些图片的日志,js,css的日志,一般不需要记录,因为在统计PV时是按照页面计算。
而且日志频繁写入会消耗磁盘IO,降低服务性能。
location ~.*\.(js|jpg|jpeg|JPEG|css|bmp|gif|GIF) {
  access_log off;
}


15.日志目录权限控制
chown root.root nginx/logs -R 
因为nginx主进程是root,所以nginx可以以root用户的身份往里日志文件写入,将日志目录
改为nginx用户会有安全风险


16.apache或nginx目录及文件最小化权限设置
chmod -R 777 /sitedir  (最不安全)
chown -R apache.apache /sitedir (最不安全)
为了保证网站不受木马入侵上传及修改文件
安全的权限:
 1.所有站点目录的用户和组都应该是root;
 2.所有目录权限是755
 3.所有文件权限是644
注意:网站服务的用户不能用root


17.根据扩展名限制程序和文件访问
location ~^/images/.*\.(php|php5)$
{
    deny all;
}
location ~^/static/.*\.(php|php5)$
{
    deny all;
}


18.使用tmpfs文件系统替代频繁访问的目录
目录要求:
1.频繁访问
2.存放缓存文件
mount tmpfs /tmp -t tmpfs -o size=16m

19.nginx安全访问认证

在nginx.conf中添加一下内容

        auth_basic  "closed site";
        auth_basic_user_file /usr/local/nginx/conf/htpasswd;


htpasswd -bc /usr/local/nginx/conf/htpasswd admin admin123

**注意:密码不要过于简单