一样平常来说,软件的漏洞都和版本有关。
因此要只管即便隐蔽对访问用户显示各种敏感信息,这样恶意的用户就很难猜到他攻击的做事器所用的是否有特定漏洞的软件,从而加强Web做事安全。

编辑nginx.conf配置文件,增加参数:

http {

PHP只让shNginx Web办事优化 Angular

server_tokens off | on;

}

server_tokens默认是开启的,且可放置于 http,server,location。

变动Nginx做事的默认用户

1,直接修正配置文件nginx.conf:

user nginx;

2,直接在编译Nginx软件时指定编译的用户和组:

./configure --user=nginx --group-nginx

优化Nginx进程对应的配置

修正nginx.conf配置文件:

worker_process 4;

#建议设置为CPU核数,高并发场合可以考虑设置成 核数2

nginx

上述参数调度的是Nginx做事的worker进程数,Nginx有Master进程和worker进程。
Master为管理进程,真正处理用户的是worker进程。

cat /proc/cpuinfo | grep processor | wc -l #查看CPU总核数;

cat /proc/cpuinfo | grep \"大众physical id\"大众 | sort | uniq | wc -l #查看CPU个数;

也可利用 top 命令,按 1 即可显示所有CPU核数;

top

优化绑定不同的Nginx进程到不同的CPU上

默认情形下,Nginx的多个进程有可能跑在某一个CPU或CPU的某一核上,导致Nginx进程利用硬件的资源不均。
以是,尽可能地分配不同的Nginx进程给不同的CPU处理,达到充分有效利用硬件的多CPU多核资源的目的。

四核CPU配置参考:

vi /etc/nginx/nginx.conf

worker_processes 4;

worker_cpu_affinity 0001 0010 0100 1000; #CPU亲和力参数

Nginx事宜处理模型优化

Nginx的连接处理机制在不同的操作系统会采取不同的I/O模型,在Linux下,Nginx利用epoll的I/O多路复用模型,在FreeBSD中利用kqueue的I/O多路复用模型,在solaris中利用/dev/poll办法的I/O多路复用模型,在Windows中利用的是icop。

详细配置:

events {

use epoll; #use是一个韶光模块指令,用来指定Nginx的事情模式,对付Linux内核,推举利用epoll事情模式

}

#对付利用连接进程的方法,常日不须要进行任何设置,Nginx会自动选择最有效的方法。

调度Nginx单个进程许可的客户端最大连接数

这个掌握连接的参数为worker_connections,它的值要根据做事器性能和程序的内存利用量来制订。

events {

worker_connections 1024; #定义每个进程(process)的最大连接数,这个连接包括了所有连接,如代理做事器连接、客户真个连接、实际的并发连接

}

#Nginx总并发连接 == worker worker_connections

配置Nginx Worker进程最大打开文件数

events {

worker_rlimit_nofile 65535; #最大打开文件数,可设置为系统优化后的ulimit -HSn的结果

}

开启高效文件传输模式

设置参数:sendfile

sendfile()是浸染与两个文件描述符之间的数据拷贝,这个拷贝实在内核之中的,被称为零拷贝。
sendfile()比read和write函数要高效很多,由于write和read函数要把数据拷贝到运用层再进行操作。

sendfile on|off

context: http,server,location,if in location

设置参数:tcp_nopush

激活或禁用Linux上的TCP_CORK socket选项,仅当开启sendfile生效。
许可把 http response和文件的开始部分放在一个文件里发布,其积极浸染是减少网络报文段的数量。

tcp_nopush on;

context: http,server,location

优化Nginx连接参数,调度连接超时时间

连接超时参数:Keepalive_timeout

keep-alive可以使客户端到做事器端已经建立的连接同等事情不退出,当做事器有持续要求时,keep-alive会利用已经建立的连接供应做事,从而避免做事器充县建立新连接要求处理。

keepalive_timeout 60;

context:http,server,location

#用于设置客户端连接保持会话的超时时间为60秒。
超过这个韶光,做事器会关闭该链接。

