Nginx是一款輕量級的Web 服務(wù)器/反向代理服務(wù)器及電子郵件代理服務(wù)器,并在一個BSD-like 協(xié)議下發(fā)行
錯那網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。其特點是占有內(nèi)存少,并發(fā)能力強,事實上nginx的并發(fā)能力確實在同類型的網(wǎng)頁伺服器中表現(xiàn)較好.
Nginx由內(nèi)核和模塊組成
內(nèi)核的設(shè)計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block,而在這個location中所配置的每個指令將會啟動不同的模塊去完成相應(yīng)的工作。
Nginx的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊, HTTP模塊、EVENT模塊和MAIL模塊等屬于核心模塊,HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊屬于基本模塊,而HTTP Upstream Request Hash模塊、Notice模塊和HTTP Access Key模塊屬于第三方模塊,用戶根據(jù)自己的需要開發(fā)的模塊都屬于第三方模塊。正是有了這么多模塊的支撐,Nginx的功能才會如此強大。
Nginx的模塊從功能上分為三類:
Handlers此類模塊直接處理請求,并進(jìn)行輸出內(nèi)容和修改headers信息等操作。handlers處理器模塊一般只能有一個。
Filters 此類模塊主要對其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由Nginx輸出。
Proxies 就是Nginx的HTTP Upstream之類的模塊,這些模塊主要與后端一些服務(wù)比如fastcgi等操作交互,實現(xiàn)服務(wù)代理和負(fù)載均衡等功能。
在工作方式上,Nginx分為單工作進(jìn)程和多工作進(jìn)程兩種模式。在單工作進(jìn)程模式下,除主進(jìn)程外,還有一個工作進(jìn)程,工作進(jìn)程是單線程的;在多工作進(jìn)程模式下,每個工作進(jìn)程包含多個線程。Nginx默認(rèn)為單工作進(jìn)程模式。
Nginx的模塊直接被編譯進(jìn)Nginx,因此屬于靜態(tài)編譯方式。
啟動Nginx后,Nginx的模塊被自動加載,不像在Apache一樣,首先將模塊編譯為一個so文件,然后在配置文件中指定是否進(jìn)行加載。在解析配置文件時,Nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。
Nginx安裝:
./configure
make
make install
默認(rèn)安裝的路徑是/usr/local/nginx
更多的安裝配置
./configure --prefix=/usr/local/nginx
--with-openssl=/usr/include (啟用ssl)
--with-pcre=/usr/include/pcre/ (啟用正規(guī)表達(dá)式)
--with-http_stub_status_module (安裝可以查看nginx狀態(tài)的程序)
--with-http_memcached_module (啟用memcache緩存)
--with-http_rewrite_module (啟用支持url重寫)
Nginx配置注解:
#運行用戶 usernobody; #啟動進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等 worker_processes1; #全局錯誤日志及PID文件 #error_loglogs/error.log; #error_loglogs/error.lognotice; #error_loglogs/error.loginfo; #pidlogs/nginx.pid; #工作模式及連接數(shù)上限 events{ #epoll是多路復(fù)用IO(I/OMultiplexing)中的一種方式, #僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能 useepoll; #單個后臺workerprocess進(jìn)程的并發(fā)鏈接數(shù) worker_connections1024; #并發(fā)總數(shù)是worker_processes和worker_connections的乘積 #即max_clients=worker_processes*worker_connections #在設(shè)置了反向代理的情況下,max_clients=worker_processes*worker_connections/4為什么 #為什么上面反向代理要除以4,應(yīng)該說是一個經(jīng)驗值 #根據(jù)以上條件,正常情況下的NginxServer可以應(yīng)付的連接數(shù)為:4*8000=32000 #worker_connections值的設(shè)置跟物理內(nèi)存大小有關(guān) #因為并發(fā)受IO約束,max_clients的值須小于系統(tǒng)可以打開的文件數(shù) #而系統(tǒng)可以打開的文件數(shù)和內(nèi)存大小成正比,一般1GB內(nèi)存的機(jī)器上可以打開的文件數(shù)大約是10萬左右 #我們來看看360M內(nèi)存的VPS可以打開的文件句柄數(shù)是多少: #$cat/proc/sys/fs/file-max #輸出34336 #32000<34336,即并發(fā)連接總數(shù)小于系統(tǒng)可以打開的文件句柄總數(shù),這樣就在操作系統(tǒng)可以承受的范圍之內(nèi) #所以worker_connections需根據(jù)worker_processes進(jìn)程數(shù)目和系統(tǒng)可以打開文件總數(shù)進(jìn)行適當(dāng)?shù)剡M(jìn)行設(shè)置 #使得并發(fā)總數(shù)小于操作系統(tǒng)可以打開的文件數(shù)目 #其實質(zhì)也就是根據(jù)主機(jī)的物理CPU和內(nèi)存進(jìn)行配置 #當(dāng)然,理論上的并發(fā)總數(shù)可能會和實際有所偏差,因為主機(jī)還有其他的工作進(jìn)程需要消耗系統(tǒng)資源。 #ulimit-SHn65535 } http{ #設(shè)定mime類型,類型由mime.type文件定義 includemime.types; default_typeapplication/octet-stream; #設(shè)定日志格式 log_formatmain\'$remote_addr-$remote_user[$time_local]"$request"\' \'$status$body_bytes_sent"$http_referer"\' \'"$http_user_agent""$http_x_forwarded_for"\'; access_loglogs/access.logmain; #sendfile指令指定nginx是否調(diào)用sendfile函數(shù)(zerocopy方式)來輸出文件, #對于普通應(yīng)用,必須設(shè)為on, #如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off, #以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime. sendfileon; #tcp_nopushon; #連接超時時間 #keepalive_timeout0; keepalive_timeout65; tcp_nodelayon; #開啟gzip壓縮 gzipon; gzip_disable"MSIE[1-6]."; #設(shè)定請求緩沖 client_header_buffer_size128k; large_client_header_buffers4128k; #設(shè)定虛擬主機(jī)配置 server{ #偵聽80端口 listen80; #定義使用www.nginx.cn訪問 server_namewww.nginx.cn; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置 roothtml; #設(shè)定本虛擬主機(jī)的訪問日志 access_loglogs/nginx.access.logmain; #默認(rèn)請求 location/{ #定義首頁索引文件的名稱 indexindex.phpindex.htmlindex.htm; } #定義錯誤提示頁面 error_page500502503504/50x.html; location=/50x.html{ } #靜態(tài)文件,nginx自己處理 location~^/(images|javascript|js|css|flash|media|static)/{ #過期30天,靜態(tài)文件不怎么更新,過期可以設(shè)大一點, #如果頻繁更新,則可以設(shè)置得小一點。 expires30d; } #PHP腳本請求全部轉(zhuǎn)發(fā)到FastCGI處理.使用FastCGI默認(rèn)配置. location~.php${ fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; } #禁止訪問.htxxx文件 location~/.ht{ denyall; } }}
configure 支持下面的選項:
--prefix=
--sbin-path=
--conf-path=
--pid-path=
--lock-path=
--error-log-path=
--http-log-path=
--user=
--group=
--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的模式,底層實現(xiàn)與SELECT基本相 同,都是采用輪訓(xùn)方法) SELECT模式將是默認(rèn)安裝模式
--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請求。這個模塊需要已經(jīng)安裝了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 執(zhí)行文件的路徑
--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 預(yù)處理器的路徑
--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" 配置指令中的正則表達(dá)式也需要 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- 啟用調(diào)試日志
--add-module=PATH- Add in a third-party module found in directory PATH
在不同版本間,選項可能會有些許變化,請總是使用./configure --help命令來檢查一下當(dāng)前的選項列表。
參考文獻(xiàn):
Nginx安裝配置簡介:http://www.blogjava.net/cenly60/archive/2008/12/12/245965.html
Nginx基本配置與參數(shù)說明:http://www.nginx.cn/76.html
Nginx Confighttp://hi.baidu.com/dc_life/item/c989143f5e1f7789b711db58