Nginx 之一:編譯安裝nginx 1.8.1 及配置

轉http://www.cnblogs.com/zhang-shijie/p/5294162.html

一:基介紹

? 官網地址www.nginx.org,nginx是由1994年畢業于俄羅斯國立莫斯科鮑曼科技大學的同學為俄羅斯rambler.ru公司開發的,開發工作最早從2002年開始,第一次公開發布時間是2004年10月4日,版本號是0.1.0

 Nginx是單進程單線程模型,即啟動的工作進程只有一個進程響應客戶端請求,不像apache可以在一個進程內啟動多個線程響應可請求,因此在內存占用上比apache小的很多。Nginx維持一萬個非活動會話只要2.5M內存。Nginx和Mysql是CPU密集型的,就是對CPU的占用比較大,默認session在本地文件保存,支持將session保存在memcache,但是memcache默認支持最大1M的課hash對象。

? nginx的版本分為開發版、穩定版和過期版,nginx以功能豐富著稱,它即可以作為http服務器,也可以作為反向代理服務器或者郵件服務器,能夠快速的響應靜態網頁的請求,支持FastCGI/SSL/Virtual Host/URL Rwrite/Gzip/HTTP Basic Auth等功能,并且支持第三方的功能擴展。

? nginx安裝可以使用yum或源碼安裝,推薦使用源碼,一是yum的版本比較舊,二是使用源碼可以自定義功能,方便業務的上的使用,源碼安裝需要提前準備標準的編譯器,GCC的全稱是(GNU Compiler collection),其有GNU開發,并以GPL即LGPL許可,是自由的類UNIX即蘋果電腦Mac OS X操作系統的標準編譯器,因為GCC原本只能處理C語言,所以原名為GNU C語言編譯器,后來得到快速發展,可以處理C++,Fortran,pascal,objective-C,java以及Ada等其他語言,此外還需要Automake工具,以完成自動創建Makefile的工作,Nginx的一些模塊需要依賴第三方庫,比如pcre(支持rewrite),zlib(支持gzip模塊)和openssl(支持ssl模塊)

二:安裝

1、環境準備:先安裝準備環境

yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel

gcc為GNU Compiler Collection的縮寫,可以編譯C和C++源代碼等,它是GNU開發的C和C++以及其他很多種語言 的編譯器(最早的時候只能編譯C,后來很快進化成一個編譯多種語言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。)gcc 在編譯C++源代碼的階段,只能編譯 C++ 源文件,而不能自動和 C++ 程序使用的庫鏈接(編譯過程分為編譯、鏈接兩個階段,注意不要和可執行文件這個概念搞混,相對可執行文件來說有三個重要的概念:編譯(compile)、鏈接(link)、加載(load)。源程序文件被編譯成目標文件,多個目標文件連同庫被鏈接成一個最終的可執行文件,可執行文件被加載到內存中運行)。因此,通常使用 g++ 命令來完成 C++ 程序的編譯和連接,該程序會自動調用 gcc 實現編譯。gcc-c++也能編譯C源代碼,只不過把會把它當成C++源代碼,后綴為.c的,gcc把它當作是C程序,而g++當作是c++程序;后綴為.cpp的,兩者都會認為是c++程序,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。automake是一個從Makefile.am文件自動生成Makefile.in的工具。為了生成Makefile.in,automake還需用到perl,由于automake創建的發布完全遵循GNU標準,所以在創建中不需要perl。libtool是一款方便生成各種程序庫的工具。pcre pcre-devel:在Nginx編譯需要 PCRE(Perl Compatible Regular Expression),因為Nginx 的Rewrite模塊和HTTP 核心模塊會使用到PCRE正則表達式語法。zlip zlib-devel:nginx啟用壓縮功能的時候,需要此模塊的支持。openssl openssl-devel:開啟SSL的時候需要此模塊的支持。

??2、下載nginx 安裝包:? 官網地址:http://nginx.org/

截止得到當前,最新的版本為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.1100%[==============================================================================================================>] 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  src

4、編譯nginx:make

