Web服务器基础 -- Nginx web 服务优化


本环境是基于 Centos 7.8 系统构建Nginx学习环境
具体构建,请参考 Nginx-1.18.0 环境部署


一、Nginx 基本安全优化

1、Nginx 版本号隐藏

yum 方式安装

http {
... 
    server_tokens off;
...
}

[root@node01 ~]# nginx -s reload

优化前
在这里插入图片描述

优化后
在这里插入图片描述
源码方式

[root@node02 ~]# vim /usr/local/src/nginx-1.18.0/src/core/nginx.h
#define nginx_version      0000000
#define NGINX_VERSION      "0.0.0"
#define NGINX_VER          "web_servers" NGINX_VERSION

#define NGINX_VAR          "web_servers"
#define NGX_OLDPID_EXT     ".oldbin"


[root@node02 ~]# vim /usr/local/src/nginx-1.18.0/src/http/ngx_http_header_filter_module.c
static u_char ngx_http_server_string[] = "Server: web_servers" CRLF;


[root@node02 ~]# vim /usr/local/src/nginx-1.18.0/src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"<hr><center>" NGINX_VER "</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

static u_char ngx_http_error_tail[] =
"<hr><center>web_servers</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;


[root@node02 ~]# cd /usr/local/src/nginx-1.18.0/
[root@node02 nginx-1.18.0]# make 
[root@node02 nginx-1.18.0]# make install
[root@node02 nginx-1.18.0]# systemctl restart nginx

优化前
在这里插入图片描述
优化后
在这里插入图片描述

2、更改nginx服务的默认用户(源码安装)

方法一

user  nginx;
[root@node01 ~]# systemctl restart nginx

方法二

[root@node02 nginx-1.18.0]# ./configure --user=wan --group=wan --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_stub_status_module --with-http_mp4_module
[root@node02 nginx-1.18.0]# make
[root@node02 nginx-1.18.0]# make install

二、nginx参数优化服务性能

# nginx开始的进程数
worker_processes  2;

# 优化绑定不同的nginx到不同的cup上
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

# 设定nginx工作模式、nginx客户端最大连接数
events {
    use epoll;
    worker_connections  1024;
}

# 配置 Nginx worker 进程最大打开文件数
worker_rlimit_nofile 65535

# 开启nginx高效文件传输模式
    sendfile        on;
    tcp_nopush      on;

# 上传文件大小限制
   client_max_body_size 25m;

# 设定nginx功能
--开启 gzip 压缩功能
gzip on;
--设置允许压缩的页面最小字节数
gzip_min_length 1k;
--压缩缓冲区大小
gzip_buffers 4 16k;
--压缩版本
gzip_http_version 1.1;
--压缩比率
gzip_comp_level 2;
--压缩的类型
gzip_types text/plain application/x-javascript text/css application/xml;
-- vary header 支持
gzip_vary on;

[root@node01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@node01 ~]# nginx -s reload

三、日志优化

1、实现 Nginx access 日志轮询

当用户请求一个软件时, 绝大多数软件都会记录用户的访问情况, Nginx 服务也不例外。我们可以通过脚本+计划任务或者logrotate服务做Nginx access的轮转切割

具体细节参照:计划任务 Nginx 日志轮询切割

2、不记录不需要的访问曰志

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

[root@node01 ~]# vim  /etc/nginx/conf.d/default.conf 
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}

[root@node01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@node01 ~]# nginx -s reload

3、设置访问日志的权限

不需要在日志目录上给 Nginx 用户读或写许可,如果把该权限直接给了 Nginx 或 Apache 用户, 这就成为安全隐患。

[root@node02 ~]# ll /usr/local/nginx/logs/ -d
drwxr-xr-x 2 root root 58 Feb 27 09:57 /usr/local/nginx/logs/
[root@node02 ~]# chmod -R 700 /usr/local/nginx/logs/
[root@node02 ~]# ll /usr/local/nginx/logs/ -d
drwx------ 2 root root 58 Feb 27 09:57 /usr/local/nginx/logs/

四、站点目录、URL访问优化

1、根据扩展名限制程序和文件的访问

Web 2.0 时代, 绝大多数网站都是以用户为中心的, 例如: bbs 、 blog、 sns 产品,这几个产品都有一个共同特点, 就是不但允许用户发布内容到服务器, 还允许用户发图片甚至上传附件到服务器上,由于为用户开了上传的功能, 因此给服务器带来了很大的安全风险。 虽然很多程序在上传前会做一定的控制, 例如: 文件大小、 类型等, 但是,一不小心就会被黑客钻了空子, 上传了木马程序。下面将利用 Nginx 配置禁止访问上传资源目录下的 PHP、 Shell、PerK 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 服务配置的前面

