-
nginx
鎖定
- 外文名
- Nginx
- 別 名
- engine x
- 軟件許可
- BSD許可
nginx優點
Nginx 可以在大多數 Unix Linux OS 上編譯運行,並有 Windows 移植版。 Nginx 的1.20.0穩定版已經於2021年4月20日發佈,一般情況下,對於新建站點,建議使用最新穩定版作為生產版本,已有站點的升級急迫性不高。Nginx 的源代碼使用 2-clause BSD-like license。
在連接高併發的情況下,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,則這項處理可以並行運行,而不需要相互等待。
nginx代碼
Nginx代碼完全用C語言從頭寫成,已經移植到許多體系結構和操作系統,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函數庫,並且除了zlib、PCRE和OpenSSL之外,標準模塊只使用系統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;
- HP-UX 11.31 / ia64;
- Mac OS X / ppc, i386;
- Windows XP, Windows Server 2003,Windows 10
結構與擴展
一個主進程和多個工作進程。工作進程是單線程的,且不需要特殊授權即可運行;
kqueue (FreeBSD 4.1+),epoll (Linux 2.6+),rt signals (Linux 2.2.19+),/dev/poll (Solaris 7 11/99+),select,以及 poll 支持;
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 支持;
使用外部 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:驗證方法:
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 支持;
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文件的路徑。
--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.
--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-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
--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要好? 反之亦然。
依照 [NginxImapProxyExample] 開始配置. 關於不同配置參數的具體信息,請查看 [NginxMailCoreModule] 頁。
示例1: 用運行於apache上的php腳本做後端驗證
某些功能不工作
(URL重寫,代理,路徑,...)
例如:如URL重寫(rewrite)不工作了或者是unix的路徑(/$PATH)的問題云云...
有沒有其它類似的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怎麼才能給用户顯示上傳進度嗎
答:(2017-04-26) 還沒有辦法關閉掉後端服務器的緩存。
nginx其他信息
1.Nginx Rewrite 基本標記(flags)複製內容到剪貼板代碼:last – 基本上都用這個Flag。
break – 中止Rewrite,不在繼續匹配
redirect – 返回臨時重定向的HTTP狀態302
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
nginx相關事件
2024年2月19日消息,核心開發者馬克西姆・杜寧(Maxim Dounin)近日發佈公告,因安全披露和修復漏洞優先級上的分歧,決定退出 Nginx 項目,並分叉推出 freenginx 項目。
[15]
nginx版本發佈
- 參考資料
-
- 1. nginx: download .nginx news.2020-07-07[引用日期2020-07-10]
- 2. Nginx教程 .W3Cschool[引用日期2017-07-31]
- 3. Nginx版本信息 .Nginx官網[引用日期2017-07-31]
- 4. nginx news .nginx 官網[引用日期2017-08-31]
- 5. Nginx 版本信息 .nginx 官網.2017-09-05[引用日期2017-09-09]
- 6. Nginx 版本信息 .Nginx[引用日期2017-11-07]
- 7. Nginx 版本信息. .nginx 官網.2017-11-21[引用日期2017-12-01]
- 8. Nginx 版本信息 .Nginx.2019-06-25[引用日期2019-07-19]
- 9. Nginx 版本信息 .Nginx.2020-03-12[引用日期2020-03-26]
- 10. nginx news: 2020 .nginx 官網.2020-12-20[引用日期2021-09-26]
- 11. nginx news: 2021 .nginx 官網.2021-09-20[引用日期2021-09-30]
- 12. nginx news .nginx 官網.2020-11-20[引用日期2021-12-19]
- 13. 又拍雲Open Talk:OpenResty最佳實踐 .中國日報網[引用日期2022-11-07]
- 14. nginx news .nginx 官網.2022-10-19[引用日期2023-03-16]
- 15. 全球最大 Web 服務器 Nginx 出現動盪:核心開發者因安全分歧出走,啓動分叉項目 .IT之家.2024-02-19[引用日期2024-02-19]
- 收起