企业级Web Nginx 服务优化
总结配置文件:
nginx.conf httpd.conf httpd-vhosts httpd-mpm.conf
my.cnf php.ini php-fpm.conf
1.1nginx.conf 配置文件基本参数优化
1.1.1 隐藏nginx header 内版本号信息
一些特定的系统及服务漏洞一般都和热定的软件及版本号有关,我们应尽量隐藏服务器的敏感信息(软件名称及版本等信息),这样黑客无法猜到有漏洞的服务是否是对应服务的版本,从而确保web服务器最大的安全。
1.利用curl查看隐藏前header内的web版本信息。
[[email protected]-01 ~]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Thu, 04 Jun 2015 21:04:54 GMT
Content-Type: text/html
Content-Length: 11
Last-Modified: Mon, 01 Jun 2015 10:17:41 GMT
Connection: keep-alive
ETag: "556c3145-b"
Accept-Ranges: bytes
2.浏览器访问web服务报错信息:
- 以上两个访问不但暴露了nginx软件版本名称,而且暴露了nginx特定的版本号,这样就会给服务的安全带来了一定的风险,应该禁止掉。
- 3.修改nginx配置文件nginx.conf中的加入“server_tokens off”如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
进行重启或者重新加载:
-
[[email protected]-01 html]# nginx -s reload
报错信息注意放置为知为http标签内,如果放错了位置,会有报错如下:
生效的结果如下:[[email protected]01 html]# curl -I 127.0.0.1HTTP/1.1 200 OKServer: nginx <<- 这里边就没有版本号,使之更加的安全Date: Thu, 04 Jun 2015 21:14:16 GMTContent-Type: text/htmlContent-Length: 11Last-Modified: Mon, 01 Jun 2015 10:17:41 GMTConnection: keep-aliveETag: "556c3145-b"Accept-Ranges: bytes2.浏览器访问去掉版本号:
官方说明:
-
Syntax: server_tokens on | off;
Default:
server_tokens on;《--默认是打开的状态
Context: http, server, location<--在哪个标签里面作用
Enables or disables emitting nginx version in error messages and in the “Server” response header field.
- 来源: <http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens>
响应的错误消息和迎面错误的消息
特别说明:更进一步,我们可以通过一些手段来把web服务软件的名称也给隐藏或者更改为其他web服务软件,迷惑黑客,此处设置见后文
1.1.2更改掉nginx的默认用户及用户组nobody
1.nginx服务启动,使用默认用户是nobody:
[[email protected] nginx]# grep ‘#user‘ conf/nginx.conf.default #user nobody;
为了防止黑客猜到这个用户,我们需要更改下特殊的用户名。提供nginx服务用。
2.更改默认用户的方法有两种,第一种为:
user nginx nginx;
设置Nginx Worker 进程运行的用户以及用户组,如果注释或者不设置,默认即是nobody用户和组,不推荐使用Nobody用户名称,最好采用一个普通用户名称,如:nginx的主机进程还是以root身份运行的,后文也会有不用root进程起动服务配置。
建立nginx用户的操作过程如下:
[[email protected] conf]# useradd nginx -s /sbin/nologin -M <----不需要系统同登陆shell 应当禁止掉 相当于apache里的用户一样的。
3.更改默认用户的方法有两种,前面讲了第一种,第二种为:
4.最后检查nginx进程的对应用户如下:
-
[[email protected]-01 conf]# ps -ef | grep nginx | grep -v grep
root 3748 1 0 05:04 ? 00:00:00 nginx: master process nginx
nginx 3765 3748 0 05:11 ? 00:00:00 nginx: worker process
1.1.3配置nginx worker进程
在高并发场景,我们需要事先启动更多的nginx进程以保证快速的响应并处理用户的请求。具体的配置参数如下:
worker_processes 1;<---指定nginx要开启的进程数,建议指定和cpu的数量相等或乘2的进程数。
worker_processes 参数开始的设置可以等于cpu的个数或核数(worker_cpu_affinity参数中的配置可以指定第一个到最后一个进程分别是由哪个的cpu),进程数多了一些,起始提供服务时就不会临时启动新的进程提供服务,减少了系统开销,提升了服务速度。热数场合也可以考虑提高至CPU*2的进程数,具体情况要根据世纪的业务来选择,因为这个参数除CPU核数的影响外和硬盘存储的数据以及负载也有关系。
1.查看linux服务器的核数的方法:
[[email protected] conf]# grep process /proc/cpuinfo processor : 0
2.进行修改
vim nginx.conf[[email protected] conf]# cat nginx.confworker_processes 4;events { worker_connections 1024;}
3.进行重新加载:
[[email protected] conf]# nginx -s reload
4.进行查看并行检查:
[[email protected] conf]# ps -ef | grep nginx | grep -v grep root 3748 1 0 05:04 ? 00:00:00 nginx: master process nginx nginx 3828 3748 0 05:59 ? 00:00:00 nginx: worker process nginx 3829 3748 0 05:59 ? 00:00:00 nginx: worker process nginx 3830 3748 0 05:59 ? 00:00:00 nginx: worker process nginx 3831 3748 0 05:59 ? 00:00:00 nginx: worker process
1.1.4根据CPU核数进行nginx进程优化:
默认情况下nginx的多个进程可能更多的跑在一颗cpu上,本节是分配不同的进程给不同的cpu处理,达到充分利用硬件多核多cpu的目的:
1.不同cpu对应配置如下
四核cpu服务器:
八核cpu服务器: