欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

企业级Nginx服务基础到架构优化详解--25条

来源: 作者: 时间:2019-02-24 21:37 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

1、隐藏nginx header版本号
2、更改源码隐藏软件名称
3、更改nginx默认用户及用户组
4、配置nginx worker进程个数
5、根据CPU核数进行nginx进程优化
6、nginx事件处理模型优化
7、调整Nginx worker单个进程允许的客户端最大连接数
8、配置Nginx worker进程最大打开文件数
9、开启高效的文件传输模式
10、设置连接超时时间
11、上传文件大小设置(动态应用)
12、fastcgi调优(配合PHP引擎动态服务)
13、配置nginx gzip压缩功能
14、配置Nginx expires缓存功能
15、Nginx日志相关优化与安全
16、Nginx站点目录及文件URL访问控制(防止恶意解析)
17、防止恶意解析访问企业网站
18、Nginx图片及目录防盗链
19、Nginx错误页面的优雅显示
20、Nginx防爬虫优化
21 、限制HTTP请求方法
22、防DOS攻击
23、使用CDN为网站内容加速
24、Nginx程序架构优化
25、使用普通用户启动Nginx(监牢模式)
1、隐藏nginx header版本号
查看版本号
[root@db02 ~]# curl -I http://www.myhack58.com

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Tue, 16 Aug 2016 14:39:48 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.5.32
Link: //www.lichengbing.cn/wp-json/>; rel="https://api.w.org/"
编译nginx.conf配置文件,添加server_tokens off参数
http {
...
server_tokens off; #控制http response header内的服务版本信息的显示,以及错误信息中web服务版本信息
...
}
[root@db02 ~]# curl -I http://www.myhack58.com

HTTP/1.1 200 OK
Server: nginx #版本隐藏
2、更改源码隐藏软件名称
修改3个nginx源码文件
第一个nginx-1.6.3/src/core/nginx.h文件
[root@lichengbing nginx-1.6.3]# cd ~/tools/nginx-1.6.3
[root@lichengbing nginx-1.6.3]# sed -n '13,17p' src/core/nginx.h
#define NGINX_VERSION      "1.6.3" #改成你想要的版本号,如2.2.5
#define NGINX_VER          "Nginx/" NGINX_VERSION #你想改成的软件名称,如Apache
#define NGINX_VAR          "NGINX" #可以改成OWS等
#define NGX_OLDPID_EXT     ".oldbin"
第二个

[root@lichengbing nginx-1.6.3]# sed -i 's#Server: nginx#Server: OWS#g' src/http/ngx_http_header_filter_module.c
第三个ngx_http_special_response.c是否对外展示敏感信息
[root@lichengbing nginx-1.6.3]# sed -n '21,30p' src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"" NGINX_VER "" CRLF
"" CRLF
"" CRLF
;
static u_char ngx_http_error_tail[] =
"nginx" CRLF
"" CRLF
修改为如下
[root@lichengbing nginx-1.6.3]# sed -n '21,30p' src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"" NGINX_VER " (http://www.myhack58.com)" CRLF
"" CRLF
"" CRLF
;
static u_char ngx_http_error_tail[] =
"OWS" CRLF
"" CRLF
重新编译安装nginx,重启服务
3、更改nginx默认用户及用户组
[root@lichengbing ~]# grep '#user' /application/nginx/conf/nginx.conf.default
#user  nobody; #系统默认的用户为nobody
[root@lichengbing ~]# useradd www -s /sbin/nologin -M #建立用户www
user  www www; #nginx.conf 中配置用户
也可以在编译时加入用户和用户组,如
--user=www --group=www --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.6.3/
[root@lichengbing ~]# ps -ef|grep nginx|grep -v grep
root      1386     1  0 Jul21 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
www      24732  1386  0 23:19 ?        00:00:00 nginx: worker process
#此时worker process进程就是使用的www用户权限,当然也可以使master降权运行
4、配置nginx worker进程个数
worker_processes  8; #最好为服务器CPU的逻辑核心数
[root@netmonitor ~]# grep "physical id" /proc/cpuinfo|sort|uniq|wc -l #物理核数

[root@netmonitor ~]# grep "cpu cores" /proc/cpuinfo|uniq #单核心数
cpu cores         : 4
[root@netmonitor ~]# grep "processor" /proc/cpuinfo|wc -l #逻辑核心数

5、根据cpu核数进行nginx进程优化
亲和力参数(Nginx服务可能会发生只在同一颗CPU上起作用的情况)
worker_processes  8;
worker_cpu_affinity 001 0010 0100 1000; #数字代表1、2、3、4的掩码,平均分摊进程压力
worker_cpu_affinity 00000001 00000010...#8核心写法
防止进程只在一个核心上运行也可以使用 taskset 命令

taskset -c 1,2,3 /application/nginx/sbin/nginx start
6、nginx事件处理模型优化
nginx的连接处理机制在不同的操作系统中会采用不同的I/O模型:Linux上使用epoll、BSD上面用kqueue、Solaris中使用/dev/poll、windows中使用icop.

[1] [2] [3]  下一页