连接超时的浸染:

将无用的连接设置为尽快超时,可保护系统资源(CPU、内存、磁盘);

连接很多时,及时断掉那些已经建立好但又永劫光不干事的连接,以减少其占用的做事器资源。
由于做事器掩护连接也是花费资源的;

黑客和恶意用户攻击网站,也会不断地和做事器建立多个连接,花费连接数但啥也不干,大量花费做事器的资源,此时就该当及时断掉这些恶意占用资源的连接;

LNMP环境中,如果用户要求了动态做事,则Nginx就会建立连接,要求FastCGI做事以及后真个MySQL做事,此时这个Nginx连接就要设置一个超时时间,在用户容忍的韶光内返回数据,或者再多等一会后端做事返回数据,详细策略根据详细业务进行详细剖析;

后真个FastCGI做事及MySQL做事也有对连接的超时掌握。

设置参数:tcp_nodelay

默认情形下当数据发送时,内核并不会立时发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O性能。
但是,在每次只发送很少字节的业务场景中,利用tcp_nodelay功能,等待韶光会比较长。

tcp_nodelay on;

context:http,server,location

设置参数:client_header_timeout

读取客户端要求头数据的超时时间,如果超过这个韶光,客户端还没有发送完全的header数据,做事器端将返回“Request time out(408)”缺点。

client_header_timeout 20;

context:http,server

设置参数:client_body_timeout

读取客户端要求主体的超时时间,如果在这个超时时间内,客户端没有发送任何数据,Nginx将返回“Request time out(408)”缺点。

client_body_timeout 60;

context:http,server,location

设置参数:send_timeout

指定相应客户真个超时时间,为握手后的一个超时。
如果超过这个韶光,客户端没有任何活动,Nginx将会关闭连接。

send_timeout 60;

context:http,server,location

上传文件大小的限定(动态运用)

参数:client_max_body_size

设置为 0 表示禁止检讨客户端要求主体大小

client_max_body_size 8m;

context:http,server,location

FastCGI干系参数调优(合营PHP引擎动态做事)

FastCGI参数是合营Nginx向后要求PHP动态引擎做事的干系参数,这里指的是Nginx中的配置参数。

Nginx FastCGI常见参数:

请参考Module ngx_http_fastcgi_module(https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html)

fastcgi_pass #给FastCGI做事器设置地址;

fastcgi_index #设置一个将在 $fastcgi_scripts_name 变量结尾的URI之后添加的文件名;

fastcgi_param #设置一个该当通报给FastCGI做事器的参数,当且仅当fastcgi_param在当前级别上没有定义指令时,这些指令将从上一级继续;

fastcgi_next_upsteam #指定在哪种情形下将要求通报给下一个做事器;

fastcgi_connect_timeout #表示Nginx做事器和后端FastCGI做事器连接的超时时间,默认值为60秒,这个参数常日不要超过75秒;

fastcgi_send_timeout #设置Nginx许可FastCGI做事器端返回数据的超时时间,即在规定韶光之内后端做事器必须传完所有的数据。
否则,Nginx将断开这个连接;

fastcgi_read_timeout #设置Nginx从FastCGI做事器端读取相应信息的超时时间,表示连接建立成功后,Nginx等待后端做事器的相应韶光,是Nginx已经进入后真个排队之中期待处理的韶光;

fastcgi_buffer_size #这是Nginx FastCGI的缓冲区大小参数,设定用来读取从FastCGI做事器端收到的第一部分相应信息的缓冲区大小,这里的第一部分常日会包含一个小的相应头部;

fastcgi_buffers #设定用来读取从FastCGI做事器端收到的相应信息的缓冲区大小和缓冲区数量;

proxy_busy_buffers_size #用于设置系统很忙时可以利用的proxy_buffers大小,官方推举大小为proxy_buffers 2;

fastcgi_busy_buffers_size #用于设置系统很忙时可以利用的fastcgi_buffers大小,官方推举为 fastcgi_buffers 2;

fastcgi_temp_file_write_size #FastCGI临时文件大小;

