Nginx教學


Nginx[讀音:engine x]是HTTP和反向代理伺服器,郵件代理伺服器,以及Igor Sysoev最初編寫的通用TCP/UDP代理伺服器。在很長一段時間以來,它一直在許多負載重的俄羅斯網站上執行,包括:Yandex,Mail.Ru,VK和Rambler。 根據Netcraft的說法,Nginx在2017年3月份服務或代理了28.50%的最繁忙的網站。這裡有一些成功案例:Netflix,Wordpress.com,FastMail.FM。

原始碼和文件按照兩條BSD類許可證分發。
商業支援可從Nginx,Inc.獲得。

基本的HTTP伺服器功能

  • 提供靜態和索引檔案,自動索引; 開啟檔案描述符快取;
  • 加速反向代理與快取; 負載均衡和容錯;
  • 通過快取FastCGI,uwsgi,SCGI和memcached伺服器來加速支援; 負載均衡和容錯;
  • 模組化架構。 過濾器包括gzip,位元組範圍,分塊響應,XSLT,SSI和影象變換過濾器。 如果由代理或FastCGI/uwsgi/SCGI伺服器處理,則單頁內的多個SSI包含可以並行處理;
  • SSL和TLS SNI支援;
  • 支援具有加權和依賴關係優先順序的HTTP/2。

其他HTTP伺服器功能

  • 基於名稱和基於IP的虛擬伺服器;
  • 保持活動和管道連線的支援;
  • 存取紀錄檔格式,緩衝紀錄檔寫入,快速紀錄檔輪換和syslog紀錄檔記錄;
  • 3xx-5xx錯誤程式碼重定向;
  • 重寫模組:使用正規表示式更改URI;
  • 根據用戶端地址執行不同的功能;
  • 根據用戶端IP地址,密碼(HTTP Basic認證)和子請求結果進行存取控制;
  • HTTP參照的驗證
  • PUT,DELETE,MKCOL,COPY和MOVE方法;
  • FLV和MP4串流媒體;
  • 響應速度限制;
  • 限制來自一個地址的同時連線或請求的數量;
  • 基於IP的地理定位;
  • A/B測試;
  • 嵌入式Perl
  • nginScript。

郵件代理伺服器功能

  • 使用外部HTTP認證伺服器將使用者重定向到IMAP或POP3伺服器;
  • 使用外部HTTP認證伺服器進行使用者認證,並將連線重定向到內部SMTP伺服器;
  • 認證方式:
    • POP3:USER / PASS,APOP,AUTH LOGIN / PLAIN / CRAM-MD5;
    • IMAP:LOGIN,AUTH LOGIN / PLAIN / CRAM-MD5;
    • SMTP:AUTH LOGIN / PLAIN / CRAM-MD5;
  • SSL支援;
  • STARTTLS和STLS支援。

TCP/UDP代理伺服器功能

  • TCP和UDP的通用代理;
  • SSL和TLS SNI支援TCP;
  • 負載均衡和容錯;
  • 基於客戶地址的存取控制;
  • 根據用戶端地址執行不同的功能;
  • 限制來自一個地址的同時連線數;
  • 存取紀錄檔格式,緩衝紀錄檔寫入,快速紀錄檔輪換和syslog紀錄檔記錄;
  • 基於IP的地理定位;
  • A/B測試;
  • nginScript。

架構和可延伸性

  • 一個主和幾個工作進程; 工作進程在非特權使用者下執行;
  • 靈活組態;
  • 重新組態和升級可執行檔案,而不會中斷用戶端服務;
  • 支援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,可用資料數,錯誤程式碼;
  • 支援各種epoll功能,包括EPOLLRDHUP(Linux 2.6.17+,glibc 2.8+)和EPOLLEXCLUSIVE(Linux 4.5+,glibc 2.24+);
  • 支援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保持連線大約需要2.5M記憶體;
  • 資料複製操作保持最小。

經測試的作業系統和平台

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

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非常少的伺服器: Nginx 啟動特別容易,並且幾乎可以做到7*24不間斷執行,即使執行數個月也不需要重新啟動。你還能夠在 不間斷服務的情況下進行軟體版本的升級。