複製鏈接
請複製以下鏈接發送給好友

nginx

鎖定
Nginx (engine x) 是一個高性能的HTTP反向代理web服務器 [13]  ,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,公開版本1.19.6發佈於2020年12月15日。 [11] 
其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、簡單的配置文件和低系統資源的消耗而聞名。2022年01月25日,nginx 1.21.6發佈。 [12] 
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是佔有內存少,併發能力強,事實上nginx的併發能力在同類型的網頁服務器中表現較好。
外文名
Nginx
別    名
engine x
軟件許可
BSD許可
軟件類型
開源軟件,服務器軟件
兼容性
Linux系統,Windows NT系統,OS X
最新生產版本
1.24.0 [1] 
最新主線版本
1.25.1 [1] 

nginx優點

Nginx 可以在大多數 Unix Linux OS 上編譯運行,並有 Windows 移植版。 Nginx 的1.20.0穩定版已經於2021年4月20日發佈,一般情況下,對於新建站點,建議使用最新穩定版作為生產版本,已有站點的升級急迫性不高。Nginx 的源代碼使用 2-clause BSD-like license。
Nginx 是一個很強大的高性能Web反向代理服務,它具有很多非常優越的特性:
在連接高併發的情況下,Nginx是Apache服務不錯的替代品:Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟件平台之一。能夠支持高達 50,000 個併發連接數的響應,感謝Nginx為大家選擇了 epoll and kqueue作為開發模型。

nginx服務器

Nginx作為負載均衡服務:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作為 HTTP代理服務對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝。
無緩存的反向代理加速,簡單的負載均衡和容錯。
FastCGI,簡單的負載均衡和容錯。
模塊化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服務器處理單頁中存在的多個 SSI,則這項處理可以並行運行,而不需要相互等待。
支持 SSL 和 TLSSNI。 [2] 

nginx代碼

Nginx代碼完全用C語言從頭寫成,已經移植到許多體系結構和操作系統,包括:LinuxFreeBSDSolaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函數庫,並且除了zlibPCREOpenSSL之外,標準模塊只使用系統C庫函數。而且,如果不需要或者考慮到潛在的授權衝突,可以不使用這些第三方庫。

nginx代理服務器

作為郵件代理服務:Nginx 同時也是一個非常優秀的郵件代理服務(最早開發這個產品的目的之一也是作為郵件代理服務器),Last.fm 描述了成功並且美妙的使用經驗。
Nginx 是一個安裝非常的簡單、配置文件非常簡潔(還能夠支持perl語法)、Bug非常少的服務。Nginx 啓動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動。還能夠不間斷服務的情況下進行軟件版本的升級。

nginx功能

支持操作系統
  • 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;
結構與擴展
一個主進程和多個工作進程。工作進程是單線程的,且不需要特殊授權即可運行;
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 完成。
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錯誤代碼重定向;
The rewrite module;重寫模塊;
Access control based on client IP address and HTTP Basic authentication;基於客户端IP地址訪問控制和HTTP基本認證;
The PUT,DELETE,MKCOL,COPY and MOVE methods; 提交,刪除,MKCOL,複製和移動方法;
FLV streaming;FLV視頻流;
Speed limitation;速度限制;
Limitation of simultaneous connections or requests from one address.限制同個IP地址請求數量。
Embedded perl.嵌入式的Perl。
郵件代理服務器功能
用户重定向到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 模式下的 STARTTLSSTL支持。

nginx安裝

nginx模塊依賴性

gzip模塊需要 zlib

nginx編譯安裝包

Nginx在一些Linux發行版和BSD的各個變種版本的安裝包倉庫中都會有,通過各個系統自帶的軟件包管理方法即可安裝。需要注意的是,很多預先編譯好的安裝包都比較陳舊,大多數情況下還是推薦直接從源碼編譯。

nginx源代碼下載

特定平台的安裝和記錄
Nginx 在 Slackware 上的編譯安裝腳本
Nginx 在ubuntu和debian上的安裝及腳本,debian針對nginx包的官方下載站點
使用源代碼進行構建
Nginx 使用 Unix 下常用的 './configure && make && make install' 過程來編譯安裝。
configure腳本確定系統所具有一些特性,特別是 nginx 用來處理連接的方法。然後,它創建 Makefile 文件。
configure 支持下面的選項:
--prefix= - Nginx安裝路徑。如果沒有指定,默認為 /usr/local/nginx。
--sbin-path= - Nginx可執行文件安裝路徑。只能安裝時指定,如果沒有指定,默認為/sbin/nginx。
--conf-path= - 在沒有給定-c選項下默認的nginx.conf的路徑。如果沒有指定,默認為/conf/nginx.conf。
--pid-path= - 在nginx.conf中沒有指定pid指令的情況下,默認的nginx.pid的路徑。如果沒有指定,默認為 /logs/nginx.pid。
--lock-path= - nginx.lock文件的路徑。
--error-log-path= - 在nginx.conf中沒有指定error_log指令的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認為 /logs/error.log。
--http-log-path= - 在nginx.conf中沒有指定access_log指令的情況下,默認的訪問日誌的路徑。如果沒有指定,默認為 /logs/access.log。
--user= - 在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的用户。如果沒有指定,默認為 nobody。
--group= - 在nginx.conf中沒有指定group指令的情況下,默認的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-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 命令來檢查一下當前的選項列表。

