首页 > 代码库 > 企业级Web Nginx 服务优化(1)

企业级Web Nginx 服务优化(1)

企业级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版本信息。

  1. [root@nginx-01 ~]# curl -I 127.0.0.1

  1. HTTP/1.1 200 OK

  2. Server: nginx/1.6.2

  3. Date: Thu, 04 Jun 2015 21:04:54 GMT

  4. Content-Type: text/html

  5. Content-Length: 11

  6. Last-Modified: Mon, 01 Jun 2015 10:17:41 GMT

  7. Connection: keep-alive

  8. ETag: "556c3145-b"

  9. Accept-Ranges: bytes

  10. 2.浏览器访问web服务报错信息:

  11. 技术分享

  12. 以上两个访问不但暴露了nginx软件版本名称,而且暴露了nginx特定的版本号,这样就会给服务的安全带来了一定的风险,应该禁止掉。

  13. 3.修改nginx配置文件nginx.conf中的加入“server_tokens off”如下:

  14. worker_processes  1;

  15. events {

  16.     worker_connections  1024;

  17. }

  18. http {

  19.     server_tokens off;

  20.     include       mime.types;

  21.     default_type  application/octet-stream;

  22.     sendfile        on;

  23.     keepalive_timeout  65;

  24.     server {

  25.         listen       80;

  26.         server_name  localhost;

  27.         location / {

  28.             root   html;

  29.             index  index.html index.htm;

  30.         }

  31.         error_page   500 502 503 504  /50x.html;

  32.         location = /50x.html {

  33.             root   html;

  34.         }

  35.     }

进行重启或者重新加载:
  1. [root@nginx-01 html]# nginx -s reload

报错信息注意放置为知为http标签内,如果放错了位置,会有报错如下:
技术分享生效的结果如下:[root@nginx-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.浏览器访问去掉版本号:
技术分享
官方说明:
  1. Syntax: server_tokens on | off;

  2. Default:

  3. server_tokens on;《--默认是打开的状态

  4. Context: http, server, location<--在哪个标签里面作用

  5. Enables or disables emitting nginx version in error messages and in the Server response header field.

  6. 来源: <http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens>

响应的错误消息和迎面错误的消息

特别说明:更进一步,我们可以通过一些手段来把web服务软件的名称也给隐藏或者更改为其他web服务软件,迷惑黑客,此处设置见后文

1.1.2更改掉nginx的默认用户及用户组nobody

1.nginx服务启动,使用默认用户是nobody:

[root@nginx-01 nginx]# grep ‘#user‘ conf/nginx.conf.default
                     #user  nobody;

为了防止黑客猜到这个用户,我们需要更改下特殊的用户名。提供nginx服务用。

2.更改默认用户的方法有两种,第一种为:

user nginx nginx;

设置Nginx Worker 进程运行的用户以及用户组,如果注释或者不设置,默认即是nobody用户和组,不推荐使用Nobody用户名称,最好采用一个普通用户名称,如:nginx的主机进程还是以root身份运行的,后文也会有不用root进程起动服务配置。

建立nginx用户的操作过程如下:

[root@nginx-01 conf]# useradd nginx -s /sbin/nologin -M <----不需要系统同登陆shell 应当禁止掉 相当于apache里的用户一样的。

3.更改默认用户的方法有两种,前面讲了第一种,第二种为:

技术分享
4.最后检查nginx进程的对应用户如下:
  1. [root@nginx-01 conf]# ps -ef | grep nginx | grep -v grep

  2. root       3748      1  0 05:04 ?        00:00:00 nginx: master process nginx

  3. 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服务器的核数的方法:

[root@nginx-01 conf]# grep process /proc/cpuinfo 
processor	: 0

2.进行修改

vim nginx.conf[root@nginx-01 conf]# cat nginx.confworker_processes  4;events {    worker_connections  1024;}

3.进行重新加载:

[root@nginx-01 conf]# nginx -s reload

4.进行查看并行检查:

[root@nginx-01 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服务器:
技术分享

企业级Web Nginx 服务优化(1)