1、隐藏nginx header版本号
2、更改源码隐藏软件名称
3、更改nginx默认用户及用户组
4、配置nginx worker进程个数
5、根据CPU核数进行nginx进程优化
6、nginx事件处理模型优化
7、调整Nginx worker单个进程允许的客户端最大连接数
8、配置Nginx worker进程最大打开文件数
9、开启高效的文件传输模式
10、设置连接超时时间
11、上传文件大小设置(动态应用)
12、fastcgi调优(配合PHP引擎动态服务)
13、配置nginx gzip压缩功能
14、配置Nginx expires缓存功能
15、Nginx日志相关优化与安全
16、Nginx站点目录及文件URL访问控制(防止恶意解析)
17、防止恶意解析访问企业网站
18、Nginx图片及目录防盗链
19、Nginx错误页面的优雅显示
20、Nginx防爬虫优化
21 、限制HTTP请求方法
22、防DOS攻击
23、使用CDN为网站内容加速
24、Nginx程序架构优化
25、使用普通用户启动Nginx(监牢模式)
1、隐藏nginx header版本号
查看版本号
[root@db02 ~]# curl -I http://www.myhack58.com

本文来自无奈人生安全网

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Tue, 16 Aug 2016 14:39:48 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.5.32
Link: //www.lichengbing.cn/wp-json/>; rel="https://api.w.org/"
编译nginx.conf配置文件,添加server_tokens off参数
http {
...
server_tokens off; #控制http response header内的服务版本信息的显示,以及错误信息中web服务版本信息
...
}
[root@db02 ~]# curl -I http://www.myhack58.com

copyright 无奈人生

HTTP/1.1 200 OK
Server: nginx #版本隐藏
2、更改源码隐藏软件名称
修改3个nginx源码文件
第一个nginx-1.6.3/src/core/nginx.h文件
[root@lichengbing nginx-1.6.3]# cd ~/tools/nginx-1.6.3
[root@lichengbing nginx-1.6.3]# sed -n '13,17p' src/core/nginx.h
#define NGINX_VERSION      "1.6.3" #改成你想要的版本号,如2.2.5
#define NGINX_VER          "Nginx/" NGINX_VERSION #你想改成的软件名称,如Apache
#define NGINX_VAR          "NGINX" #可以改成OWS等
#define NGX_OLDPID_EXT     ".oldbin"
第二个

[root@lichengbing nginx-1.6.3]# sed -i 's#Server: nginx#Server: OWS#g' src/http/ngx_http_header_filter_module.c
第三个ngx_http_special_response.c是否对外展示敏感信息
[root@lichengbing nginx-1.6.3]# sed -n '21,30p' src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] = copyright 无奈人生
"" NGINX_VER "" CRLF
"" CRLF
"" CRLF
;
static u_char ngx_http_error_tail[] =
"nginx" CRLF
"" CRLF
修改为如下
[root@lichengbing nginx-1.6.3]# sed -n '21,30p' src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"" NGINX_VER " (http://www.myhack58.com)" CRLF
"" CRLF
"" CRLF
;
static u_char ngx_http_error_tail[] =
"OWS" CRLF
"" CRLF
重新编译安装nginx,重启服务
3、更改nginx默认用户及用户组
[root@lichengbing ~]# grep '#user' /application/nginx/conf/nginx.conf.default
#user  nobody; #系统默认的用户为nobody
[root@lichengbing ~]# useradd www -s /sbin/nologin -M #建立用户www
user  www www; #nginx.conf 中配置用户
也可以在编译时加入用户和用户组,如
--user=www --group=www --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.6.3/

copyright 无奈人生


[root@lichengbing ~]# ps -ef|grep nginx|grep -v grep
root      1386     1  0 Jul21 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
www      24732  1386  0 23:19 ?        00:00:00 nginx: worker process
#此时worker process进程就是使用的www用户权限,当然也可以使master降权运行
4、配置nginx worker进程个数
worker_processes  8; #最好为服务器CPU的逻辑核心数
[root@netmonitor ~]# grep "physical id" /proc/cpuinfo|sort|uniq|wc -l #物理核数

[root@netmonitor ~]# grep "cpu cores" /proc/cpuinfo|uniq #单核心数
cpu cores         : 4
[root@netmonitor ~]# grep "processor" /proc/cpuinfo|wc -l #逻辑核心数

5、根据cpu核数进行nginx进程优化
亲和力参数(Nginx服务可能会发生只在同一颗CPU上起作用的情况)
worker_processes  8; 内容来自无奈安全网
worker_cpu_affinity 001 0010 0100 1000; #数字代表1、2、3、4的掩码,平均分摊进程压力
worker_cpu_affinity 00000001 00000010...#8核心写法
防止进程只在一个核心上运行也可以使用 taskset 命令

taskset -c 1,2,3 /application/nginx/sbin/nginx start
6、nginx事件处理模型优化
nginx的连接处理机制在不同的操作系统中会采用不同的I/O模型:Linux上使用epoll、BSD上面用kqueue、Solaris中使用/dev/poll、windows中使用icop.

无奈人生安全网

[1] [2] [3]  下一页

内容来自无奈安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。