fastcgi_cache cachename_nginx #表示开启FastCGI缓存并为其指定一个名称;

fastcgi_cache_path #fastcgi_cache缓存目录;

fastcgi_cache_valid #用来指定应答代码的缓存韶光;

fastcgi_cache_min_uses #设置要求几次之后相应将被缓存;

fastcgi_cache_use_stale #定义在哪些情形下利用过期缓存;

fastcgi_cache_key #定义fastcgi_cache的key;

依据HTTP事理及FastCGI事理阐明FastCGI参数优化

配置Nginx gzip压缩实现性能优化

Nginx gzip压缩模块供应了压缩文件内容的功能,用户要求的内容在发送到用户客户端之前,Nginx做事器会根据一些详细的策略履行压缩,以节约网络出口带宽,同时加快数据传输效率,提升用户体验。

Nginx gzip压缩的优点:

提升网站用户体验;

节约网站带宽本钱;

压缩工具:

纯文本内容压缩比很高,如 html, js, css, xml等;

本压缩的纯文本文件必须要大于1KB,由于压缩算法的分外缘故原由,极小的文件压缩后可能反而变大;

图片、媒体等文件只管即便没关系缩,由于这些文件大都经由压缩,再压缩很可能不会减小很多,或有可能增大,同时还要花费系统资源;

参数先容及配置:

gzip on;#压缩功能

gzip_min_length 1K;#许可压缩的页面最小字节数

gzip_buffers 4 16K;#申请4个单位为16K的内存作为压缩结果流缓存

gzip_http_version 1.1;#http协议版本

gzip_comp_level 5;#指定压缩比,1压缩比最小,处理速率最快;9压缩比最大,传输速率最快,处理最慢

gzip_types text/html text/css;#指定压缩类型,对应文件类型参考mime.types

gzip_vary on;#vary header支持

gzip效果查看:

Content-Encoding: gzip

Nginx expires缓存

expires 期限,Nginx expires的功能便是为用户访问的网站内容设定一个过期韶光。

当用户第一次访问这些内容时,会把这些内容储存在用户浏览器本地,这样用户第二次及往后连续访问该网站时,浏览器会检讨加载已经缓存在用户浏览器本地的内容,而不用去做事器下载,直到缓存的内容过期或被打消为止。

Nginx expires功能优点:

expires 可以降落网站的带宽,节约本钱;

加快用户访问网站的速率,提升用户访问体验;

做事器要求降落,做事器压力就减轻了,本钱也会降落;

Nginx expires配置

1,根据文件扩展名进行判断:

location ~ .\.(gif|jpg|jpeg|png|bmp|swf)$

{

expires 2y;#当用户访问上述扩展名文件时,缓存相应的韶光

}

location ~ .\.(js|css)?$

{

expires 10d;

}

2,根据URI中的路径(目录)进行判断:

location ~ ^/(images|static|media)/ {

expires 50d;

}

Nginx expires效果检讨:

Expires: 缓存过期韶光

Cache-Control:缓存总韶光

Nginx expires功能缺陷及办理方法:

当网站数据更新了,此时用户端看到的可能还是旧的已经缓存的内容。

对付常常须要变动的文件,可缩短工具缓存韶光;如百度首页图片根据一些节日换成节日相对应的图片,以是设置这些图片缓存期为一天;

当网站改版或更新时,可以在做事器将缓存的工具改名;

网站可能不肯望被缓存的内容:

广告图片,用于广告做事,都缓存了就不好掌握展示了;

网站流量统计工具(js代码),缓存了统计就不准了;

Nginx日志干系优化与安全

现在Nginx 日志已经自动轮询了。

编写脚本实现Nginx access日志轮询

配置日志切割脚本:

vim cut_nginx_log.sh

cd /path/log/nginx && mv access.log access_$(date +%F -d -1days).log

tar -czf access_xx.gz access.xx.log

nginx -s reload

crontab -e

00 00 /bin/sh /path/cut_nginx_log.sh

不记录不须要的访问日志

