TOP

Nginx安全优化与性能调优(一)
2020-07-25 18:09:20 】 浏览:41次 本网站的内容取自网络,仅供学习参考之用,绝无侵犯任何人知识产权之意。如有侵犯请您及时与本人取得联系,万分感谢。
Tags:Nginx 安全 优化 性能

Nginx基本安全优化

隐藏Nginx软件版本号信息

一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题,别的批次可能就都是好的。因此,我们应尽量隐藏或者消除Web服务对访问用户显示各类敏感信息(例如Web软件名称以及版本号等信息),增加恶意用户攻击服务器的难度,从而加强Web服务器的安全性。

我现在在我的CentOS7上编译安装了Nginx,当我们请求服务器的时候我们可以通过chrome的调试工具看到我们请求的服务器Nginx的版本,如下图所示

假如Nginx1.18.0这个版本有漏洞,那么恶意用户就可以根据这个信息通过漏洞来攻击我们的服务器

现在我们来在Nginx的配置文件nginx.conf中增加一项参数来隐藏Nginx的版本,这样用户就不知道我们用的是哪个版本的Nginx了。

在nginx.conf中的http标签段内加入server_tokens off;参数,如下图所示

现在我们重启服务器再次访问可以看到Nginx版本号已经看不到了

更改源码隐藏Nginx软件名及版本号

隐藏了Nginx版本号后,更进一步,可以通过一些手段把Web服务软件的名称也隐藏起来,或者改为其他Web服务软件名以迷惑恶意用户。Nginx并不提供修改Nginx软件名称的参数和入口,需要修改源码才行,这里只是提供一个思路,修改源码需慎重,防止修改源码导致服务器不能正常运行。其它服务器软件同理。修改方法自行百度。

修改Nginx服务的默认用户

为了让Web服务更安全,要尽可能地改掉软件默认的配置,比如端口、用户等。

下面就来更改Ninx服务的默认用户。

首先,查看Ninx服务对应的默认用户。一般情况下,Ninx服务启动后,默认使用的用户是nobody,查看默认的配置文件命令如下:

grep '#user' nginx.conf.default

为了防止黑客猜到这个Web服务的用户,我们需要更改为特殊的用户名,例如www、nginx或者特殊点的itbsl,但是这个用户必须是系统里事先存在的,下面以nginx用户为例进行说明

(1)为Nginx服务创建新用户

为Nginx服务建立新用户的操作过程如下:

useradd nginx -s /sbin/nologin -M # 不需要有系统登录权限,应当禁止其登录能力

(2)配置Nginx服务,让其使用刚建立的Nginx用户

更改Nginx服务默认使用的用户,方法有两种

第一种是直接修改配置文件参数,将默认的#user nobody;修改为如下内容:

user nginx nginx;

如果注释或不设置上述参数,默认为nobody用户,不推荐使用nobody用户名,最好采用一个普通用户。

第二种方法为直接在编译Nginx软件的时候指定编译的用户名和组,命令如下(推荐使用该种方式):

./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx-1.18.0 \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_stub_status_module

提示:在编译Nginx服务时,直接指定用户和组,这样无论配置文件中是否加参数,默认都是nginx用户。

修改参数优化Nginx服务性能

优化Nginx服务的worker进程数

在高并发、高访问量的Web服务场景,需要事先启动好更多的Nginx进程,以保证快速响应并处理大量并发用户的请求。

1.优化NGINX进程对应的配置

优化Nginx进程对应的Nginx服务的配置参数如下:

worker_processes  1; # 指定了Nginx要开启的进程数,结尾的数字就是进程的个数

上述参数调整的是Nginx服务的worker进程数,Nginx有Master进程和worker进程之分,Master为管理进程,真正处理请求的是worker进程。

2.优化Nginx进程个数的策略

worker_processes参数大小的设置最好和网站的用户数量相关联,可如果是新配置,不知道网站的用户数量该怎么办?

搭建服务器时,worker进程数最开始的设置可以等于CPU的核数,且worker进程数要多一些,这样起始提供服务时就不会出现因为访问量快速增加而临时启动新进程提供服务的问题,缩短了系统的瞬时开销和提供服务的时间,提升了服务用户的速度。高流量高并发场合也可以考虑将进程数提高至CPU核数*2,具体情况要根据实际的业务来选择,因为这个参数除了要和CPU核数匹配外,也和硬盘存储的数据及系统的负载有关,设置为CPU的核数是一个好的起始配置,这也是官方的建议。

3.查看Web服务器CPU硬件资源信息

通过/proc/cpuinfo可查看CPU个数及总核数。查看PCU总核数的示例如下:

# 方法一
grep processor /proc/cpuinfo | wc -l
# 方法二
grep -c processor /proc/cpuinfo

通过top命令,然后按数字1,即可显示所有的CPU核数,如下:

4.修改服务器Nginx配置

我的服务器时1核2G,假设服务器的CPU颗数为1颗,核数为4核,我们将参数值改为4

worker_processes  4;

修改并保存后,优雅重启Nginx,使修改生效,如下:

nginx -s reload

现在检查修改后的worker进程数量,如下:

# 假如Nginx监听的是8端口
lsof -i:80
# 或者通过如下命令查看
ps -ef | grep nginx | grep -v grep

worker_process可知,worker的进程数为4个。Nginx Master主进程不包含在这个参数里,Nginx Master的主进程为管理进程,负责调度和管理worker进程。

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

默认情况下,Nginx的多个进程有可能跑在某一个

请关注公众号获取更多资料


Nginx安全优化与性能调优(一) https://www.cppentry.com/bencandy.php?fid=97&id=295998

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇《全栈工程师 Web 开发指南》 - .. 下一篇复杂度分析的套路及常见的复杂度

评论

验 证 码:
表  情:
内  容: