Nginx优化之日志优化,URL访问控制,防盗链,及站点文件目录优化

Nginx日志相关优化与安全

日志切割脚本如下:

#!/bin
#日志切割脚本
Date=`date +%Y%m%d`
Bdir="/usr/local/nginx"
Nginxlogdir="$Bdir/logs"
Logname="access"
[ -d $Nginxlogdir ] && cd $Nginxlogdir ||exit
[ -f "$Logname".log ] ||exit
/bin/mv "$Logname".log "$Date"_"$Logname".log
$Bdir/sbin/nginx -s reload
find "$Nginxlogdir" -name "$Logname*" -type f -mtime +|xargs /bin/rm

将脚本放入定时任务完成切割

不记录不需要的访问日志

在实际工作中,对于负载均衡器健康节点检查或某些特定文件(比如图片,JS,CSS)的日志,一般不需要记录下来,因为在统计PV时是按照页面计算的,而且日志写入太频繁会消耗大量磁盘I/O,降低服务的性能。

    location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$
{
access_log off;
}
#这里用location标签匹配不记录日志的元素扩展名,然后关闭日志

访问日志的权限设置

假如日志目录为/app/logs,则授权方法如下:

    chown -R root.root /app/logs
chown -R /app/logs

#不需要在日志目录上给Nginx用户读或写许可,但很多网友都没注意这个问题,他们把该权限直接给了Nginx或Apache用户,这就成为了安全隐患。

Nginx站点目录及文件URL访问控制

配置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服务配置的前面,如下:
location ~ .*\.(php|php5)$
{
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
include fcgi.conf;
}

Nginx下配置禁止访问*.txt和*.doc文件

    location ~* \.(txt|doc)$
{
if (-f $request_filename)
{
root /data/www/www;
#rewrite ...可以重定向到某个URL    #URL重写
break;
}
}
  或
location ~* \.(txt|doc)$
{
root /data/www/www;        
deny all;                  #权限拒绝
}

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

配置禁止访问指定的单个或多个目录

    #禁止访问单个目录的命令如下:
location ~ ^/static
{
deny all;
}
#禁止访问多个目录的命令如下:
location ~ ^/(static|js)
{
deny all;
}

禁止访问目录并返回指定的HTTP状态码,命令如下:

    server
{
listen ;
server_name www.wk.com wk.com;
root /data/www/www;
index index.html index.htm;
access_log logs/www_access.log commonlog;
location /admin/
{
return ;
}
location /tmplates/
{
return ;
}
}

限制网站来源IP访问

禁止某目录让外界访问,但允许某IP访问该目录,且支持PHP解析,命令如下:

    location ~ ^/wk/             #此为 改域名下禁止访问的目录
{
allow 202.111.12.211;
deny all;
}
location ~ .*\.(php|php5)$
{
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
include fastcgi.conf;
}

限制指定IP或IP段访问,命令如下:

    location /
{
deny 192.168.1.1;
allow 192.168.1.0/;
allow 10.1.1.0/;
deny all;
}

企业问题案例: Nginx做反向代理的时候可以限制客户端IP吗?

    if ($remote_addr = 10.0.0.7)
{
return ;
}
if ($remote_addr = 218.247.17.130)
{
set $allow_access_root 'ture'; #我也不知道什么意思
}

利用deny和allow只允许IP访问

    location / {
root html/blog;
index index.php index.html index.htm;
allow 10.0.0.7;
deny all;
}

只拒绝某些IP访问,命令如下:

    location / {
root html/blog;
index index.php index.html index.htm;
deny 10.0.0.7;
allow all;
}

配置Nginx,禁止非法域名解析访问企业网站

Nginx如何防止用户IP访问网站(恶意域名解析,也相当于是直接IP访问企业网站)

(1)让使用IP访问网站的用户,或者恶意解析域名的用过户,收到501错误,命令如下:

    server {
listen default_server;
server_name _;
return ;
}
#说明:直接报501错误,从用户体验上不是很好

(2)通过301跳转到主页,命令如下:

    server {
listen default_server;
server_name _;
rewrite ^(.*) http://www.wk.com/$1 permanent;
}

(3)发现某域名恶意解析到公司的服务器IP,在server标签里添加以下代码即可,若有多个server则要多处添加。

    if ($host ! ~ ^www\.wk\.com$)
{
rewrite ^(.*) http://www.wk.com/$1 permanent;
}
#说明:代码含义为如果header信息的host主机名字非www.yunjisuan.com,就301跳转到www.yunjisuan.com

Nginx图片及目录防盗链解决方案

盗链的影响

最直接的影响就是网络带宽占用加大了,带宽费用多了,网络流量也可能忽高忽低,Nagios/Zabbix等报警服务频繁报警最严重的情况就是网站的资源被非法使用,使网站带宽成本加大和服务器压力加大,这有可能导致数万元的损失,且网站的正常用户访问也会受到影响。

如何及时发现

(1)对IDC及CDN带宽做监控报警

(2)作为高级运维或运维经理,每天上班的重要任务,就是经常查看网站流量图,关注流量变化,关注异常流量.

(3)对访问日志做分析,迅速定位异常流量,并且和公司市场推广等保持较好的沟通,以便调度带宽和服务器资源,确保网站正常的访问体验。

常见防盗链解决方案的基本原理

(1)根据HTTP referer实现防盗链