編譯是為了檢查系統環境是否符合編譯安裝的要求,比如是否有gcc編譯工具,是否支持編譯參數當中的模塊,并根據開啟的參數等生成Makefile文件為下一步做準備:

[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

結果如下:

5、生成腳本及配置文件:make

編譯步驟,根據Makefile文件生成相應的模塊

[root@localhost nginx-1.9.3]# make

6、安裝:make install

[root@localhost nginx-1.9.3]# make install

創建目錄,并將生成的模塊和文件復制到相應的目

備注:nginx完成安裝以后,有四個主要的目錄:

conf:保存nginx所有的配置文件,其中nginx.conf是nginx服務器的最核心最主要的配置文件,其他的.conf則是用來配置nginx相關的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params兩個文件,配置文件一般都有個樣板配置文件,是文件名.default結尾,使用的使用將其復制為并將default去掉即可。
html目錄中保存了nginx服務器的web文件,但是可以更改為其他目錄保存web文件,另外還有一個50x的web文件是默認的錯誤頁面提示頁面。
logs:用來保存nginx服務器的訪問日志錯誤日志等日志,logs目錄可以放在其他路徑,比如/var/logs/nginx里面。
sbin:保存nginx二進制啟動腳本,可以接受不同的參數以實現不同的功能。

7、啟動:

將監聽端口改為8090,避免80端口沖突:

listen       8090;

8、通過命令啟動和關閉nginx:

[root@Server1 sbin]# /usr/local/nginx/sbin/nginx/nginx
nginx: [emerg] getpwnam("nginx") failed  #沒有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  #直到沒有報錯,才算啟動完成

9、重讀配置文件和關閉服務:

[root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx  #啟動 服務
[root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx   -s  reload  #不停止服務重讀配置文件
[root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx -s stop #停止服務  #停止服務

10.驗證端口是否開啟:

[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的主進程,只有一個主進程
nginx    13229 13228  0 Apr23 ?        00:00:00 nginx: worker  process #nginx工作進程,默認只有一個,可以通過修改nginx.conf中的worker_processes  1; 參數啟動多個工作進程
root     13295  1400  0 00:01 pts/0    00:00:00 grep --color=auto nginx[root@Server1 local]# lsof -i:8090  #顯示占用8090的進程
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、通過給nginx的主進程ID號發送信號啟動或停止nginx:

獲取nginx主進程號的辦法:

[root@Server1 nginx]# cat /var/run/nginx/nginx.pid   #查看nginx的pid文件,此文件保存的就是nginx的主進程id
13337  #次ID是隨機的,每次啟動都不一樣的
[root@Server1 nginx]# ps -ef   | grep nginx  #過濾nginx的進程號
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

支持的信號:

[root@Server1 nginx]# kill  -QUIT 13337  #平緩關閉Nginx,即不再接受新的請求,但是等當前請求處理完畢后再關閉Nginx。
[root@Server1 nginx]# kill  -TERM  21665 #快速停止Nginx服務
[root@Server1 nginx]# kill  -HUP 21703 #使用新的配置文件啟動進程然后平緩停止原有的nginx進程,即平滑重啟。 
[root@Server1 nginx]# kill -USR1 21703   #重新打開配置文件,用于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文件啟動服務,然后在平緩停止原有的nginx服務,即平滑升級。
[root@Server1 nginx]# kill -WINCH  21703  #平滑停止nginx的工作進程,用于nginx平滑升級。

?

三:nginx 主配置文件:nginx.conf

3.1:默認配置:配置文件默認保存在path/conf當中,默認的配置文件為nginx.conf,以下是編譯安裝后的默認配置:

[root@Server1 conf]# grep -v "#" nginx.conf | grep -v  "^$"#全局生效,主要設置nginx的啟動用戶/組,啟動的工作進程數量,Nginx的PID路徑,日志路徑等。
worker_processes  1;   #默認啟動一個工作進程
events {   #events設置快,主要影響nginx服務器與用戶的網絡連接,比如是否允許同時接受多個網絡連接,使用哪種事件驅動模型處理請求,每個工作進程可以同時支持的最大連接數,是否開啟對多工作進程下的網絡連接進行序列化等。worker_connections  1024;   #設置nginx可以接受的最大并發,多個進程只和
}
http {   #http塊是Nginx服務器配置中的重要部分,緩存、代理和日志格式定義等絕大多數功能和第三方模塊都可以在這設置,http塊可以包含多個server塊,而一個server塊中又可以包含多個location塊,server塊可以配置文件引入、MIME-Type定義、日志自定義、是否啟用sendfile、連接超時時間和單個鏈接的請求上限等。include       mime.types;  #文件擴展名與文件類型映射表default_type  application/octet-stream; #默認文件類型sendfile        on; #是否調用 sendfile 函數(zero copy -->零copy方式)來輸出文件,普通應用打開,可以大幅提升nginx的讀文件性能,如果服務器是下載的就需要關閉,keepalive_timeout  65;  #長連接超時時間,單位是秒server { #設置一個虛擬機主機,可以包含自己的全局快,同時也可以包含多個locating模塊。比如本虛擬機監聽的端口、本虛擬機的名稱和IP配置,多個server 可以使用一個端口,比如都使用8090端口提供web服務、listen       8090;  #server的全局配置,配置監聽的端口server_name  localhost;  #本server的名稱,當訪問此名稱的時候nginx會調用當前serevr內部的配置進程匹配。location / {  #location其實是server的一個指令,為nginx服務器提供比較多而且靈活的指令,都是在location中提現的,主要是基于nginx接受到的請求字符串,對用戶請求的UIL進行匹配,并對特定的指令進行處理,包括地址重定向、數據緩存和應答控制等功能都是在這部分實現,另外很多第三方模塊的配置也是在location模塊中配置。root   html;  #相當于默認頁面的目錄名稱,默認是相對路徑,可以使用絕對路徑配置。index  index.html index.htm;}error_page   500 502 503 504  /50x.html;  #錯誤頁面的文件名稱location = /50x.html {  #location處理對應的不同錯誤碼的頁面定義到/50x.html,這個跟對應其server中定義的目錄下。root   html;   #定義默認頁面所在的目錄}}
}

3.2:配置nginx 主進程的啟動用戶和工作進程數:

user  xxxx;   #每一條指令都要以分號結尾
worker_processes  1; #可以指定啟動的固定nginx進程數,或使用auto,auto是啟動與當前CPU 線程相同的進程數,如CPU是四核八線程的就啟動八個進程的Nginx工作進程。

3.3:綁定Nginx 工作進程到不同的CPU上:

  默認Nginx是不進行保定的,綁定并不能是當前nginx進程獨占以一核心CPU,但是可以保證此進程不會運行在其他核心上,這就極大減少了nginx 工作進程在不同cpu上的跳轉,減少了CPU對進程的資源分配與回收,因此可以有效的提升nginx服務器的性能,配置如下:

[root@Server1 nginx]# grep process /proc/cpuinfo  | wc -l #確認CPU的核心數量
四個線程CPU的配置:
worker_processes  4; 
worker_cpu_affinity 0001 0010 0100 1000;八個線程CPU的配置:
worker_processes  8; 
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

3.4:PID和錯誤日志文件路徑:

#pid        logs/nginx.pid;   #可以指定絕對路徑
#error_log  logs/error.log;  #指定錯誤日志路徑
#error_log  logs/error.log  notice;  #指定一個日志記錄級別
#error_log  logs/error.log  info;支持的日志級別:
語法:
error_log file [ debug | info | notice | warn | error | crit ]  | [{  debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_mail | debug_mysql } ]
日志級別 = 錯誤日志級別 | 調試日志級別; 或者
日志級別 = 錯誤日志級別;
錯誤日志的級別: emerg, alert, crit, error, warn, notic, info, debug, 
調試日志的級別: debug_core, debug_alloc, debug_mutex, debug_event, debug_http, debug_mail, debug_mysqlerror_log 指令的日志級別配置分為錯誤日志級別和調試日志級別,錯誤日志只能設置一個級別,而且錯誤日志必須書寫在調試日志級別的前面,另外調試日志可以設置多個級別,其他配置方法可能無法滿足需求。

?3.5:配置文件的引入:include

include file;  #file是要導入的文件,支持相對路徑,一般在html目錄里面
導入一個conf文件,并配置不同主機名的頁面,編輯nginx.conf主配置文件:
include  /usr/local/nginx/conf.d/samsung.conf;  #在最后一個大括號里面加入一項,*是導入任何以conf結尾的配置文件在/usr/local/nginx/conf.d/創建一個samsung.conf,內容如下:
[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;}
}

?

轉載于:https://www.cnblogs.com/heavenhome/p/6860484.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254583.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PI校正環節的程序實現推導過程

PI校正環節在經典控制論中非常有用,特別是對負反饋控制系統,基本上都有PI校正環節。1.下面分別說明比例環節和積分環節的作用,以階躍信號為例。①比例環節單獨作用以上分析說明,若只有比例環節的控制系統,階躍響應也是…

XML文檔注釋(C#)

目錄XML文檔編譯器識別的標記添加XLM注釋的方法添加XLM注釋的例子XML文檔 C#可以根據特定的注釋自動創建XML格式的文檔說明。 這些注釋都是單行注釋&#xff0c;但都以三條斜杠開頭 編譯器識別的標記 標記說明<C>把行中的文本標記為代碼&#xff0c;例如<c>int …

vs里根據json快速創建對應類的方法

有時候,我們在調用別人接口的時候,服務端返回了一個json格式的字符串,我們要獲取json里面的數據的話一般有兩種方式: 1.通過正則 2.反序列化成一個對象 第一種方式這里不再多說,主要說一下第二種,(為什么呢&#xff0c;你看到后面 你也會喜歡上第二種) 有人肯定會說, json字符串…

德魯克的《卓有成效的管理者》

是一本很好的書&#xff0c;對我有諸多的啟發&#xff0c;這本書我在短期內連看兩遍呢。 現將一些我覺得有啟發性的句子發給大家分享。 1. 一個人的有效性&#xff0c;與他的智力、想象力或知識之間&#xff0c;幾乎沒有太大的關聯。有才能的人往往最為無效&#xff0c;因為他們…

人工智能之基于face_recognition的人臉檢測與識別

不久乘高鐵出行&#xff0c;看見高鐵火車站已經實現了“刷臉進站”&#xff0c;而且效率很高&#xff0c;很感興趣&#xff0c;今天抽時間研究一下&#xff0c;其實沒那么復雜。 我基本上是基于https://github.com/ageitgey/face_recognition上的資料和源碼做一些嘗試和試驗。 …

iOS 升級https的方案選擇

我的選擇是將UIWebView統一替換為WKWebView WKWebView AFN SDWebImage https的支持之前的博客都有涉及轉載于:https://www.cnblogs.com/Jusive/p/6867531.html

預處理指令(C#)

目錄預處理指令簡介#define、#undef#if、#elif、#else、#endif#warning、#error#region、#endregion#line、#line default#pragma預處理指令簡介 微軟對預處理指令解釋鏈接 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives/index…

NSWindowController的初始化創建代碼

-(PRAboutWindowController*)aboutCtrl{ if(_aboutCtrl nil){ _aboutCtrl [[PRAboutWindowController alloc]initWithWindowNibName:"PRAboutWindowController"]; } return _aboutCtrl ; } 轉載于:https://www.cnblogs.com/PJXWang/p/5816675.html

對CMMI3的學習和思考

原文出處&#xff1a; http://tech.it168.com/m/2007-08-02/200708020957750.shtml本文請勿轉載。近來筆者所在公司正在為過CMMI3做各種準備&#xff0c;對公司的員工進行了一些相關的培訓&#xff0c;作為項目管理人員的我&#xff0c;在學習CMMI3的過程中&#xff0c;也有了自…

Python3抓取糗百、不得姐

?點擊關注 異步圖書&#xff0c;置頂公眾號 每天與你分享 IT好書 技術干貨 職場知識 重要提示1:本文所列程序均基于Python3.6,低于Python3.6的Python版本可能無法運行.重要提示2:因所抓取的網站可能隨時更改展示內容,因此程序也需及時跟進.重要提示3:本程序僅供學習,不能拿去做…

halcon邊緣檢測的方法及各種方法的適用范圍

目錄一、邊緣提取二、BLOB分析檢測三、贓物檢測一、邊緣提取 1、設置ROI興趣區域 2、快速二值化&#xff0c;并連接相鄰區域。 這樣做的目的是進一步減少目標區域&#xff0c;通過二值化將目標區域大概輪廓提取出來 3、提取最接近目標區域的輪廓 常用函數有boundary&#xff0…

Oracle優化-表設計

前言  絕大多數的Oracle數據庫性能問題都是由于數據庫設計不合理造成的&#xff0c;只有少部分問題根植于Database Buffer、Share Pool、Redo Log Buffer等內存模塊配置不合理&#xff0c;I/O爭用&#xff0c;CPU爭用等DBA職責范圍上。所以除非是面對一個業已完成不可變更的系…

Win10遠程桌面 出現 身份驗證錯誤,要求的函數不受支持,這可能是由于CredSSP加密Oracle修正 解決方法...

升級至win10 最新版本10.0.17134&#xff0c;遠程桌面連接Window Server時報錯信息如下&#xff1a; 出現身份驗證錯誤&#xff0c;要求的函數不正確&#xff0c;這可能是由于CredSSP加密Oracle修正。 解決方法&#xff1a; 運行 gpedit.msc 本地組策略&#xff1a; 計算機配置…

CMM2

原文出處&#xff1a;http://hi.baidu.com/seaweaver/blog/item/e80e7af427f674d9f2d3854a.html CMM2的六個KPA 1、需求管理 &#xff08;RM&#xff0c;Requirement Management&#xff09; 2、軟件項目計劃 &#xff08;SPP&#xff0c;Software Project Planning&#…

查看linux系統核數

查看linux系統核數&#xff1a; grep ^processor /proc/cpuinfo | wc -l轉載于:https://www.cnblogs.com/myyan/p/5822368.html

Rsyslog 日志相關內容

[rootserver vusers_home]# rpm -ql rsyslog|more ###.so結尾為模塊&#xff0c;模塊有分im為輸入模塊&#xff0c;om 為輸出模塊/etc/logrotate.d/syslog/etc/pki/rsyslog/etc/rc.d/init.d/rsyslog/etc/rsyslog.conf/etc/rsyslog.d/etc/sysconfig/rsyslog/lib64/rsyslog…

MFC導出對話框類DLL的實現

1.新建基于對話框的應用程序 2.新建MFC DLL工程 3.選擇MFC DLL 4.選擇擴展Dll選項&#xff08;重要&#xff01;&#xff01;&#xff01;&#xff09; 5.為Dll工程添加一個MFC類&#xff0c;基類為CDialogEx 6.Dll新建的MFC 類中添加resource.h防止編譯出錯…

中國如何引進CMM評估,促進軟件產業發展

北京軟件行業協會 &#xff08;本文轉載自軟件工程專家網www.21cmm.com&#xff09; 一、CMM的含義及作用   CMM&#xff08;軟件能力成熟度模型&#xff1a;Capability Maturity Model For Software&#xff09;是由美國卡內基梅 隆大學的軟件工程研究所&#xff08;SEI&a…

關于游戲平衡性——王者榮耀英雄傷害數值參考

收集王者榮耀各個英雄的裝備對技能增加的百分比&#xff0c;這樣的主要目的為保證游戲的平衡性。對于技能主要包括&#xff1a;血量、物理攻擊、法術攻擊、物理穿透、法術穿透、暴擊等。關于各個裝備&#xff0c;已經列成一張excel表格&#xff0c;在這里不再詳細描述表格。在這…

Swift-setValuesForKeysWithDictionary

重寫 setValuesForKeysWithDictionary 那么字典中可以有的字段在類中沒有對應屬性 class Person : NSObject {var age :Int 0 // 重寫 setValuesForKeysWithDictionary 那么字典中可以有的字段在類中沒有對應屬性override func setValuesForKeysWithDictionary(keyedValues…