nginx使用技巧

對於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反向代理實踐

nginx + substitutions 安裝
nginx 自帶一個Substitution模塊,但該模塊只能寫一行,所以才改用 substitutions
下面是安裝一些預備軟件(redhat系linux,包括:RHELFedora,Cent OS等)
  1. yum -y --noplugins install wget zip
  2. yum -y --noplugins install unzip
  3. yum -y --noplugins install gcc
  4. yum -y --noplugins install make
  5. yum -y --noplugins install pcre-devel
  6. yum -y --noplugins install openssl-devel
編譯軟件
  1. tar zxf nginx-1.0.8.tar.gz
  2. cd nginx-1.0.8
  3. ./configure ./configure --add-module=path/substitutions4nginx-read-only //注意這裏的path是相對應的真實路徑
  4. make
  5. make install
  6. 配置 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怎麼才能給用户顯示上傳進度嗎
答:(2017-04-26) 還沒有辦法關閉掉後端服務器的緩存。

nginx其他信息

1.Nginx Rewrite 基本標記(flags)複製內容到剪貼板代碼:last – 基本上都用這個Flag。
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
$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

nginx相關事件

2024年2月19日消息,核心開發者馬克西姆・杜寧(Maxim Dounin)近日發佈公告,因安全披露和修復漏洞優先級上的分歧,決定退出 Nginx 項目,並分叉推出 freenginx 項目 [15] 

nginx版本發佈

2017年07月11日,nginx-1.13.3主線版本發佈 [3] 
2017年08月08日,nginx-1.13.4主線版本發佈 [4] 
2017年09月05日,nginx-1.13.5主線版本發佈 [5] 
2017年10月10日,nginx-1.13.6主線版本發佈 [6] 
2017年11月21日,nginx-1.13.7主線版本發佈 [7] 
2017年12月26日,nginx-1.13.8主線版本發佈 [7] 
2018年02月20日,nginx-1.13.9主線版本發佈 [7] 
2018年03月20日,nginx-1.13.10主線版本發佈 [8] 
2018年04月03日,nginx-1.13.11主線版本發佈 [8] 
2018年04月10日,nginx-1.13.12主線版本發佈 [8] 
2018年04月17日,nginx-1.14.0 穩定版本發佈 [8] 
2018年06月05日,nginx-1.15.0 主線版本發佈 [8] 
2018年07月03日,nginx-1.15.1 主線版本發佈 [8] 
2018年07月24日,nginx-1.15.2 主線版本發佈 [8] 
2018年08月28日,nginx-1.15.3 主線版本發佈 [8] 
2019年06月25日,nginx-1.17.1 主線版本發佈 [8] 
2019年11月19日,nginx-1.17.6 主線版本發佈 [9] 
2019年12月24日,nginx-1.17.7 主線版本發佈 [9] 
2020年01月21日,nginx-1.17.8 主線版本發佈 [9] 
2020年03月03日,nginx-1.17.9 主線版本發佈 [9] 
2020年04月23日,nginx-1.18.0 穩定版本發佈 [9] 
2020年07月07日,nginx-1.19.1 主線版本發佈 [1] 
2020年08月11日,nginx-1.19.2 主線版本發佈 [10] 
2020年09月29日,nginx-1.19.3 主線版本發佈 [10] 
2020年10月27日,nginx-1.19.4 主線版本發佈 [10] 
2020年11月24日,nginx-1.19.5 主線版本發佈 [10] 
2020年12月15日,nginx-1.19.6 主線版本發佈 [10] 
2021年02月16日,nginx-1.19.7 主線版本發佈 [11] 
2021年03月09日,nginx-1.19.8 主線版本發佈 [11] 
2021年03月30日,nginx-1.19.9 主線版本發佈 [11] 
2021年04月13日,nginx-1.19.10 主線版本發佈 [11] 
2021年04月20日,nginx-1.20.0 穩定版發佈 [11] 
2021年05月25日,nginx-1.20.1 穩定版發佈,nginx-1.21.0主線版本發佈 [11] 
2021年05月27日,nginx-1.20.1 穩定版發佈,nginx-1.21.0主線版本發佈 [11] 
2021年07月06日,nginx-1.21.1主線版本發佈 [11] 
2021年08月31日,nginx-1.21.2主線版本發佈 [11] 
2021年09月07日,nginx-1.21.3主線版本發佈 [11] 
2021年11月02日,nginx-1.21.4主線版本發佈 [12] 
2021年11月16日,nginx-1.20.2 穩定版發佈 [12] 
2022年10月19日,nginx-1.22.1 穩定版發佈,nginx-1.23.2主線版本發佈 [14] 
參考資料
展開全部 收起