1、Nginx 简介

Nginx是一个高性能WEB服务器,除它之外 Apache、Tomcat、Jetty、IIS 它们都是 Web 服务器,或者叫做WWW(World Wide Web)服务器,相应地也都具备Web服务器的基本功能。Nginx 相对基它 WEB 服务有什么优势呢?

  • Tomcat、Jetty 面向 java 语言,先天就是重量级的 WEB 服务器,其性能与 Nginx 没有可比性

  • IIS 只能在 Windows 操作系统上运行。Windows 作为服务器在稳定性与其他一些性能上都不如类 UNIX 操作系统,因此,在需要高性能 Web 服务器的场合下 IIS 并不占优

  • Apache的发展时期很长,而且是目前毫无争议的世界第一大Web服务器,其有许多优点,如稳定、开源、跨平台等,但它出现的时间太长了,在它兴起的年代,互联网的产业规模远远比不上今天,所以它被设计成了一个重量级的、不支持高并发的Web服务器。在Apache服务器上,如果有数以万计的并发HTTP请求同时访问,就会导致服务器上消耗大量内存,操作系统内核对成百上千的Apache进程做进程间切换也会消耗大量CPU资源,并导致HTTP请求的平均响应速度降低,这些都决定了Apache不可能成为高性能Web服务器,这也促使了Lighttpd和Nginx的出现。 下图可以看出07年到17 年强劲增长势头

image.png

2、编译与安装


linux 内核 2.6 及以上版本

只有 2.6 之后才支持 epool ,在此之前使用 select 或 pool 多路复用的 IO 模型,无法解决高并发压力的问题。通过命令 uname -a 即可查看

GCC 编译器
**
GCC(GNU Compiler Collection)可用来编译C语言程序。Nginx 不会直接提供二进制可执行程序,只能下载源码进行编译。

PCRE 库
**
PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)是由 Philip Hazel 开发的函数库,目前为很多软件所使用,该库支持正则表达式。

zlib 库
**
zlib 库用于对 HTTP 包的内容做 gzip 格式的压缩,如果我们在 nginx.conf 里配置了 gzip on,并指定对于某些类型(content-type)的 HTTP 响应使用 gzip 来进行压缩以减少网络传输量。

OpenSSL 开发库
**
如果我们的服务器不只是要支持 HTTP,还需要在更安全的 SSL 协议上传输 HTTP,那么就需要拥有 OpenSSL 了。另外,如果我们想使用 MD5、SHA1 等散列函数,那么也需要安装它。

上面几个库都是Nginx 基础功能所必需的,为简单起见我们可以通过 yum 命令统一安装

  1. sudo apt-get install libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev

3、源码编译

nginx 下载页:http://nginx.org/en/download.html

  1. # 安装所需要的库文件
  2. sudo apt-get update
  3. sudo apt-get install libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev
  4. # 下载 nginx 稳定版本
  5. wget http://nginx.org/download/nginx-1.16.1.tar.gz
  6. # 解压
  7. tar -zxvf nginx-1.16.1.tar.gz
  8. # 进入解压后的目录
  9. cd nginx-1.16.1
  10. # 配置并编译, 可能需要使用 root 用户
  11. ./configure && make && make install

执行完成之后 nginx 运行文件 就会被安装在 /usr/local/nginx 下

4、模块更新

  1. # 添加状态查查看等其它模块
  2. ./configure --with-pcre --with-http_stub_status_module --with-http_ssl_module
  3. # 重新创建主文件
  4. make
  5. # 停止原有的 nginx
  6. ps -ef | grep nginx
  7. kill -9 XXXX
  8. # 将新生成的 nginx 文件覆盖旧文件
  9. cp objs/nginx /usr/local/nginx/sbin/
  10. # 查看是否更新成功 显示了 configure 构建参数表示成功
  11. /usr/local/nginx/sbin/nginx -V
  12. nginx version: nginx/1.16.1
  13. built by gcc 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
  14. built with OpenSSL 1.1.1 11 Sep 2018
  15. TLS SNI support enabled
  16. configure arguments: --with-pcre --with-http_stub_status_module --with-http_ssl_module
  17. root@LEGION:/usr/local/nginx/sbin#

5、控制命令

查看命令帮助

  1. ./sbin/nginx -?

默认方式启动

  1. ./sbin/nginx

指定配置文件启动

  1. ./sbing/nginx -c /tmp/nginx.conf

指定 nginx 程序目录启动

  1. ./sbin/nginx -p /usr/local/nginx/

快速停止(直接杀死进程)

  1. ./sbin/nginx -s stop

优雅停止(等待目前正在访问的进程完成访问)

  1. ./sbin/nginx -s quit

热装载配置文件

  1. ./sbin/nginx -s reload

重新打开日志文件

  1. ./sbin/nginx -s reopen

设置全局命令,如下表示设置启动用户为root

  1. ./sbin/nginx -g "user root;"