Что такое Nginx

Nginx является легкий из веб -  сервера, обратного прокси - сервера и электронной почты (IMAP / POP3) прокси - сервер, который характеризуется владение меньше памяти, параллельной способности поддерживать реакцию до 50000 одновременных соединений. На самом деле способность делать параллельную Nginx в том же типе производительности веб - сервера лучше, с помощью пользователей Nginx веб - сайта являются: Baidu, Jingdong , Сина , Netease , Tencent , Taobao и т.д.

Два экологической подготовки

1 Подготовьте чистый сервер centos7 или виртуальную машину или купить VPS. Nginx является разработка C, рекомендуется работать на Linux, конечно же, вы можете также установить версию Windows.

2 установить зависимости, установка требует Gcc среды, необходимо установить GCC, HTTP Zlib используется для упаковки содержимого прессовали с помощью Gzip, OpenSSL поддерживает HTTPS протокол SSL, библиотека PCRE используется для сопоставления регулярное, правила перезаписи, которые необходимо

3. Загрузите последнюю стабильную версию Nginx, текущая стабильная версия 1.14.2. Скачать официальный адрес сайта: HTTP: //nginx.org/en/download.html, скачать инсталляционный пакет будет загружен на CentOS.

Конечно, вы можете использовать Wget команду для загрузки непосредственно в системы CentOS:

Wget -c http://nginx.org/download/nginx-1.14.2.tar.gz

GroupAdd WWW

useradd -s / SBIN / NOLOGIN -g WWW WWW

4 скомпилировать и установить

Загрузите установочный пакет в каталог, распакованный Nginx, Nginx в каталог после распаковки, параметров конфигурации установки:

деготь -zxvf Nginx -1.14.2.tar.gz

кд Nginx -1.14.2

./configure --user = WWW --group = WWW prefix = / USR / местные / Nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module

http_stub_status_module роль: Nginx мониторинга состояния операционной

http_sub_module эффект: для замены строки

http_ssl_module роль: поддержка доступа по протоколу HTTPS

http_gzip_static_module действие: реализовать статическое сжатие, экономия трафика

Компиляция установки

сделать && сделать установку

5 Управление Nginx

Nginx редактор сценариев запуска

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# chkconfig: 2345 99 20
#description: nginx-server
nginx= /usr/local/nginx/sbin/nginx
case  $1  in
 
         start)
               netstat  -anptu |  grep  nginx
               if  [ $? - eq  0 ]
                  then
                     echo  "nginx-server is already running"
                   else
                      echo  "nginx-server begin start"
                     $nginx
                  fi
          ;;
 
         stop)
 
                 $nginx -s stop
                  if  [ $? - eq  0 ]
                  then
                     echo  "nginx-server is stoped"
                  else
                     echo  "nginx-server stop fail,try again"
                  fi
;;
 
         status)
              netstat  -anlpt |  grep  nginx
                  if  [ $? - eq  0 ]
                  then
                     echo  "nginx-server is running"
                  else
                     echo  "nginx-server is stoped"
fi
 
;;
 
         restart)
                  $nginx -s reload
                  if  [ $? - eq  0 ]
                  then
                      echo  "nginx-server is begin restart"
                  else
                      echo  "nginx-server restart fail"
                  fi
;;
 
 
          *)
          echo  "please enter {start restart status stop}"
;;<br> esac

 vi /etc/init.d/nginx
 chkconfig --add nginx  将nginx 添加为系统服务
 chkconfig --list|grep nginx
 chmod  +x /etc/init.d/nginx

.停止和重新载入nginx配置。

/usr/local/nginx/sbin/nginx –s stop # 停止

/usr/local/nginx/sbin/nginx -s reload # 重载nginx使配置生效

测试配置文件是否正常。

/usr/local/nginx/sbin/nginx –t

二 nginx优化

1 关于系统连接数的优化

linux 默认值 open files 和 max user processes 为 1024

说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程

#ulimit -n

1024

使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。

新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。

解决方法:

使用 ulimit Cn 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)

有如下三种修改方式:

1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最后增加:

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果

备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制

soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。

soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。

2 全局配置优化:

nginx初始初始进程数量

 worker_processes  8;

单进程处理最大请求连接数

 worker_connections  65535;

绑定CPU

四核cpu配置

worker_processes    4; #工作进程数量

worker_cpu_affinity 0001 0010 0100 1000; #开启多核

 

IO模型

       events {

        worker_connections  65535; #每个工作进程允许的最大连接数

        use epoll; #使用高性能的 epoll 事件驱动,处理效率高

  #什么是epoll 名词解释 http://www.mamicode.com/info-detail-2283798.html

}

 

http模块优化:

长连接超时时长

keepalive_timeout  65;

压缩

gzip  on;

静态数据缓存过期时长

允许客户端缓存所有图片数据360天

location ~ \.(jpg|gif|png|jpeg)$ {

         expires 360d;

}

关于安全:

修改nginx运行的用户

 user  www

隐藏版本号

再http模块中添加

server_tokens  off;

拒绝访问敏感目录

拒绝访问 admin和config目录

location ~ ^/(admin|config)/ {

        deny all;

}

三 Nginx 的工作原理

Nginx为什么高效?一文搞明白Nginx核心原理

Nginx 服务器,正常运行过程中:

  • 多进程:一个 Master 进程、多个 Worker 进程
  • Master 进程:管理 Worker 进程
  • 对外接口:接收外部的操作(信号)
  • 对内转发:根据外部的操作的不同,通过信号管理 Worker
  • 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
  • Worker 进程:所有 Worker 进程都是平等的
  • 实际处理:网络请求,由 Worker 进程处理;
  • Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。

HTTP 连接建立和请求处理过程:

  1. Nginx 启动时,Master 进程,加载配置文件
  2. Master 进程,初始化监听的 socket
  3. Master 进程,fork 出多个 Worker 进程
  4. Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求

Nginx 高性能、高并发:

  1. Nginx 采用:多进程 + 异步非阻塞方式(IO 多路复用 epoll)
  2. 请求的完整过程:
    1.   建立连接
    2.   读取请求:解析请求
    3.   处理请求
    4.   响应请求
  3. 请求的完整过程,对应到底层,就是:读写 socket 事件
     
    四  匹配模式及顺序

location = /uri    =开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern  ~开头表示区分大小写的正则匹配。
location ~* pattern  ~*开头表示不区分大小写的正则匹配。
location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location /      通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。

匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索