nginx中文手册

本文基于 nginx 中文手册修改,感觉原文语句不够流畅,自己手打一遍理解一下也好。
纯属个人学习所用

Nginx 功能概述

HTTP基础功能:

  • 处理静态文件,索引文件以及自动索引;
  • 反向代理加速(无缓存),简单的负载均衡和容错;
  • FastCGI,简单的负载均衡和容错;
  • 模块化的结构。过滤器包括 gzipping, byte ranges, chunked responses,以及 SSI-filter。在 SSI 过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;
  • SSL 和 TLS SNI 支持

    IMAP/POP3 代理服务功能:

  • 使用外部 HTTP 认证服务器重定向用户到 IMAP/POP3 后端;

  • 使用外部 HTTP 认证服务器认证用户后连接重定向到内部的 SMTP 后端;

  • 认证方法:

    • POP3: POP3 USER/PASS, APOP, AUTH LOGIN PLAIN CRAM-MD5;
    • IMAP: IMAP LOGIN;
    • SMTP: AUTH LOGIN PLAIN CRAM-MD5;
  • SSL 支持:

    • 在 IMAP 和 POP3 模式下的 STARTTLS 和 STLS 支持;

支持的操作系统:

  • FreeBSD 3.x, 4.x, 5.x, 6.x i386; FreeBSD 5.x, 6.x amd64;
  • Linux 2.2, 2.4, 2.6 i386; Linux 2.6 amd64;
  • Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;
  • MacOS X (10.4) PPC;

结构与扩展:

  • 一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行;
  • kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), select,以及 poll 支持;
  • kqueue 支持的不同功能包括 EV_CLEAR, EV_DISABLE (临时禁止事件),NOTE_LOWAT, EV_EOF,有效数据的数目,错误代码;
  • sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+),和 sendfilev (Solaris 8 7/01+) 支持;
  • 输入过滤 (FreeBSD 4.1+) 以及 TCP_DEFER_ACCEPT (Linux 2.4+) 支持;
  • 10,000 非活动的 HTTP keep-alive 连接仅需要 2.5M 内存;
  • 最小化的数据拷贝操作;

其它 HTTP 功能:

  • 基于 IP 和名称的虚拟主机服务;
  • Memcached 的 GET 接口;
  • 支持 keep-alive 和管道连接;
  • 灵活简单的配置;
  • 重新配置和在线升级而无需中断客户的工作进程;
  • 可定制的访问日志,日志写入缓存,以及快捷的日志回卷;
  • 4xx-5xx 错误代码重定向;
  • 基于 PCRE 的 rewrite 重写模块;
  • 基于客户端 IP 地址和 HTTP 基本认证的访问控制;
  • PUT, DELETE, 和 MKCOL 方法;
  • 支持 FLV (Flash 视频);
  • 带宽限制;

实验特性:

  • 内嵌的 perl
  • 通过 aio_read() / aio_write() 的套接字工作的实验模块,仅在 FreeBSD 下
  • 对线程的实验化支持,FreeBSD 4.x 的实现基于 rfork()

Nginx 主要的英语站点是 http://sysoev.ru/en/
英语文档草稿有 Aleksandar Lazic 完成 点击

为什么选择 Nginx

Nginx 是一个高性能的 Web 和反向代理服务器,它具有很多非常优越的特性:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其收到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型。
(数据?)
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器对外进行服务。Nginx 用 C 编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),last.fm 描述了成功并且美妙的使用经验。
(链接?)
Nginx 安装非常的简单,配置文件非常简洁(还能够支持 perl 语法),Bugs 非常少,启动特别容易,并且几乎可以做到 7*24 不间断运行,即使运行书个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。
(这个不错,虽然用了很多非常,特别形容)
(上面这段没有修改,主要理解还不深,语句还可以更通顺易懂一点)

Nginx 安装

nginx 可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息。

准备编译环境(gcc g++)

ubuntu:

apt-get install build-essential
apt-get install libtool

centos:
安装 make:

yum -y install gcc automake autoconf libtool make

安装 g++:

yum -y install gcc gcc-c++

安装

# install pcre for rewrite
cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz
tar -zxvf pcre-8.34.tar.gz
cd pcre-8.34
./configure
make
make install

# install zlib for gzip
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxcvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install

# install ssl
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
tar -zxvf openssl-1.0.1c.tar.gz

# install nginx
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/usr/local/src/pcre-8.34 \
--with-zlib=/usr/local/src/zlib-1.2.8 \
--with-openssl=/usr/local/src/openssl-1.0.1c
make
make install

