日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx完全教程

發布時間:2023/12/20 Nginx 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx完全教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Nginx完全教程(必讀)
Nginx 概述 HTTP基礎功能: · 處理靜態文件,索引文件以及自動索引; · 反向代理加速(無緩存),簡單的負載均衡和容錯; IXDBA.NET技術社區 · FastCGI,簡單的負載均衡和容錯; · 模塊化的結構。過濾器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI過濾器中,到同一個 proxy 或者 FastCGI 的多個子請求并發處理; · SSL 和 TLS SNI 支持; IMAP/POP3 代理服務功能: · 使用外部 HTTP 認證服務器重定向用戶到 IMAP/POP3 后端; · 使用外部 HTTP 認證服務器認證用戶后連接重定向到內部的 SMTP 后端; · 認證方法: o??????????????????????????????????????????????????????? POP3: POP3 USER/PASS, APOP, AUTH LOGIN PLAIN CRAM-MD5; o??????????????????????????????????????????????????????? IMAP: IMAP LOGIN; o??????????????????????????????????????????????????????? SMTP: AUTH LOGIN PLAIN CRAM-MD5; · SSL 支持; · 在 IMAP 和 POP3 模式下的 STARTTLS 和 STLS 支持; 支持的操作系統: · FreeBSD 3.x, 4.x, 5.x, 6.x i386; FreeBSD 5.x, 6.x amd64; · Linux 2.2, 2.4, 2.6 i386; Linux 2.6 amd64; · Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386; · MacOS X (10.4) PPC; 結構與擴展: · 一個主進程和多個工作進程。工作進程是單線程的,且不需要特殊授權即可運行; · 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 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不間斷運行,即使運行數個月也不需要重新啟動。你還能夠在 不間斷服務的情況下進行軟件版本的升級。 安裝Nginx 預先編譯好的安裝包 Nginx在一些Linux發行版和BSD的各個變種版本的安裝包倉庫中都會有,通過各個系統自帶的軟件包管理方法即可安裝。需要注意的是,很多預先編譯好的安裝包都比較陳舊,大多數情況下還是推薦直接從源碼編譯。 官方源代碼下載 點擊下載源代碼 使用源代碼進行構建 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 命令來檢查一下當前的選項列表。 示例 (最好能在同一行): ./configure \??????? --sbin-path=/usr/local/nginx/nginx \??????? --conf-path=/usr/local/nginx/nginx.conf \??????? --pid-path=/usr/local/nginx/nginx.pid \??????? --with-http_ssl_module \??????? --with-pcre=../pcre-4.4 \??????? --with-zlib=../zlib-1.1.3 Ubuntu/debian 上的示例,需要預先安裝 libgcrypt11-dev, libpcre3-dev 和 libssl-dev (選擇 --with-md5 或 --with-sha1 中的一個, 但不能都選; 在 debian 和 ubuntu 上, 它們應該都指向 /usr/lib) ./configure --with-openssl=/usr/lib/ssl/ --with-md5=/usr/lib Ubuntu Edgy 的一個 0.5.2 版本的 .deb 包可以在這里下載: nginx_0.5.2-1_i386.deb. (注: 根據 October 2006 message 的消息,md5 在一個現在不再使用的 http 緩存模塊中用到,而 sha1 用在一個未完成的 mysql 庫模塊,所以它們當前都不是必須的) 運行和控制 Nginx - 命令行參數和信號 不像許多其他軟件系統,Nginx 僅有數個命令行參數,完全通過配置文件來配置(想象一下)。 · 選項 · 示例 · 使用信號加載新的配置 · 平滑升級到新的二進制代碼 選項 -c </path/to/config> 為 Nginx 指定一個配置文件,來代替缺省的。 -t 不運行,而僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,并嘗試打開配置文件中所引用到的文件。 -v 顯示 nginx 的版本。 -V 顯示 nginx 的版本,編譯器版本和配置參數。 示例 /usr/bin/nginx -t -c ~/mynginx.conf 通過系統的信號控制 Nginx 可以使用信號系統來控制主進程。默認,nginx 將其主進程的 pid 寫入到 /usr/local/nginx/logs/nginx.pid 文件中。通過傳遞參數給 ./configure 或使用 pid 指令,來改變該文件的位置。 主進程可以處理以下的信號: TERM, INT
快速關閉 QUIT
從容關閉 HUP
重載配置
用新的配置開始新的工作進程
從容關閉舊的工作進程 USR1
重新打開日志文件 USR2
平滑升級可執行程序。 WINCH
從容關閉工作進程 盡管你不必自己操作工作進程,但是,它們也支持一些信號: TERM, INT
快速關閉 QUIT
從容關閉 USR1
重新打開日志文件 使用信號加載新的配置 Nginx 支持幾個信號,能在它運行時控制其操作。其中最普通的是 15 ,用來中止運行的進程: # ps aux | egrep '(PID|nginx)'USER?????? PID %CPU %MEM??? VSZ?? RSS TTY????? STAT START?? TIME COMMANDroot????? 2213? 0.0? 0.0?? 6784? 2036 ???????? Ss?? 03:01?? 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf # kill -15 2213 而最有趣的是能平滑改變 nginx 配置的選項(請注意,在重載前,要先測試一下配置文件): # nginx -t -c /etc/nginx/nginx.conf2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully # ps aux | egrep '(PID|nginx)' USER?????? PID %CPU %MEM??? VSZ?? RSS TTY????? STAT START?? TIME COMMAND root????? 2213? 0.0? 0.0?? 6784? 2036 ???????? Ss?? 03:01?? 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf # kill -HUP 2213 當 nginx 接收到 HUP 信號,它會嘗試先解析配置文件(如果指定配置文件,就使用指定的,否則使用默認的),成功的話,就應用新的配置文件(例如:重新打開日志文件或監聽的套接 字)。之后,nginx 運行新的工作進程并從容關閉舊的工作進程。通知工作進程關閉監聽套接字但是繼續為當前連接的客戶提供服務。所有客戶端的服務完成后,舊的工作進程被關閉。 如果新的配置文件應用失敗,nginx 將繼續使用舊的配置進行工作。 平滑升級到新的二進制代碼 你可以在不中斷服務的情況下 - 新的請求也不會丟失,使用新的 nginx 可執行程序替換舊的(當升級新版本或添加/刪除服務器模塊時)。 首先,使用新的可執行程序替換舊的(最好做好備份),然后,發送 USR2 (kill -USR2 pid)信號給主進程。主進程將重命名它的 .pid 文件為 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后執行新的可執行程序,依次啟動新的主進程和新的工作進程: PID? PPID USER??? %CPU?? VSZ WCHAN? COMMAND33126???? 1 root???? 0.0? 1164 pause? nginx: master process /usr/local/nginx/sbin/nginx33134 33126 nobody?? 0.0? 1368 kqread nginx: worker process (nginx) 33135 33126 nobody?? 0.0? 1380 kqread nginx: worker process (nginx) 33136 33126 nobody?? 0.0? 1368 kqread nginx: worker process (nginx) 36264 33126 root???? 0.0? 1148 pause? nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36266 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36267 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 在這時,兩個 nginx 實例會同時運行,一起處理輸入的請求。要逐步停止舊的實例,你必須發送 WINCH 信號給舊的主進程,然后,它的工作進程就將開始從容關閉: PID? PPID USER??? %CPU?? VSZ WCHAN? COMMAND33126???? 1 root???? 0.0? 1164 pause? nginx: master process /usr/local/nginx/sbin/nginx33135 33126 nobody?? 0.0? 1380 kqread nginx: worker process is shutting down (nginx) 36264 33126 root???? 0.0? 1148 pause? nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36266 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36267 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 一段時間后,舊的工作進程處理了所有已連接的請求后退出,就僅由新的工作進程來處理輸入的請求了: PID? PPID USER??? %CPU?? VSZ WCHAN? COMMAND33126???? 1 root???? 0.0? 1164 pause? nginx: master process /usr/local/nginx/sbin/nginx36264 33126 root???? 0.0? 1148 pause? nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36266 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36267 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 這時,因為舊的服務器還尚未關閉它監聽的套接字,所以,通過下面的幾步,你仍可以恢復舊的服務器: · 發送 HUP 信號給舊的主進程 - 它將在不重載配置文件的情況下啟動它的工作進程 · 發送 QUIT 信號給新的主進程,要求其從容關閉其工作進程 · 發送 TERM 信號給新的主進程,迫使其退出 · 如果因為某些原因新的工作進程不能退出,向其發送 KILL 信號 新的主進程退出后,舊的主進程會由移除 .oldbin 前綴,恢復為它的 .pid 文件,這樣,一切就都恢復到升級之前了。 如果嘗試升級成功,而你也希望保留新的服務器時,發送 QUIT 信號給舊的主進程使其退出而只留下新的服務器運行: PID? PPID USER??? %CPU?? VSZ WCHAN? COMMAND??? 36264???? 1 root???? 0.0? 1148 pause? nginx: master process /usr/local/nginx/sbin/nginx??? 36265 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36266 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) 36267 36264 nobody?? 0.0? 1364 kqread nginx: worker process (nginx) Nginx 配置優化 hash表 Ngnix使用hash表來協助完成請求的快速處理。 考慮到保存鍵及其值的hash表存儲單元的大小不至于超出設定參數(hash bucket size), 在啟動和每次重新配置時,Nginx為hash表選擇盡可能小的尺寸。 直到hash表超過參數(hash max size)的大小才重新進行選擇. 對于大多數hash表都有指令來修改這些參數。例如,保存服務器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所 控制的。參數hash bucket size總是等于hash表的大小,并且是一路處理器緩存大小的倍數。在減少了在內存中的存取次數后,使在處理器中加速查找hash表鍵值成為可能。如果 hash bucket size等于一路處理器緩存的大小,那么在查找鍵的時候,最壞的情況下在內存中查找的次數為2。第一次是確定存儲單元的地址,第二次是在存儲單元中查找鍵 值。因此,如果Nginx給出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一個參數的大小. 事件模型 Nginx支持如下處理連接的方法(I/O復用方法),這些方法可以通過use指令指定。 · select - 標準方法。 如果當前平臺沒有更有效的方法,它是編譯時默認的方法。你可以使用配置參數 --with-select_module 和 --without-select_module 來啟用或禁用這個模塊。 · poll - 標準方法。 如果當前平臺沒有更有效的方法,它是編譯時默認的方法。你可以使用配置參數 --with-poll_module 和 --without-poll_module 來啟用或禁用這個模塊。 · kqueue - 高效的方法,使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用雙處理器的MacOS X系統使用kqueue可能會造成內核崩潰。 · epoll - 高效的方法,使用于Linux內核2.6版本及以后的系統。在某些發行版本中,如SuSE 8.2, 有讓2.4版本的內核支持epoll的補丁。 · rtsig - 可執行的實時信號,使用于Linux內核版本2.2.19以后的系統。默認情況下整個系統中不能出現大于1024個POSIX實時(排隊)信號。這種情況對于高負載的服務器來說是低效的;所以有必要通過調節內核參數 /proc/sys/kernel/rtsig-max 來增加隊列的大小。可是從Linux內核版本2.6.6-mm2開始, 這個參數就不再使用了,并且對于每個進程有一個獨立的信號隊列,這個隊列的大小可以用 RLIMIT_SIGPENDING 參數調節。當這個隊列過于擁塞,nginx就放棄它并且開始使用 poll 方法來處理連接直到恢復正常。 · /dev/poll - 高效的方法,使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+. · eventport - 高效的方法,使用于 Solaris 10. 為了防止出現內核崩潰的問題, 有必要安裝 這個 安全補丁。

轉載于:https://blog.51cto.com/yixiantian/159287

總結

以上是生活随笔為你收集整理的Nginx完全教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。