location ~ .*\.(php|php5)?$
{
	fastcgi_pass 127.0.0.1:9000;
	fastcgi_index index.php;
	include fcgi.conf;
}

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

location ~*\.(txt|doc)$ {
if (-f $reguest_filename) {
root /data/www/www;
#rewrite 可以重定向到某个url
break;
)
}
} l
ocation ~*\.(txt|doc)${
root /data/www/www;
deny all;
}

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

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

l
ocation ~ ^/(static)/ {
deny all;
} l
ocation ~ ^/static {
deny all;
}

禁止访问多个目录的命令

l
ocation ~ ^/(static|js)/ {
deny all;
}

禁止访问目录并返回指定的 HTTP 状态码

s
erver {
listen
server_name www.etiantian.org etiantian.org;
root /data0/www/www;
index index.html index.htm;
access_log /app/logs/www_access.log commonlog;
location /admin/ { return 404; }
location /templates/ { return 403; }
}

作用:禁止访问目录下的指定文件, 或者禁止访问指定目录下的所有内容。
最佳应用场景: 对于集群的共享存储, 一般是存放静态资源文件, 所以可禁止执行指定扩展名的程序, 例: .php 、 .sh、 .pl、.py。

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

Nginx 如何防止用户 IP 访问网站
方法1:让 使 用 IP 访问网站的用户, 或者恶意解析域名的用户, 收到 501 错误

server {
listen 80 defau11_server;
server_name _;
return 501;
}

方法2:通过 301 跳转到主页

s
erver {
listen 80 default_server;
server_name _;
rewrite ^(.*) http://blog.test.org/$1 permanent;
}

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

if ($host !~ ^www/.test/.com$){
rewrite ^(.*) http//www.test.com$l permanent;

五、Nginx 图片及目录防盗链

什么是资源盗链 ?

简单地说, 就是某些不法网站未经许可, 通过在其自身网站程序里非法调用其他网站的资源, 然后在自己的网站上显示这些调用的资源, 达到填充自身网站的效果。 这一举动不仅浪费了调用资源网站的网络流量, 还造成其他网站的带宽及服务压力吃紧, 甚至宕机。

网站资源被盗链带来哪些问题 ?

若网站图片及相关资源被盗链, 最直接的影响就是网络带宽占用加大了, 带宽费用多了, 网络流量也可能忽高忽低, Nagios/Zabbix 等报警服务频繁报警。

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

1 ) 根据 HTTP referer 实现防盗链
在 HTTP 协议中, 有一个表头字段叫 referer, 使用 URL 格式来表示是哪里的链接用了当前网页的资源。 通过 referer 可以检测访问的来源网页, 如果是资源文件, 可以跟踪到显示它的网页地址, 一旦检测出来源不是本站, 马上进行阻止或返回指定的页面。referer 是目前网站图片 、 附件 、 html 等最常用的防盗链手段。
2 ) 根据 cookie 防盗链
对于一些特殊的业务数据, 例如流媒体应用通过 ActiveX 显示的内容( 例如,Flash 、 WindowsMedia 视频 、 流媒体的 RTSP 协议等 ), 因为它们不向服务器提供 referer header, 所以若采用上述的referer 的防盗链手段, 就达不到想要的效果。对于 Flash 、 Windows Media 视频这种占用流量较大的业务数据, 防盗链是比较闲难的, 此时可以采用 Cookie 技术, 解决 Flash 、 Windows Media 视频等的防盗链问题。
3 ) 通过加密变换访问路径实现防盗链
此种方法比较适合视频及下载类业务数据的网站 。

1、针对文件名防盗链

location ~* \.(gif|jpg|png|swf|flv)$ { #需要防盗链资源的文件类型
valid_referers none blocked test.com ; #这是可以盗链的域名或IP地址,一般情况可
以把google,baidu,sogou,soso,bing,feedsky,zhuaxia,photozero等域名放进来
if ($invalid_referer) {
rewrite ^/ http://test.com/retrun.html;
#return 404;
}
}

2、针对图片目录防盗

l
ocation /images/ {
alias /data/images/;
valid_referers none blocked server_names *.xok.la xok.la ; #允许访问该目录的域
名或IP
if ($invalid_referer) {
return 403;
}
}

3、nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值