支持操作系统
-
FreeBSD 3— 10 / i386; FreeBSD 5— 10 / amd64;
-
Linux 2.2— 4 / i386; Linux 2.6— 4 / amd64; Linux 3— 4 / armv6l, armv7l, aarch64;
-
Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;
-
AIX 7.1 / powerpc;
-
HP-UX 11.31 / ia64;
-
Mac OS X / ppc, i386;
-
Windows XP, Windows Server 2003.
结构与扩展
一个主进程和多个工作进程。工作进程是
单线程的,且不需要特殊授权即可运行;
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功能;
Memcached 的 GET 接口;
支持 keep-alive 和管道连接;
灵活简单的配置;
重新配置和在线升级而无须中断客户的工作进程;
可定制的访问日志,日志写入缓存,以及快捷的日志回卷;
基于客户端IP 地址和 HTTP 基本认证的访问控制;
PUT,DELETE,和 MKCOL 方法;
支持 FLV (Flash 视频);
带宽限制。
实验特性
通过 aio_read()/aio_write() 的
套接字工作的实验
模块,仅在 FreeBSD 下;
对
线程的实验化支持,FreeBSD 4.x 的实现基于 rfork();
Nginx 主要的英语站点是 http://sysoev. ru/en/;
英语文档草稿由 Aleksandar Lazic 完成 点击。
HTTP基础功能
FastCGI,简单的负载均衡和容错;
模块化的结构。过滤器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;
SSL 和 TLS SNI 支持;
IMAP/POP3代理服务功能:
使用外部
HTTP 认证服务器重定向用户到 IMAP/POP3 后端;
使用外部 HTTP 认证服务器认证用户后连接重定向到内部的 SMTP 后端;
其他HTTP功能
基于名称和基于IP的虚拟服务器;
Keep-alive and pipelined connections support;保持活动和支持管线连接;
Flexible configuration;灵活的配置;
Reconfiguration and online upgrade without interruption of the client processing;重载配置,无间断程序升级;
Access log formats,bufferred log writing,and quick log rotation;访问日志格式,bufferred日志写,快速登录旋转;
3xx-5xx error codes redirection; 3xx的- 5xx
错误代码重定向;
Access control based on client IP address and HTTP Basic authentication;基于客户端IP地址访问控制和HTTP基本认证;
The PUT,DELETE,MKCOL,COPY and MOVE methods; 提交,删除,MKCOL,复制和移动方法;
Speed limitation;速度限制;
Limitation of simultaneous connections or requests from one address.限制同个IP地址请求数量。
邮件代理服务器功能
用户重定向到IMAP/POP3后端使用外部HTTP认证服务器;
User authentication using an external HTTP authentication server and connection redirection to internal SMTP backend;用户
身份验证使用外部HTTP认证服务器和连接重定向到内部的SMTP后端;
Authentication methods:验证方法:
POP3: USER/PASS,APOP,AUTH LOGIN/PLAIN/CRAM-MD5;的POP3:用户名/密码,的APOP,AUTH的LOGIN/PLAIN/CRAM-MD5;
IMAP: LOGIN,AUTH LOGIN/PLAIN/CRAM-MD5; IMAP的:登录,AUTH的LOGIN/PLAIN/CRAM-MD5;
SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;的SMTP:AUTH的LOGIN/PLAIN/CRAM-MD5;
SSL support; SSL支持;
STARTTLS and STLS support. STARTTLS的和补充的支持。
认证方法
POP3: POP3 USER/PASS,APOP,AUTH LOGIN PLAIN CRAM-MD5;
IMAP: IMAP LOGIN;
SMTP: AUTH LOGIN PLAIN CRAM-MD5;
SSL 支持;
在 IMAP 和 POP3 模式下的 STARTTLS 和 STLS 支持。
模块依赖性
编译安装包
Nginx在一些Linux发行版和BSD的各个变种版本的安装包仓库中都会有,通过各个系统自带的软件包管理方法即可安装。需要注意的是,很多预先编译好的安装包都比较陈旧,大多数情况下还是推荐直接从
源码编译。
源代码下载
特定平台的安装和记录
Nginx 在 Slackware 上的编译安装脚本
Nginx 在ubuntu和debian上的安装及脚本,debian针对nginx包的官方下载站点
Nginx 使用 Unix 下常用的 ‘./configure && make && make install‘ 过程来编译安装。
configure脚本确定系统所具有一些特性,特别是 nginx 用来处理连接的方法。然后,它创建 Makefile 文件。
configure 支持下面的选项:
--prefix=<path> - Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。
--sbin-path=<path> - Nginx
可执行文件安装路径。只能安装时指定,如果没有指定,默认为<prefix>/sbin/nginx。
--conf-path=<path> - 在没有给定-c选项下默认的nginx.conf的路径。如果没有指定,默认为<prefix>/conf/nginx.conf。
--pid-path=<path> - 在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 <prefix>/logs/nginx.pid。
--lock-path=<path> - nginx.lock文件的路径。
--error-log-path=<path> - 在nginx.conf中没有指定error_log指令的情况下,默认的
错误日志的路径。如果没有指定,默认为 <prefix>/logs/error.log。
--http-log-path=<path> - 在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 <prefix>/logs/access.log。
--user=<user> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。
--group=<group> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。
--builddir=DIR - 指定编译的目录
--with-rtsig_module - 启用 rtsig
模块
--with-select_module --without-select_module - Whether or not to enable the select module. This module is enabled by default if a more suitable method such as kqueue,epoll,rtsig or /dev/poll is not discovered by configure.
//允许或不允许开启SELECT模式,如果 configure 没有找到更合适的模式,比如:kqueue(sun os),epoll (linux kenel 2.6+),rtsig(实时信号)或者/dev/poll(一种类似select的模式,底层实现与SELECT基本相 同,都是采用轮训方法) SELECT模式将是默认安装模式
--with-poll_module --without-poll_module - Whether or not to enable the poll module. This module is enabled by default if a more suitable method such as kqueue,epoll,rtsig or /dev/poll is not discovered by configure.
--with-http_ssl_module - Enable ngx_http_ssl_module. Enables SSL support and the ability to handle HTTPS requests. Requires OpenSSL. On Debian,this is libssl-dev.
//开启HTTP SSL
模块,使NGINX可以支持HTTPS请求。这个模块需要已经安装了OPENSSL,在DEBIAN上是libssl
--with-http_realip_module - 启用 ngx_http_realip_module
--with-http_addition_module - 启用 ngx_http_addition_module
--with-http_sub_module - 启用 ngx_http_sub_module
--with-http_dav_module - 启用 ngx_http_dav_module
--with-http_flv_module - 启用 ngx_http_flv_module
--with-http_stub_status_module - 启用 "server status" 页
--without-http_charset_module - 禁用 ngx_http_charset_module
--without-http_gzip_module - 禁用 ngx_http_gzip_module. 如果启用,需要 zlib。
--without-http_ssi_module - 禁用 ngx_http_ssi_module
--without-http_userid_module - 禁用 ngx_http_userid_module
--without-http_access_module - 禁用 ngx_http_access_module
--without-http_auth_basic_module - 禁用 ngx_http_auth_basic_module
--without-http_autoindex_module - 禁用 ngx_http_autoindex_module
--without-http_geo_module - 禁用 ngx_http_geo_module
--without-http_map_module - 禁用 ngx_http_map_module
--without-http_referer_module - 禁用 ngx_http_referer_module
--without-http_rewrite_module - 禁用 ngx_http_rewrite_module. 如果启用需要 PCRE。
--without-http_proxy_module - 禁用 ngx_http_proxy_module
--without-http_fastcgi_module - 禁用 ngx_http_fastcgi_module
--without-http_memcached_module - 禁用 ngx_http_memcached_module
--without-http_limit_zone_module - 禁用 ngx_http_limit_zone_module
--without-http_empty_gif_module - 禁用 ngx_http_empty_gif_module
--without-http_browser_module - 禁用 ngx_http_browser_module
--without-http_upstream_ip_hash_module - 禁用 ngx_http_upstream_ip_hash_module
--with-http_perl_module - 启用 ngx_http_perl_module
--with-perl_modules_path=PATH - 指定 perl
模块的路径
--with-perl=PATH - 指定 perl 执行文件的路径
--http-log-path=PATH - Set path to the http access log
--http-client-body-temp-path=PATH - Set path to the http client request body temporary files
--http-proxy-temp-path=PATH - Set path to the http proxy temporary files
--http-fastcgi-temp-path=PATH - Set path to the http fastcgi temporary files
--without-http - 禁用 HTTP server
--with-mail - 启用 IMAP4/POP3/SMTP 代理
模块
--with-mail_ssl_module - 启用 ngx_mail_ssl_module
--with-cc=PATH - 指定 C
编译器的路径
--with-cpp=PATH - 指定 C
预处理器的路径
--with-cc-opt=OPTIONS - Additional parameters which will be added to the variable CFLAGS. With the use of the system library PCRE in FreeBSD,it is necessary to indicate --with-cc-opt="-I /usr/local/include". If we are using select() and it is necessary to increase the number of file descriptors,then this also can be assigned here: --with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=OPTIONS - Additional parameters passed to the linker. With the use of the system library PCRE in FreeBSD,it is necessary to indicate --with-ld-opt="-L /usr/local/lib".
--with-cpu-opt=CPU - 为特定的 CPU 编译,有效的值包括:pentium,pentiumpro,pentium3,pentium4,athlon,opteron,amd64,sparc32,sparc64,ppc64
--without-pcre - 禁止 PCRE 库的使用。同时也会禁止 HTTP rewrite 模块。在 "location" 配置指令中的
正则表达式也需要 PCRE。
--with-pcre=DIR - 指定 PCRE 库的
源代码的路径。
--with-pcre-opt=OPTIONS - Set additional options for PCRE building.
--with-md5=DIR - Set path to md5 library sources.
--with-md5-opt=OPTIONS - Set additional options for md5 building.
--with-md5-asm - Use md5 assembler sources.
--with-sha1=DIR - Set path to sha1 library sources.
--with-sha1-opt=OPTIONS - Set additional options for sha1 building.
--with-sha1-asm - Use sha1 assembler sources.
--with-zlib=DIR - Set path to zlib library sources.
--with-zlib-opt=OPTIONS - Set additional options for zlib building.
--with-zlib-asm=CPU - Use zlib assembler sources optimized for specified CPU,valid values are: pentium,pentiumpro
--with-openssl=DIR - Set path to OpenSSL library sources
--with-openssl-opt=OPTIONS - Set additional options for OpenSSL building
--with-debug - 启用调试日志
--add-module=PATH - Add in a third-party module found in directory PATH
在不同版本间,选项可能会有些许变化,请总是使用 ./configure --help 命令来检查一下当前的选项列表。
对于chroot的支持是否在计划之中
在什么情况下使用Nginx比使用squid要好? 反之亦然。
大体上来说nginx主要用于反向加速代理而不是像squid那样作为常规
代理服务器。Nginx的最大优势在于高负载情况下内存和CPU的低消耗。我不认为squid能给你带来比nginx更好的性能。
依照 [NginxImapProxyExample] 开始你的配置. 关于不同配置参数的具体信息,请查看 [NginxMailCoreModule] 页。
示例1: 用运行于apache上的php脚本做后端验证
示例2: 使用运行于同一个服务器的 nginx-embedded-perl
模块作为 imap/pop代理和认证后端
某些东东不工作
(URL重写,代理,路径,...)
例如:如
URL重写(rewrite)不工作了或者是unix的路径(/$PATH)的问题云云...
请仔细阅读 [NginxDebugging] 并且 逐行 查看
错误日志。
如果你没找到错误 打起精神 试着到IRC或邮件列表里说明一下你碰到的问题。
有没有其它类似的Web服务器
Cherokee
Lighttpd (Lighty)
thttpd
关于各自的优缺点请使用自己喜欢的搜索引擎查找
让Nginx成为以postfix做为后端的SMTP代理
Nginx使用什么算法来实现
负载均衡它能实现基于连接数的负载均衡吗?
Nginx使用简单的轮巡算法,所以无法做基本链接计数的负载均衡。这个可能会在将来的版本中有所改变。
. nginx + substitutions 安装
nginx 自带一个Substitution模块,但该模块只能写一行,所以我们改用 substitutions
下面是安装一些预备软件
-
yum -y --noplugins install wget zip
-
yum -y --noplugins install unzip
-
yum -y --noplugins install gcc
-
yum -y --noplugins install make
-
yum -y --noplugins install pcre-devel
-
yum -y --noplugins install openssl-devel
编译软件
-
tar zxf nginx-1.0.8.tar.gz
-
cd nginx-1.0.8
-
./configure ./configure --add-module=path/substitutions4nginx-read-only //注意这里的path是相对应的真实路径
-
make
-
make install
-
配置 nginx.conf
此时,nginx应该安装在于 /usr/local/nginx 下面
-
server_name servername;
-
location / {
-
subs_filter ca-pub-********** ca-pub-**********; //把google ad 的用户号 ca-pub-9805743306566114 改成你自己的,比如 ca-pub-**********
-
subs_filter ********** **********; //把google ad 的广告号 **********改成你自己的,比如 **********,你懂的!:D
-
proxy_pass 这里是填写需要代理的网址; //反向代理站。
-
index index.html index.htm;
-
}
记住subs_filter 命令的格式即可随意发挥想象力替换你想替换的广告、超链接,等等。
基于太多人询问下面的问题:
我能为了得到上传进度而关闭代理的缓存吗
使用nginx我怎么才能给用户显示上传进度
到目前为止 (2007-Apr-26) 还没有办法关闭到后端服务器的缓存.
1.Nginx Rewrite 基本标记(flags)复制内容到剪贴板代码:last – 基本上都用这个Flag[1]
。
break – 中止Rewrite,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
2. 正则表达式匹配,其中:代码:
CODE:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
3. 文件及目录匹配,其中:代码:
CODE:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
4.Nginx 的一些可用的全局变量,可用做条件判断:
代码:
CODE:
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
cls
@ECHO OFF
SET NGINX_PATH=D:
SET NGINX_DIR=D:\nginx-1.3.6\
color 0a
TITLE Nginx 管理程序 Power By ChenJianxiang
GOTO MENU
:MENU
CLS
ECHO.
ECHO. * * * * Nginx 管理程序 Power By ChenJianxiang * * *
ECHO. * *
ECHO. * 1 启动Nginx *
ECHO. * *
ECHO. * 2 关闭Nginx *
ECHO. * *
ECHO. * 3 重启Nginx *
ECHO. * *
ECHO. * 4 退 出 *
ECHO. * *
ECHO. * * * * * * * * * * * * * * * * * * * * * * * *
ECHO.
ECHO.请输入选择项目的序号:
set /p ID=
IF "%id%"=="1" GOTO cmd1
IF "%id%"=="2" GOTO cmd2
IF "%id%"=="3" GOTO cmd3
IF "%id%"=="4" EXIT
PAUSE
:cmd1
ECHO.
ECHO.启动Nginx......
IF NOT EXIST %NGINX_DIR%nginx.exe ECHO %NGINX_DIR%nginx.exe不存在
%NGINX_PATH%
cd %NGINX_DIR%
IF EXIST %NGINX_DIR%nginx.exe start %NGINX_DIR%nginx.exe
ECHO.OK
PAUSE
GOTO MENU
:cmd2
ECHO.
ECHO.关闭Nginx......
taskkill /F /IM nginx.exe > nul
ECHO.OK
PAUSE
GOTO MENU
:cmd3
ECHO.
ECHO.关闭Nginx......
taskkill /F /IM nginx.exe > nul
ECHO.OK
GOTO cmd1
GOTO MENU
2012年08月22日,Nginx 1.3.5 开发版发布。
2012年09月12日,Nginx 1.3.6 开发版发布。
2012年12月11日,Nginx 1.2.6 稳定版发布
2013年02月12日,Nginx 1.2.7 稳定版发布
2013年02月19日,Nginx 1.3.13 开发版发布
2013年04月03日,Nginx 1.2.8 稳定版发布。
2013年04月16日,Nginx 1.3.16 开发者版本发布。
2013年04月24日,Nginx 1.4.0 稳定版发布。
2013年05月07日,Nginx 1.4.1 稳定版发布。
2013年05月07日,Nginx 1.5.0 开发版本发布。
2013年06月04日,Nginx 1.5.1 主版本发布。
2013年07月02日,Nginx 1.5.2 开发版发布。
2013年07月17日,Nginx 1.4.2 稳定版发布。
2013年07月30日,Nginx 1.5.3 开发版本发布。
2013年08月27日,Nginx 1.5.4 开发版本发布。
2013年09月17日,Nginx 1.5.5 开发版本发布。[1-2]
2015年10月27日,Nginx 1.9.6 主线版本发布。
2016年02月09日,Nginx 1.9.11开发版本发布。[3]
2016年07月26日,Nginx1.11.3主线版本。