优化进程个数javascript
worker_processes 4; #官方建议设置为cpu的总核数 # ../sbin/nginx -s reload [root@c1 conf]# ps -ef|grep nginx|grep -Ev "grep|php-fpm" root 6544 1 0 Apr16 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx nginx 8067 6544 0 07:26 ? 00:00:00 nginx: worker process nginx 8068 6544 0 07:26 ? 00:00:00 nginx: worker process nginx 8069 6544 0 07:26 ? 00:00:00 nginx: worker process nginx 8070 6544 0 07:26 ? 00:00:00 nginx: worker process 从"worker_processes 4"可知,worker进程数为4.nginx master主进程不包含在内,master为管理进程,负责调度和管理worker进程
绑定不一样的nginx进程到不一样的cpu上php
默认状况下,nginx的多个进程可能跑到某一个cpu或cpu的某一个核上,致使nginx进程使用硬件的资源不均。此节优化是尽量地分配 不一样的nginx进程给不一样的cpu处理,达到充分有效利用硬件的多cpu多核资源的目的css
worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;
这里的0001 0010 0100 1000是掩码,分别表明第一、二、三、4核cpu,因为worker_processes进程数为4,所以,上述配置会把每一个进程 一核cpu处理,默认状况下不会绑定任何cpu,参数位置为main段html
配置nginx worker进程最大打开文件数java
worker_rlimit_nofile 65535; 能够设置系统优化后的ulimit -HSn的结果,放置在main段
nginx的链接处理机制在不一样的操做系统会采用不一样的I/O模型,在Linux下,nginx使用epoll的I/O多路复用模型,在FreeBSD使用kqueue的I/O多路复用,在Solaris中使用/dev/poll方式,在Windows中使用的是icop等等node
events { use epoll; ...... }
调整nginx单个进程容许的客户端最大链接数linux
events { ...... worker_connections 20480; }
worker_connections用于定义nginx每一个进程的最大链接数,默认是1024。nginx总并发链接数=worker数量*worker_connections,进程的最大链接数受linux系统进程的最大文件数限制,在执行操做系统命令“ulimit -HSn 65535”或配置相应文件后,worker_connections设置才能生效nginx
隐藏版本号 在nginx配置文件nginx.conf中的http标签段内加入"server_tokens off;"参数,而后重载配置文件web
http { ...... server_tokens off; }
修改软件名称及版本号浏览器
修改版本号须要在编译安装前 下载nginx并解压后,对源码进行修改,源码文件都在二级目录nginx-1.8.0/src/下,找到文件src/core/nginx.h, 而后按照下面的代码中指出的两行(粗体)进行修改 # cat nginx.h ...... #define NGINX_VERSION "1.8.0" #define NGINX_VER "nginx/" NGINX_VERSION ....... 对于粗体部分能够随意修改
sendfile 参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,能够防止网络及磁盘I/0阻塞,提高nginx工做效率
能够放置的标签段[http ,server, location, if in location]
sendfile on; 提升静态文件读取效率 tcp_nopush on; 在sendfile开启的状况下,提升网络包的传输效率,把多个包整合一次性发送出去 tcp_nodelay on; 和tcp_nopush对应的,在keepalive链接下,提升网络包的传输实时性
为了保证网站不遭受木马入侵,全部站点目录的用户和组都应该为root,全部的目录权限是755;全部的文件权限是644
以上的权限设置能够防止黑客上传木马,以及修改站点文件,可是,合理的网站用户上传的内容也会被拒绝。那么如何让合法的用户能够上传文件,而又不至于被黑客利用攻击呢?
若是是单机的环境,站点目录和文件属性设置以下: 全部的目录权限设置为755 全部的文件权限设置为644 全部的目录,以及文件用户和组都是root 把用户上传资源的目录设置为755,将用户和组设置为nginx服务的用户 最后针对上传资源的目录作资源访问限制
对上传资源的目录作资源访问限制
有些网站不但容许用户发布内容到服务器,还容许用户发图片设置上传附件到服务器上,因为为用户开了上传的功能,所以给服务器带来了很大的安全风险。虽然不少程序在上传前会作必定的控制,例如:文件大小,类型等,可是,一不当心就会被黑客钻了空子,上传了木马程序。下面将利用nginx配置禁止访问上传资源目录下的PHP、SHELL、Perl、Python程序文件,这样用户即便上传了木马文件也无法执行,从而增强了网站的安全。
配置nginx,禁止解析指定目录下的指定程序
location ~ ^/images/.*\.(php|php5|sh|pl|py)$ { deny all; } location ~ ^/static/.*\.(php|php5|sh|pl|py)$ { deny all; } location ~ ^/data/(attachment|avatar)/.*\.(php|php5)$ { deny all; }
以上目录的限制必须写在nginx处理php服务配置前面
nginx如何防止用户ip访问网站(恶意域名解析,也至关于直接IP访问企业网站)?
方法1:让使用ip访问或者恶意解析域名的用户,收到501错误,命令以下:
server { listen 80 default_server; server_name _; return 501; } #说明:直接报501错误,从用户体验上不是很好
方法2:经过301跳转到主页,命令以下:
server { listen 80 default_server; server_name _; rewrite ^(.*) http://www.heboan.com$1 permanent; }
方法3:发现某域名恶意解析到公司的服务器ip,在server标签里添加一下代码便可,如有多个server则要多处添加:
if ($host !~ ^www/.heboan/.com$){ rewrite ^(.*) http://www.heboan.com$1 permanent; }
根据HTTP referer实现防盗链
HTTP referer是header的一部分,当浏览器向web服务器发送请求时,通常会带上referer,告诉服务器我是从哪一个页面连接过来的,服务器借此得到一些信息用于处理。Apache、Nginx、Lighttpd三者都支持HTTP referer实现防盗链,referer是目前网站图片、附件、html等最经常使用的防盗链手段。
location ~* \.(jpg|gif|png|swf|flv|wma|asf|mp3|mmf|zip|rar)$ { valid_referers none blocked *.heboan.com; if ($invalid_referer){ rewrite ^/ http://www.heboan.com/img/nolink.jpg; #return 404; } }
gzip on; #用于开启gzip,默认是关闭的 gzip_min_length 1k; #设置容许压缩的页面最小字节数,页面字节数从header头的content-length中进行获取。默认值是0,无论页面多大都压缩。建议设置大于1k的字节数,小于1k可能会越压越大 gzip_buffers 4 16k; #这是系统获取几个单位的缓存用于存储gzip的压缩结果数据流,4 16k表明以16k为单位,安装原始数据大小以16k为单位的4倍申请内存 gzip_http_version 1.1; #识别http的协议版本 gzip_comp_level2; #设置压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢,比较消耗cpu资源 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif images/png; #匹配mime类型进行压缩,不管是否指定,”text/html”类型老是会被压缩的 gzip_vary on; #和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,因此避免浪费不支持的也压缩,因此根据客户端的HTTP头来判断,是否须要压缩. gzip_disable “MSIE [1-6]\.”; #同时因为IE6不支持gizp解压缩,因此在IE6下要关闭gzip压缩功能