企业级Nginx服务基础到架构优化详解--25条
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、隐藏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.
无奈人生安全网
内容来自无奈安全网