抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

脚本 - asp php jsp
html - css js html
HTTP协议
CMS
MD5

NGINX

nginx(engine x) 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器,最初由 Igor Sysoev 编写。 很长一段时间以来,它一直在许多负载重的俄罗斯网站上运行,包括 Yandex、Mail.Ru、VK 和 Rambler。 根据 Netcraft 的数据,2022 年 9 月,nginx 服务或代理了 21.48% 最繁忙的网站。以下是一些成功案例:Dropbox、Netflix、Wordpress.com、FastMail.FM。

基础 HTTP 服务器功能

  • 提供静态和索引文件,自动索引; 打开文件描述符缓存;
  • 带缓存的加速反向代理; 负载均衡和容错;
  • 加速支持 FastCGI、uwsgi、SCGI 和 memcached 服务器的缓存; 负载均衡和容错;
  • 模块化架构。 过滤器包括 gzipping、字节范围、分块响应、XSLT、SSI 和图像转换过滤器。 如果它们由代理或 FastCGI/uwsgi/SCGI 服务器处理,则可以并行处理单个页面中的多个 SSI 包含;
  • SSL 和 TLS SNI 支持;
  • 支持具有加权和基于依赖的优先级的 HTTP/2。

其他 HTTP 服务器功能

  • 基于名称和基于 IP 的虚拟服务器;
  • 保持活动和管道连接支持;
  • 访问日志格式、缓冲日志写入、快速日志轮换和 syslog 日志记录;
  • 3xx-5xx 错误代码重定向;
  • 重写模块:使用正则表达式改变URI;
  • 根据客户端地址执行不同的功能;
  • 基于客户端IP地址、密码(HTTP基本认证)和子请求结果的访问控制;
  • HTTP 引用者的验证;
  • PUT、DELETE、MKCOL、COPY 和 MOVE 方法;
  • FLV 和 MP4 流媒体;
  • 响应速度限制;
  • 限制来自一个地址的同时连接或请求的数量;
  • 基于IP的地理定位;
  • A/B 测试;
  • 请求镜像;
  • 嵌入式 Perl;
  • njs 脚本语言。

邮件代理服务器功能

  • 使用外部 HTTP 身份验证服务器将用户重定向到 IMAP 或 POP3 服务器;
  • 使用外部 HTTP 身份验证服务器进行用户身份验证并将连接重定向到内部 SMTP 服务器;
  • 认证方式:
    • POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
    • IMAP:登录、授权登录/PLAIN/CRAM-MD5;
    • SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
  • SSL 支持;
  • STARTTLS 和 STLS 支持。

TCP/UDP 代理服务器功能

  • TCP 和 UDP 的通用代理;
  • 对 TCP 的 SSL 和 TLS SNI 支持;
  • 负载均衡和容错;
  • 基于客户端地址的访问控制;
  • 根据客户端地址执行不同的功能;
  • 限制来自一个地址的同时连接数;
  • 访问日志格式、缓冲日志写入、快速日志轮换和 syslog 日志记录;
  • 基于IP的地理定位;
  • A/B 测试;
  • njs 脚本语言。

架构和可扩展性

  • 一个master和几个worker进程;工作进程在非特权用户下运行;
  • 灵活配置;
  • 在不中断客户端服务的情况下重新配置和升级可执行文件;
  • 支持 kqueue (FreeBSD 4.1+)、epoll (Linux 2.6+)、/dev/poll (Solaris 7 11/99+)、事件端口 (Solaris 10)、select 和 poll;
  • 支持各种 kqueue 功能,包括 EV_CLEAR、EV_DISABLE(临时禁用事件)、NOTE_LOWAT、EV_EOF、可用数据数量、错误代码;
  • 支持EPOLLRDHUP(Linux 2.6.17+,glibc 2.8+)和EPOLLEXCLUSIVE(Linux 4.5+,glibc 2.24+)等多种epoll特性;
  • sendfile(FreeBSD 3.1+、Linux 2.2+、macOS 10.5+)、sendfile64(Linux 2.4.21+)和 sendfilev(Solaris 8 7/01+)支持;
  • 文件 AIO(FreeBSD 4.3+,Linux 2.6.22+);
  • DIRECTIO(FreeBSD 4.4+、Linux 2.4+、Solaris 2.6+、macOS);
  • 接受过滤器(FreeBSD 4.1+、NetBSD 5.0+)和 TCP_DEFER_ACCEPT(Linux 2.4+)支持;
  • 10,000 个不活动的 HTTP keep-alive 连接占用大约 2.5M 内存;
  • 数据复制操作保持在最低限度。