日志写入太频繁会花费大量磁盘I/O,降落做事性能。

location ~ .\.(js|jpg|css|png|gif)$ {

access_log off;

}

访问日志权限

不须要在日志目录上给Nginx用户读或写容许,很多人没把稳这个问题,把权限直接给了Nginx用户,这就成了安全隐患。

chown -R root:root /path/log/nginx

chmod -R 700 /path/log/nginx

我以前一贯也因此为该当 nginx:nginx /path/log/nginx,但本日看到这,去测试了上述方法,可以写入日志。
查看nginx运行,原来nginx master process的UID是root,难怪难怪!

root 68300 1 0 16:15 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

Nginx站点目录及文件URL访问掌握

根据扩展名限定程序或文件访问

利用Nginx配置禁止访问上传资源目录下的PHP、Shell、Perl、Python程序文件,这样用户纵然上传了木马文件也没法实行,从而加强了网站的安全。

范例1,配置Nginx,禁止解析指定目录下的指定程序:

location ~ ^/images/.\.(php|py|sh|pl)$

{

deny all;

}

location ~ ^/static/.\.(php|py|pl|sh)$

{

deny all;

}

对上述目录的限定必须放在Nginx处理PHP做事配置的前面:

#location ~ \.php$ {

# root html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# include fastcgi_params;

#}

范例2,Nginx下配置禁止访问 .txt 和 .doc文件:

location ~ \.(txt|doc)$

{

if (-f $request_filename) {

root /var/www;

#rewrite... 也可以重定向到某个URL

break;

}

}

location ~ \.(txt|doc)$

root /var/www;

deny all;

}

禁止访问指定目录下的所有文件和目录

范例1,配置禁止访问指定的单个或多个目录:

location ~ ^/(static)/ {

deny all;

}

location ~ ^/static {

deny all;

}

禁止访问多个目录:

location ~ ^/(static | js ) {

deny all;

}

范例2,禁止访问目录并返回指定HTTP状态码:

location /admin/ {

return 404;

}

location /templates/ {

return 403;

}

限定网站来源IP访问

范例1,禁止某目录让外界访问,但许可某IP访问该目录,并支持PHP解析:

location ~ ^/secret/ {

allow 222.222.222.222;

deny all;

}

location ~ .\.php$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

include fastcgi_params;

}

范例2,限定指定IP或IP段访问:

location / {

deny 192.168.10.10;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

deny all;

}

Nginx做反向代理的时候可以限定客户端IP

1,利用 if 来掌握:

if ($remote_addr = 10.0.0.7) {

return 403;

}

if ( $remote_addr = 11.11.11.11 ) {

set $allow_access_root 'true';

}

2,利用deny和allow只许可IP访问:

location / {

root /var/www;

index index.php index.html;

allow 22.22.22.22;

deny all;

}

方法3,只谢绝某些IP访问:

location / {

root /var/www;

index index.html;

deny 11.11.11.11;

allow all;

}

把稳:

1,deny一定要加一个IP,否则会直接跳转403,不在往下实行,如果403默认页实在同一域名下,会造成去世循环访问;

2,对付allow的IP段,从许可访问的段位从小到大排列,如 127.0.0.0/24后面才是10.10.0.0/16;

3,以deny all结尾,表示除了上面许可的,其他都禁止;

配置Nginx,禁止造孽域名解析访问网站

Nginx如何防止用户IP访问网站,或恶意域名解析?

方法1,让利用IP访问网站的用户,或恶意解析域名的用户,收到501缺点:

server {

listen 80 default_server;

server_name _;

return 501;

}

#配置文件里面没有写的虚拟主机都调到 default_server。

或重定向:

server {

listen 80 default_server;

server_name _;

rewrite ^(.) http://www.baidu.com permanent;

}

创造域名恶意解析到做事器IP,在server标签下添加以下代码即可:

if ($host !~ ^www/\.zhang21/\.com$) {

rewrite ^(.) http://www.baidu.com permanet;

}

default_server举例:

