Nginx 之一:编译安装nginx 1.8.1 及配置
轉(zhuǎn)http://www.cnblogs.com/zhang-shijie/p/5294162.html
一:基介紹
? 官網(wǎng)地址www.nginx.org,nginx是由1994年畢業(yè)于俄羅斯國(guó)立莫斯科鮑曼科技大學(xué)的同學(xué)為俄羅斯rambler.ru公司開(kāi)發(fā)的,開(kāi)發(fā)工作最早從2002年開(kāi)始,第一次公開(kāi)發(fā)布時(shí)間是2004年10月4日,版本號(hào)是0.1.0
Nginx是單進(jìn)程單線程模型,即啟動(dòng)的工作進(jìn)程只有一個(gè)進(jìn)程響應(yīng)客戶端請(qǐng)求,不像apache可以在一個(gè)進(jìn)程內(nèi)啟動(dòng)多個(gè)線程響應(yīng)可請(qǐng)求,因此在內(nèi)存占用上比apache小的很多。Nginx維持一萬(wàn)個(gè)非活動(dòng)會(huì)話只要2.5M內(nèi)存。Nginx和Mysql是CPU密集型的,就是對(duì)CPU的占用比較大,默認(rèn)session在本地文件保存,支持將session保存在memcache,但是memcache默認(rèn)支持最大1M的課hash對(duì)象。
? nginx的版本分為開(kāi)發(fā)版、穩(wěn)定版和過(guò)期版,nginx以功能豐富著稱,它即可以作為http服務(wù)器,也可以作為反向代理服務(wù)器或者郵件服務(wù)器,能夠快速的響應(yīng)靜態(tài)網(wǎng)頁(yè)的請(qǐng)求,支持FastCGI/SSL/Virtual Host/URL Rwrite/Gzip/HTTP Basic Auth等功能,并且支持第三方的功能擴(kuò)展。
? nginx安裝可以使用yum或源碼安裝,推薦使用源碼,一是yum的版本比較舊,二是使用源碼可以自定義功能,方便業(yè)務(wù)的上的使用,源碼安裝需要提前準(zhǔn)備標(biāo)準(zhǔn)的編譯器,GCC的全稱是(GNU Compiler collection),其有GNU開(kāi)發(fā),并以GPL即LGPL許可,是自由的類UNIX即蘋(píng)果電腦Mac OS X操作系統(tǒng)的標(biāo)準(zhǔn)編譯器,因?yàn)镚CC原本只能處理C語(yǔ)言,所以原名為GNU C語(yǔ)言編譯器,后來(lái)得到快速發(fā)展,可以處理C++,Fortran,pascal,objective-C,java以及Ada等其他語(yǔ)言,此外還需要Automake工具,以完成自動(dòng)創(chuàng)建Makefile的工作,Nginx的一些模塊需要依賴第三方庫(kù),比如pcre(支持rewrite),zlib(支持gzip模塊)和openssl(支持ssl模塊)
二:安裝
1、環(huán)境準(zhǔn)備:先安裝準(zhǔn)備環(huán)境
yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel
gcc為GNU Compiler Collection的縮寫(xiě),可以編譯C和C++源代碼等,它是GNU開(kāi)發(fā)的C和C++以及其他很多種語(yǔ)言 的編譯器(最早的時(shí)候只能編譯C,后來(lái)很快進(jìn)化成一個(gè)編譯多種語(yǔ)言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。)gcc 在編譯C++源代碼的階段,只能編譯 C++ 源文件,而不能自動(dòng)和 C++ 程序使用的庫(kù)鏈接(編譯過(guò)程分為編譯、鏈接兩個(gè)階段,注意不要和可執(zhí)行文件這個(gè)概念搞混,相對(duì)可執(zhí)行文件來(lái)說(shuō)有三個(gè)重要的概念:編譯(compile)、鏈接(link)、加載(load)。源程序文件被編譯成目標(biāo)文件,多個(gè)目標(biāo)文件連同庫(kù)被鏈接成一個(gè)最終的可執(zhí)行文件,可執(zhí)行文件被加載到內(nèi)存中運(yùn)行)。因此,通常使用 g++ 命令來(lái)完成 C++ 程序的編譯和連接,該程序會(huì)自動(dòng)調(diào)用 gcc 實(shí)現(xiàn)編譯。gcc-c++也能編譯C源代碼,只不過(guò)把會(huì)把它當(dāng)成C++源代碼,后綴為.c的,gcc把它當(dāng)作是C程序,而g++當(dāng)作是c++程序;后綴為.cpp的,兩者都會(huì)認(rèn)為是c++程序,注意,雖然c++是c的超集,但是兩者對(duì)語(yǔ)法的要求是有區(qū)別的。automake是一個(gè)從Makefile.am文件自動(dòng)生成Makefile.in的工具。為了生成Makefile.in,automake還需用到perl,由于automake創(chuàng)建的發(fā)布完全遵循GNU標(biāo)準(zhǔn),所以在創(chuàng)建中不需要perl。libtool是一款方便生成各種程序庫(kù)的工具。pcre pcre-devel:在Nginx編譯需要 PCRE(Perl Compatible Regular Expression),因?yàn)镹ginx 的Rewrite模塊和HTTP 核心模塊會(huì)使用到PCRE正則表達(dá)式語(yǔ)法。zlip zlib-devel:nginx啟用壓縮功能的時(shí)候,需要此模塊的支持。openssl openssl-devel:開(kāi)啟SSL的時(shí)候需要此模塊的支持。??2、下載nginx 安裝包:? 官網(wǎng)地址:http://nginx.org/
截止得到當(dāng)前,最新的版本為1.8.1,在linux使用wget下載:
[root@Server1 ~]# wget http://nginx.org/download/nginx-1.8.1.tar.gz --2016-04-23 10:22:55-- http://nginx.org/download/nginx-1.8.1.tar.gz Resolving nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ... Connecting to nginx.org (nginx.org)|206.251.255.63|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 833473 (814K) [application/octet-stream] Saving to: ‘nginx-1.8.1.tar.gz.1’100%[==============================================================================================================>] 833,473 251KB/s in 3.2s 2016-04-23 10:23:00 (251 KB/s) - ‘nginx-1.8.1.tar.gz.1’ saved [833473/833473]3、解壓安裝包:
[root@Server1 ~]# tar xvf nginx-1.8.1.tar.gz [root@Server1 ~]# cd nginx-1.8.1 [root@Server1 nginx-1.8.1]$ ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src4、編譯nginx:make
編譯是為了檢查系統(tǒng)環(huán)境是否符合編譯安裝的要求,比如是否有g(shù)cc編譯工具,是否支持編譯參數(shù)當(dāng)中的模塊,并根據(jù)開(kāi)啟的參數(shù)等生成Makefile文件為下一步做準(zhǔn)備:
[root@Server1 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre結(jié)果如下:
5、生成腳本及配置文件:make
編譯步驟,根據(jù)Makefile文件生成相應(yīng)的模塊
[root@localhost nginx-1.9.3]# make
6、安裝:make install
[root@localhost nginx-1.9.3]# make install
創(chuàng)建目錄,并將生成的模塊和文件復(fù)制到相應(yīng)的目
備注:nginx完成安裝以后,有四個(gè)主要的目錄:
conf:保存nginx所有的配置文件,其中nginx.conf是nginx服務(wù)器的最核心最主要的配置文件,其他的.conf則是用來(lái)配置nginx相關(guān)的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params兩個(gè)文件,配置文件一般都有個(gè)樣板配置文件,是文件名.default結(jié)尾,使用的使用將其復(fù)制為并將default去掉即可。 html目錄中保存了nginx服務(wù)器的web文件,但是可以更改為其他目錄保存web文件,另外還有一個(gè)50x的web文件是默認(rèn)的錯(cuò)誤頁(yè)面提示頁(yè)面。 logs:用來(lái)保存nginx服務(wù)器的訪問(wèn)日志錯(cuò)誤日志等日志,logs目錄可以放在其他路徑,比如/var/logs/nginx里面。 sbin:保存nginx二進(jìn)制啟動(dòng)腳本,可以接受不同的參數(shù)以實(shí)現(xiàn)不同的功能。7、啟動(dòng):
將監(jiān)聽(tīng)端口改為8090,避免80端口沖突:
listen 8090;8、通過(guò)命令啟動(dòng)和關(guān)閉nginx:
[root@Server1 sbin]# /usr/local/nginx/sbin/nginx/nginx nginx: [emerg] getpwnam("nginx") failed #沒(méi)有nginx用戶[root@Server1 sbin]# /usr/local/nginx/sbin/nginx/nginx nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory) #目錄不存在[root@Server1 sbin]# /usr/local/nginx/sbin/nginx/nginx #直到?jīng)]有報(bào)錯(cuò),才算啟動(dòng)完成9、重讀配置文件和關(guān)閉服務(wù):
[root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx #啟動(dòng) 服務(wù) [root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx -s reload #不停止服務(wù)重讀配置文件 [root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx -s stop #停止服務(wù) #停止服務(wù)10.驗(yàn)證端口是否開(kāi)啟:
[root@Server1 sbin]# ps -ef | grep nginx root 13228 1 0 Apr23 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginx #nginx的主進(jìn)程,只有一個(gè)主進(jìn)程 nginx 13229 13228 0 Apr23 ? 00:00:00 nginx: worker process #nginx工作進(jìn)程,默認(rèn)只有一個(gè),可以通過(guò)修改nginx.conf中的worker_processes 1; 參數(shù)啟動(dòng)多個(gè)工作進(jìn)程 root 13295 1400 0 00:01 pts/0 00:00:00 grep --color=auto nginx[root@Server1 local]# lsof -i:8090 #顯示占用8090的進(jìn)程 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 13337 root 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN) nginx 13338 nginx 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN)11、通過(guò)給nginx的主進(jìn)程ID號(hào)發(fā)送信號(hào)啟動(dòng)或停止nginx:
獲取nginx主進(jìn)程號(hào)的辦法:
[root@Server1 nginx]# cat /var/run/nginx/nginx.pid #查看nginx的pid文件,此文件保存的就是nginx的主進(jìn)程id 13337 #次ID是隨機(jī)的,每次啟動(dòng)都不一樣的 [root@Server1 nginx]# ps -ef | grep nginx #過(guò)濾nginx的進(jìn)程號(hào) root 13337 1 0 00:05 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginx nginx 21568 13337 0 10:58 ? 00:00:00 nginx: worker process支持的信號(hào):
[root@Server1 nginx]# kill -QUIT 13337 #平緩關(guān)閉Nginx,即不再接受新的請(qǐng)求,但是等當(dāng)前請(qǐng)求處理完畢后再關(guān)閉Nginx。 [root@Server1 nginx]# kill -TERM 21665 #快速停止Nginx服務(wù) [root@Server1 nginx]# kill -HUP 21703 #使用新的配置文件啟動(dòng)進(jìn)程然后平緩?fù)V乖械膎ginx進(jìn)程,即平滑重啟。 [root@Server1 nginx]# kill -USR1 21703 #重新打開(kāi)配置文件,用于nginx 日志切割 日期切割的腳本: #!/bin/bash PID=`cat /var/run/nginx/nginx.pid` mv /var/log/nginx/access.log /var/log/nginx/`date +%Y_%m_%d:%H:%M:%S`.access.log kill -USR1 $PID [root@Server1 nginx]# kill -USR2 21703 #使用新版本的nginx文件啟動(dòng)服務(wù),然后在平緩?fù)V乖械膎ginx服務(wù),即平滑升級(jí)。 [root@Server1 nginx]# kill -WINCH 21703 #平滑停止nginx的工作進(jìn)程,用于nginx平滑升級(jí)。?
三:nginx 主配置文件:nginx.conf
3.1:默認(rèn)配置:配置文件默認(rèn)保存在path/conf當(dāng)中,默認(rèn)的配置文件為nginx.conf,以下是編譯安裝后的默認(rèn)配置:
[root@Server1 conf]# grep -v "#" nginx.conf | grep -v "^$"#全局生效,主要設(shè)置nginx的啟動(dòng)用戶/組,啟動(dòng)的工作進(jìn)程數(shù)量,Nginx的PID路徑,日志路徑等。 worker_processes 1; #默認(rèn)啟動(dòng)一個(gè)工作進(jìn)程 events { #events設(shè)置快,主要影響nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接,比如是否允許同時(shí)接受多個(gè)網(wǎng)絡(luò)連接,使用哪種事件驅(qū)動(dòng)模型處理請(qǐng)求,每個(gè)工作進(jìn)程可以同時(shí)支持的最大連接數(shù),是否開(kāi)啟對(duì)多工作進(jìn)程下的網(wǎng)絡(luò)連接進(jìn)行序列化等。worker_connections 1024; #設(shè)置nginx可以接受的最大并發(fā),多個(gè)進(jìn)程只和 } http { #http塊是Nginx服務(wù)器配置中的重要部分,緩存、代理和日志格式定義等絕大多數(shù)功能和第三方模塊都可以在這設(shè)置,http塊可以包含多個(gè)server塊,而一個(gè)server塊中又可以包含多個(gè)location塊,server塊可以配置文件引入、MIME-Type定義、日志自定義、是否啟用sendfile、連接超時(shí)時(shí)間和單個(gè)鏈接的請(qǐng)求上限等。include mime.types; #文件擴(kuò)展名與文件類型映射表default_type application/octet-stream; #默認(rèn)文件類型sendfile on; #是否調(diào)用 sendfile 函數(shù)(zero copy -->零copy方式)來(lái)輸出文件,普通應(yīng)用打開(kāi),可以大幅提升nginx的讀文件性能,如果服務(wù)器是下載的就需要關(guān)閉,keepalive_timeout 65; #長(zhǎng)連接超時(shí)時(shí)間,單位是秒server { #設(shè)置一個(gè)虛擬機(jī)主機(jī),可以包含自己的全局快,同時(shí)也可以包含多個(gè)locating模塊。比如本虛擬機(jī)監(jiān)聽(tīng)的端口、本虛擬機(jī)的名稱和IP配置,多個(gè)server 可以使用一個(gè)端口,比如都使用8090端口提供web服務(wù)、listen 8090; #server的全局配置,配置監(jiān)聽(tīng)的端口server_name localhost; #本server的名稱,當(dāng)訪問(wèn)此名稱的時(shí)候nginx會(huì)調(diào)用當(dāng)前serevr內(nèi)部的配置進(jìn)程匹配。location / { #location其實(shí)是server的一個(gè)指令,為nginx服務(wù)器提供比較多而且靈活的指令,都是在location中提現(xiàn)的,主要是基于nginx接受到的請(qǐng)求字符串,對(duì)用戶請(qǐng)求的UIL進(jìn)行匹配,并對(duì)特定的指令進(jìn)行處理,包括地址重定向、數(shù)據(jù)緩存和應(yīng)答控制等功能都是在這部分實(shí)現(xiàn),另外很多第三方模塊的配置也是在location模塊中配置。root html; #相當(dāng)于默認(rèn)頁(yè)面的目錄名稱,默認(rèn)是相對(duì)路徑,可以使用絕對(duì)路徑配置。index index.html index.htm;}error_page 500 502 503 504 /50x.html; #錯(cuò)誤頁(yè)面的文件名稱location = /50x.html { #location處理對(duì)應(yīng)的不同錯(cuò)誤碼的頁(yè)面定義到/50x.html,這個(gè)跟對(duì)應(yīng)其server中定義的目錄下。root html; #定義默認(rèn)頁(yè)面所在的目錄}} }3.2:配置nginx 主進(jìn)程的啟動(dòng)用戶和工作進(jìn)程數(shù):
user xxxx; #每一條指令都要以分號(hào)結(jié)尾 worker_processes 1; #可以指定啟動(dòng)的固定nginx進(jìn)程數(shù),或使用auto,auto是啟動(dòng)與當(dāng)前CPU 線程相同的進(jìn)程數(shù),如CPU是四核八線程的就啟動(dòng)八個(gè)進(jìn)程的Nginx工作進(jìn)程。3.3:綁定Nginx 工作進(jìn)程到不同的CPU上:
默認(rèn)Nginx是不進(jìn)行保定的,綁定并不能是當(dāng)前nginx進(jìn)程獨(dú)占以一核心CPU,但是可以保證此進(jìn)程不會(huì)運(yùn)行在其他核心上,這就極大減少了nginx 工作進(jìn)程在不同cpu上的跳轉(zhuǎn),減少了CPU對(duì)進(jìn)程的資源分配與回收,因此可以有效的提升nginx服務(wù)器的性能,配置如下:
[root@Server1 nginx]# grep process /proc/cpuinfo | wc -l #確認(rèn)CPU的核心數(shù)量 四個(gè)線程CPU的配置: worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;八個(gè)線程CPU的配置: worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;3.4:PID和錯(cuò)誤日志文件路徑:
#pid logs/nginx.pid; #可以指定絕對(duì)路徑 #error_log logs/error.log; #指定錯(cuò)誤日志路徑 #error_log logs/error.log notice; #指定一個(gè)日志記錄級(jí)別 #error_log logs/error.log info;支持的日志級(jí)別: 語(yǔ)法: error_log file [ debug | info | notice | warn | error | crit ] | [{ debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_mail | debug_mysql } ] 日志級(jí)別 = 錯(cuò)誤日志級(jí)別 | 調(diào)試日志級(jí)別; 或者 日志級(jí)別 = 錯(cuò)誤日志級(jí)別; 錯(cuò)誤日志的級(jí)別: emerg, alert, crit, error, warn, notic, info, debug, 調(diào)試日志的級(jí)別: debug_core, debug_alloc, debug_mutex, debug_event, debug_http, debug_mail, debug_mysqlerror_log 指令的日志級(jí)別配置分為錯(cuò)誤日志級(jí)別和調(diào)試日志級(jí)別,錯(cuò)誤日志只能設(shè)置一個(gè)級(jí)別,而且錯(cuò)誤日志必須書(shū)寫(xiě)在調(diào)試日志級(jí)別的前面,另外調(diào)試日志可以設(shè)置多個(gè)級(jí)別,其他配置方法可能無(wú)法滿足需求。?3.5:配置文件的引入:include
include file; #file是要導(dǎo)入的文件,支持相對(duì)路徑,一般在html目錄里面 導(dǎo)入一個(gè)conf文件,并配置不同主機(jī)名的頁(yè)面,編輯nginx.conf主配置文件: include /usr/local/nginx/conf.d/samsung.conf; #在最后一個(gè)大括號(hào)里面加入一項(xiàng),*是導(dǎo)入任何以conf結(jié)尾的配置文件在/usr/local/nginx/conf.d/創(chuàng)建一個(gè)samsung.conf,內(nèi)容如下: [root@Server1 nginx]# grep -v "#" conf.d/samsung.conf | grep -v "^$"server {listen 8090;server_name samsung.chinacloudapp.cn;location / {root html;index index1.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;} }?
轉(zhuǎn)載于:https://www.cnblogs.com/heavenhome/p/6860484.html
總結(jié)
以上是生活随笔為你收集整理的Nginx 之一:编译安装nginx 1.8.1 及配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苹果14涨价让国内黄牛狂喜:1年最好赚日
- 下一篇: Nginx命令大全