在HTTP协议中,有一个表头字段叫referer,使用URL格式来表示是哪里的链接用了当前网页的资源。通过referer可以检测访问的来源网页,如果是资源文件,可以跟踪到显示它的网页地址,一旦检测出来源不是本站,马上进行阻止或返回指定的页面。

HTTP referer是header的一部分,当浏览器向Web服务器发送请求时,一般会带上referer,告诉服务器我是从哪个页面链接过来的,服务器借此获得一些信息用于处理。Apache,Nginx,Lighttpd三者都支持根据HTTP referer实现防盗链,referer是目前网站图片,附件,html等最常用的防盗链手段。下图是referer防盗链的基本原理图。

(2)根据cookie防盗链

(3)通过加密变换访问路径实现防盗链

实现防盗链

(1)利用referer,并且针对扩展名rewrite重定向

    #下面的代码为利用referer且针对扩展名rewrite重定向,即实现防盗链的Nginx配置。
location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$
{
valid_referers none blocked *.wk.com wk.com; #
if ($invalid_referer)
{
rewrite ^/ http://www.wk.com/img/nolink.jpg;
}
}
#提示:要根据自己公司的实际业务(是否有外链的合作)进行域名设置。

(2)利用referer,并且针对站点目录过滤返回错误码

针对目录的方法如下:

    location /images {
root /data/www/www;
valid_referers none blocked *.yunjisuan.com yunjisuan.com;
if ($invalid_referer) {
return403;
}
}

Nginx错误页面的优雅显示

生产环境常见的HTTP状态码列表

200  #服务器成功返回网页,这是成功的http请求返回的标准状态码网址:yii666.com<

301  #永久跳转,所有请求的网页将永久跳转到被设定的新位置,例如:从etiantian.org跳转到www.etiantian.org

403  #禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器权限配置不当所致

404  #服务器找不到客户端请求的指定页面,可能是客户端请求了服务器不存在的资源所导致的

500  #内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统的报错,一般为服务器的设置或内部程序问题所致

502  #坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为代理服务器下面的节点出了问题所致

503  #服务当前不可用,可能为服务器超载或停机维护所致,或者是代理服务器后面没有可以提供服务的节点

504  #网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般为服务器过载所致,没有在指定的时间内返回数据给代理服务器

为什么要配置错误页面优雅显示

在网站的运行过程中,可能因为页面不存在或系统过载等原因,导致网站无法正常响应用户的请求,此时Web服务会返回系统默认的错误码,或者很不友好的页面

我们可以将404,403等的错误信息页面重定向到网站首页或其他事先指定的页面,提升网站的用户访问体验。

优雅显示

(1)对错误代码403实行本地页面跳转,命令如下:

    server {
listen ;
server_name www.wk.com;
location / {
root html/www;
index index.html index.htm;
}
error_page /.html; #当出现403错误时,会跳转到403.html页面
}
#上面的/403.html是相对于站点根目录html/www的。

(2)对错误代码404实行本地页面优雅显示,命令如下:文章地址https://www.yii666.com/article/754139.html文章来源地址:https://www.yii666.com/article/754139.html

    server {
listen ;
server_name www.wk.com;
location / {
root html/www;
index index.html index.htm;
error_page /.html;
#当出现404错误时,会跳转到404.html页面
}
}
#代码中的/404.html是相对于站点根目录html/www的

(3)50x页面放到本地单独目录下,进行优雅显示

    error_page      /50x.html;
location = /50x.html {
root /data/www/html;
}
#这里指定单独的站点目录存放到50x.html文件中。

(4) 错误状态码URL重定向,命令如下:

    server {
listen ;
server_name www.wk.com;
location / {
root html/www;
index index.html index.htm;
error_page http://bbs.wk.com;
#当出现404错误时,会跳转到指定的URL http://bbs.wk.com页面显示给用户,这个URL一般是企业另外的可用地址。
access_log /usr/local/nginx/logs/bbs_access.log commonlog;
}
}
#代码中的/404.html是相对于站点根目录html/www的。

(5)将错误状态码重定向到一个location,命令如下:网址:yii666.com

    location / {
error_page = @fallback;
}
location @fallback {
proxy_pass http://backend;
}

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

单机LNMP环境目录权限严格控制措施

为了保证网站不遭受木马入侵,所有站点目录的用户和组都应该为root,所有的目录权限是755;所有的文件权限是644.

    chmod -R  /directory
chmod -R nginx.nginx /directory

Nginx企业网站集群超级安全设置

结合Linux权限体系及Nginx大型集群架构进行配置,严格控制针对Nginx目录的访问才能降低网站被入侵的风险Nginx优化之日志优化,URL访问控制,防盗链,及站点文件目录优化文章来源地址https://www.yii666.com/article/754139.html

服务器角色 权限处理 安全系数
动态Web集群 目录权限755,文件权限644,所用目录,以及文件用户和组都是root。环境为Nginx+PHP 文件不能被改,目录不能被写入,安全系数10
static图片集群 目录权限755,文件权限644,所用的目录,以及文件用户和组都是root。环境为Nginx 文件不能被改,目录不能被写入,安全系数10
上传upload集群 目录权限755,文件权限644,所用的目录,以及文件用户和组都是root。特别:用户上传的目录设置为755,用户和组使用Nginx服务配置的用户 文件不能被改,目录不能被写入,但是用户上传的目录允许写入文件且需要通过Nginx的其他功能来禁止读文件,安全系数8

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png