利用default_server,将网站所有要求定向到掩护页面。

server {

listen 80 default_server;

server_name _;

root /var/www;

location / {

rewrite ^(.) /errot.html break;

}

vim /var/www/errot.html

<html>

<style type=\"大众type/css\"大众>

h1{

text-align: center;

color: red;

}

</style>

<h1>网站掩护中!
</h1>

</html>

Nginx图片及目录防盗链办理方案

什么是资源盗链

大略地说,便是某些不法网站未经容许,通过在其自身网站程序里造孽调用其他网站的资源,然后在自己的网站上显示这些调用的资源,达到添补自身网站的效果。

这一举动不仅摧残浪费蹂躏了调用资源网站的网络流量,还造成其他网站的带宽及做事压力急急。

网站资源被盗链,涌现严重问题

某公司CDN源站流量没有变革,但CDN加速那边流量超了很多。
这么大非常流量,全都是钱呀!

如何处理?

1,对IDC及CDN带宽做监控报警;

2,常常查看网站流量,关注流量变革,关注非常流量;

3,对访问日志作剖析,迅速定位非常流量

常见防盗链办理方案的基本事理

根据HTTP referer 实现防盗链

在HTTP 协议中,有一个表头字段叫 referer,利用URL格式来表示是哪里的链接用了当前网页的资源。

通过referer 可以检测访问的来源网页,如果是资源文件,可以跟踪到显示它的网页地址,一旦检测出来不是本站,立时进行阻挡。

HTTP referer 是header的一部分,当浏览器向web做事器发送要求时,一样平常会带上 referer,高速做事器我是从哪个页面过来的,做事器借此得到一些信息用于处理。

根据cookie防盗链

通过加密技能变换访问路径实现盗链

Nginx Web做事实现防盗链

利用 referer,针对指定扩展名进行 rewrite或其他操作

location ~ \. (.jpg|gif|png|wma|wmv|mp3|zip|rar) {

valid_referers none blocked .zhang21.com zhang21.com;

if ($invalid_referer) {

rewrite xxxx;

}

}

要根据实际情形进行域名防盗链设置!

利用referer,针对站点目录过滤并返回缺点码

location /images {

root /var/www;

valid_referers none blocked .zhang21.com zhang21.com;

if ($invalid_referer) {

return 403;

}

}

NginxHttpAccessKeyModule实现防盗链先容

如果download目录下有一个file.rar文件,那对应的URI便是http://www.abc.com/download/file.rar,而利用了ngx_http_accesskey_module模块后就变成了http://www.abc.com/download/file.rar?key=xxxxxxxxxxx。
只有精确地给定了key的值,才能下载download目录下的file.rar文件,而且key的值与用户的IP干系,这样可以避免被盗连。

在产品设计上办理盗链方案

可以为图片等增加水印。

通过查看Nginx日志格式中的 $http_referer 变量,查看被盗链情形。
在对应的日志文件中查看该变量的值,可以知晓 http_referer的信息。

Nginx缺点页面的优雅显示

常见HTTP状态码此处略过!

为什么要配置缺点页面优雅显示?

我们可以将404、403等缺点信息重定向到网站首页或其他指定的页面,提升网站的用户访问体验!

自定义的缺点码优雅页面:

location / {

xxxxxxx;

error_page 403 /403.html; #当涌现403缺点时跳转到优化后的页面

error_page 500 503 504 /50x.html;

location = /50x.html {

root /xxx/xxx/50x.html; #将50x页面放到本地单独目录下进行显示

}

error_page 404 =200 /404200.jpg; #改变状态码并指定显示内容

error_page 502 http://www.baidu.com; #缺点码重定向;

}

将缺点状态码重定向到一个location:

location / {

error_page 404 = @zhang;

}

location @zhang {

proxy_pass http://www.baidu.com;

}

Nginx站点目录文件及目录权限优化

单机LNMP环境目录权限严格掌握方法

为了担保网站不受木马入侵,所有站点的目录的用户和组都为root,所有的目录权限是是755,所有文件权限是644。

虽然这样的权限可以防止黑客上传修正站点文件,但这样合法用户便也没有了上传权限。

比较好的办理方法是将用户上传的文件等做事分离,这样就可以进行安全授权了。
不同的做事所在目录的权限依据业务功能而不同!

严格掌握Nginx目录的访问才能降落网站被入侵的风险!

Nginx反爬虫优化

robots.txt机器人协议先容

Robots协议(也称为爬虫协议、机器人协议),全称是“网络爬虫打消标准”(Robots Exclusion Protocol),网站通过Robots协议见告搜索引擎那些页面可以抓取,那些页面不能抓取。

robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它常日见告网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。

robots.txt协议并不是一个规范,而只是约定俗成的,以是并不能担保网站的隐私。

robots.txt语法

User-Agent:

Allow:

Disallow:

来看一下简书的robots.txt:

www.jianshu.com/robots.txt

Nginx反爬虫优化配置

阻挡下载协议代理:

if ($http_user_agent ~ LWP::Simple | BBBike | wget) {

return 403;

}

测试禁止不同的浏览器软件访问:

if ($http_user_agent ~ “Firefox|MSIE”){

rewrite ^(.) http://www.baidu.com;#如果浏览器为Firefox或IE,则跳转

}

利用Nginx限定HTTP的要求方法

可以通过Nginx限定HTTP要求的方法来达到提升做事器安全的目的。

如,让HTTP只能利用GET、HEAD和POST方法的配置:

if ($request_method !
~ ^(GET|HEAD|POST)$ {

return 501;

}

还可以加一层 location,更详细地限定文件名。

利用CDN做网站内容加速

什么是CDN?

CDN的全称是 Content Delivery Network,中文意思是内容分发网络。

大略地讲,通过现有的Internet中增加一层新的网络架构,将网站的内容发布到最靠近用户的Cache做事器内,通过智能DNS负载均衡技能,判断用户的来源,让用户就近利用与做事器相同线路的带宽访问Cache做事器,取得所需的内容。

例如,北京电信用户访问北京电信Cache做事器上的内容,四川网通用户访问成都网通Cache做事器上的内容。
这样可以有效减少数据在网络上传输的韶光,提高访问速率。

CDN是一套全国或环球的风不是缓存集群,其本色是通过职能DNS判断用户的来源地域及上网线路,为用户选择一个最靠近用户地域,以及和用户上网线路相同的做事器节点。
由于低于近,线路相同,以是可以大幅度提升用户浏览网站的体验。

CDN的代价:

省钱;

提升网站的用户体验;

可以阻挡大部分流量攻击,如DDOS;

CDN的特点

CDN便是一个具备根据用户区域和线路智能调度的风不是内存缓存集群。
特点如下:

通过做事器内存缓存网站数据,提高了企业站点(尤其是含有大量图片、视频等的站点)的访问速率,并大大提高企业站点的稳定性;

用户根据智能DNS技能自动选择最适宜的Cache做事器,降落不同运营商之间互联瓶颈造成的影响,实现了跨运营商的网络加速,担保不同网络中的用户都能得到良好的访问速率;

加快了访问速率,减少了原站点的带宽;

用户访问时从做事器的内存中读取数据,分担了网络流量,同时减轻了原站点负载压力;

利用CDN可以分担源站的网络流量,同时减轻源站的负载压力,并降落黑客入侵及各种DDOS攻击对网站的影响,担保网站有较好的做事质量;

利用CDN的基本哀求

首先要说的是,不是所有的网站都可以一上来就能用CDN的。
要加速的业务数据该当存在独立的域名。
如 pub.zhang21.com,业务内容图片、附件、JS、CSS等静态元素,这样的静态网站域名才能利用CDN。

将域名做CNAME(别名)

这个 pub.zhang21.com地址必须事先由CDN公司配置好的CDN公司的域名。

Nginx程序架构优化

“解耦” 是开拓职员中盛行的一个名词,大略地说便是把一堆程序代码按照业务用场分开,然后供应做事。

例如,注册登录、上传、下载、浏览、商品页信息等都该当是独立的程序做事,只不过在客户端看来是一个整体而已。

分离的最佳办法是分别利用独立的做事器,可以选择改动程序或者在负载均衡器上配置(如Nginx),过滤要求,然后抛给后面对应的做事器。

如,根据扩展名分发。
要求图片就抛给图片做事器;

根据URL路径转发,要求下载就交给下载做事器;

要求动态PHP处理的就交给动态处理器;

不符合以上哀求的就交给默认做事器;

利用普通用户启动Nginx

为什么要让Nginx做事利用普通用户?

默认情形下,Nginx的Master进程利用的是root用户,worker进程利用的是Nginx指定的普通用户。

利用root用户跑Nginx的Master进程有两个最大问题:

管理权限必须是root,这就使得最小化分配权限原则碰着困难;

利用root跑Nginx做事,一旦网站涌现漏洞,用户就可以很随意马虎地获取做事器的root权限

给Nginx做事降权的办理方案

利用普通用户user跑Nginx做事,给开拓及运维设置普通账号,只要与user同组即可管理Nginx,该方案办理了Nginx管理问题,放置root分配权限过大;

开拓职员利用普通账户即可管理Nginx做事及站点下的程序和日志;

采纳项目卖力制度,谁处理谁卖力;

给Nginx降权

通过Nginx -c 制订配置文件启动Nginx

Nginx -c /home/user/nginx.conf

放置于user主目录,然后新建 www,logs等文件夹,变动所属组权限。

error_log /home/user/logs/error.log;

pid /home/user/logs/nginx.pid;

access_log /home/user/logs/access.log;

优点如下:

给Nginx做事降权,让网站更安全;

·按用户设置站点权限,使站点更独立(无需虚拟化隔离);

开拓不须要用root即可完全管理做事及站点;

可实现任务划分;

掌握Nginx并发连接数量

ngx_http_limit_conn_module这个模块用于限定每个定义的Key值的连接数,特殊是单IP的连接数。

The ngx_http_limit_conn_module module is used to limit the number of connections per the defined key, in particular, the number of connections from a single IP address.

Not all connections are counted. A connection is counted only if it has a request processed by the server and the whole request header has already been read.

不是所有的连接数都会被计数,一个符合哀求的连接是全体要求头已经被读取的连接。

limit_conn_zone参数:

limit_conn_zone key zone=name:size;

http

limit_conn参数:指定key最大连接数

limit_conn zone number;

http,server,location

配置文件:

http {

limit_conn_zone $binary_remote_addr zone=addr:10m;

...

server {

...

location /download/ {

limit_conn addr 1; #限定单IP的并发连接为1

}

掌握客户端要求Nginx的速率

The ngx_http_limit_req_module module (0.7.21) is used to limit the request processing rate per a defined key, in particular, the processing rate of requests coming from a single IP address. The limitation is done using the “leaky bucket” method.

用于限定每个IP访问每个定义Key的要求速率。

limit_req_zone key zone=name:size rate=rate;

http

limit_req zone=name

http,server,location

举例:

http {

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

...

server {

...

location /search/ {

limit_req zone=one burst=5;

}

重点

安全优化:隐蔽Nginx软件名及版本号;

性能加安全优化:连接超时参数及FastCGI干系参数调优;

性能优化:gzip压缩功能即调试查看方法;

性能优化:expires缓存功能及调试查看方法;

安全优化:集群中各角色做事站点目录权限掌握策略;

安全优化:站点目录下所有的文件和目录访问掌握;

性能加安全优化:robots.txt协议及防怕从优化办理方案;

性能加安全优化:静态资源防盗链办理方案;

用户体验优化:缺点页面优雅显示方法;

安全优化:限定http要求方法;

性能加安全优化:CDN加速知识;

安全优化:普通用户运行Nginx方案策略;

性能加安全优化:Nginx并发连接及要求速率掌握;

作者:Zhang21

链接:https://www.jianshu.com/p/dc8a1f7eabaf