经过测试的操作系统和平台

  • FreeBSD 3 — 12 / i386; FreeBSD 5 — 12 / amd64; FreeBSD 11 / ppc; FreeBSD 12 / ppc64;
  • Linux 2.2 — 4 / i386; Linux 2.6 — 5 / amd64; Linux 3 — 4 / armv6l, armv7l, aarch64, ppc64le; Linux 4 — 5 / s390x;
  • Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v; Solaris 11 / x86;
  • AIX 7.1 / powerpc;
  • HP-UX 11.31 / ia64;
  • macOS / ppc, i386, x86_64;
  • Windows XP, Windows Server 2003, Windows 7, Windows 10.

下载

NGINX 包含 mainline 和 stable 两个版本。

配置及安装

配置命令 configure
常用参数:

  • –prefix=path:定义将保存服务器文件的目录。这个相同的目录也将用于由 configure 设置的所有相对路径(库源的路径除外)和 nginx.conf 配置文件中。 默认设置为 /usr/local/nginx 目录。
  • –sbin-path=path:设置 nginx 可执行文件的名称。此名称仅在安装期间使用。 默认情况下,该文件名为 prefix/sbin/nginx。
  • –modules-path=path:定义将安装 nginx 动态模块的目录。 默认情况下使用 prefix/modules 目录。
  • –conf-path=path:设置 nginx.conf 配置文件的名称。 如果需要,nginx 总是可以使用不同的配置文件启动,方法是在命令行参数 -c 文件中指定它。 默认情况下,该文件名为 prefix/conf/nginx.conf。
  • –user=name:设置工作进程将使用其凭据的非特权用户的名称。 安装后,始终可以使用 user 指令在 nginx.conf 配置文件中更改名称。 默认用户名是nobody。
  • –with-http_ssl_module:允许构建一个将 HTTPS 协议支持添加到 HTTP 服务器的模块。 默认情况下不构建此模块。 构建和运行此模块需要 OpenSSL 库。
  • –with-http_v2_module:允许构建一个为 HTTP/2 提供支持的模块。 默认情况下不构建此模块。
  • –with-openssl=path: sets the path to the OpenSSL library sources.
  • –with-pcre=path:设置 PCRE 库源的路径。 库分发需要从 PCRE 站点下载并提取。 其余的由 nginx 的 ./configure 和 make 完成。 location 指令中的正则表达式支持和 ngx_http_rewrite_module 模块需要该库。
  • –with-zlib=path:设置 zlib 库源的路径。 库分发(版本 1.1.3 — 1.2.11)需要从 zlib 站点下载并解压缩。 其余的由 nginx 的 ./configure 和 make 完成。 ngx_http_gzip_module 模块需要该库。

Starting, Stopping, and Reloading Configuration

To start nginx, run the executable file. Once nginx is started, it can be controlled by invoking the executable with the -s parameter. Use the following syntax:

1
nginx -s signal

Where signal may be one of the following:

  • stop — fast shutdown
  • quit — graceful shutdown
  • reload — reloading the configuration file
  • reopen — reopening the log files

提供静态内容

1
2
3
location / {
root /data/www;
}

此 location 块指定与来自请求的 URI 相比的“/”前缀。 对于匹配请求,URI 将被添加到 root 指令中指定的路径,即 /data/www, 以形成本地文件系统上请求文件的路径。
如果有多个匹配的位置块,nginx 会选择具有最长前缀的位置块。 上面的位置块提供了最短的前缀,长度为 1,因此只有当所有其他位置块都未能提供匹配时,才会使用该块。

动态脚本语言

对于Nginx而言,PHP是一个外部程序而不是Nginx内部模块。Nginx需要通过CGI接口程序来实现与PHP程序的交互,进而将php响应的文件交给用户浏览器。这样就实现了动态网站的基本流程。FastCGI就是这样一种接口,通过php-fpm来管理,换句话说php-fpm就是FastCGI的进程管理器。

评论