# start nginx
/usr/local/nginx/nginx
netstat -ano|grep 80

--prefix= path: nginx 的安装目录,默认使用 /usr/local/nginx
--sbin-path=path: nginx 的可执行文件目录,默认 prefix/sbin/nginx
--conf-path=path: 配置文件 nginx.conf 的路径,默认 prefix/conf/nginx.conf,可以通过 -c 切换
--pid-path=path: 设置 nginx.pid 文件,默认 prefix/logs/nginx.pid
--error-log-path=path: 设置主错误、警告和诊断文件的名称,默认 prefix/logs/error.log,可以通过 nginx.conf 里面的 error_log 指定
--http-log-path=path: 设置主请求的 HTTP 服务器的日志文件的名称,默认 prefix/logs/access.log,可以通过 nginx.conf 里面的 access_log 指定
--user=name: 设置 nginx 工作进程的用户,默认 nobody,可以通过 nginx.conf 里的 user 指定
--group=name: 设置 nginx 工作进程的用户组,默认为非特权用户,可以通过 nginx.conf 中的 user 指定
--with-select_module / --whithout-select_module: 启用或禁用构建一个模块来允许服务器使用 select()
--with-poll_module / --without-poll_module: 启用或禁用构建一个模块来允许服务器使用 poll() 方法
--without-http_gzip_module: 不编译 http_gzip 模块,编译并运行此模块需要 zlib 库
--without-http_rewrite_module: 不编译 http_rewrite 模块,编译并运行此模块需要 pcre 库
--without-http_proxy_module: 不编译 http_proxy 模块
--with-http_ssl_module: 使用 https 协议模块,默认情况下,该模块没有被构建。需要 openssl 库支持
--with-pcre=path: 设置 pcre 库的源码路径
--with-zlib=path: 设置 zlib 库的源码路径
--with-cc-opt=parameters: 设置 CFLAGS 额外参数,例如 FreeBSD 下使用 pcre 库需要加上 --with-cc-opt="-I /usr/local/include",要增加 select() 支持的文件数量需要加上 --with-cc-opt="-D FD_SETSIZE=2048"
--with-ld-opt=parameters: 设置链接附加参数,例如 FreeBSD 下使用 pcre 库,应指定 --with-ld-opt="-L /usr/local/lib"

运行和控制 Nginx

nginx 命令行参数

-c 为 Nginx 指定一个配置文件,来代替缺省的
-t 不允许,仅仅测试配置文件
-v 显示 nginx 的版本
-V 显示 nginx 的版本,编译器版本和配置参数

nginx 控制信号

可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /usr/local/nginx/nginx.pid 文件中,可以通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。
主进程可以处理以下的信号:

TERM, INT | 快速关闭
QUIT | 优雅地关闭
HUP | 重载配置,用新的配置开始新的工作进程,优雅地关闭旧的工作进程
USR1 | 重新打开日志文件
USR2 | 平滑升级可执行程序
WINCH | 优雅地关闭工作进程

(个人更喜欢用优雅而非从容,总之是一种温和的方式)

nginx 启动、停止、重启命令

启动

sudo /usr/local/nginx/nginx

优雅停止

ps -ef|grep nginx
kill -QUIT nginx主进程号

快速停止(立即关闭)

ps -ef|grep nginx
kill -TERM nginx主进程号

强制停止

kill -9 nginx主进程号

pid 方式

kill -信号类型(HUP|TERM|QUIT) cat /usr/local/nginx/nginx.pid

重启

三种类型:

  1. 简单型,先关闭进程,修改配置后,重启进程
  2. 重新加载配置文件,不重启进程,不会停止处理请求
  3. 平滑升级,不会停止处理请求 ##使用信号加载新的配置 kill -15 会中止进程 平滑切换 nginx 配置:
nginx -t -c /etc/nginx/nginx.conf
ps aux|egrep '(PID|nginx)
kill -HUP <pid_of_nginx>

当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定了配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件(例如:重新打开日志文件或监听的套接字)。之后,nginx 运行新的工作进程并优雅关闭旧的工作进程,通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。
(其实这里就是对上面那个表格展开讲了下,细节还是蛮有用的,见下面的新旧服务器切换)

平滑升级到新的二进制代码

平滑就是不中断服务,当升级新版本或者添加/删除服务器模块时需要平滑完成。

<未完待续,接下来几天 macbook 不在身边,就不更新了>

2016-10-13 18:47126