Nginx源碼安裝

1.1 準備源碼包

  1. pcre
http://www.pcre.org/
  • zlib
    http://www.zlib.net/
    
  • openssl
    http://www.openssl.org/
    
  • echo-nginx-module
    https://github.com/openresty/echo-nginx-module/tags
    

該模塊主要用于方便開發(fā)人員調(diào)試浪听,建議安裝該模塊片择,可便于調(diào)試

* ngx_devel_kit

https://github.com/simpl/ngx_devel_kit

* set-misc-nginx-module

https://github.com/openresty/set-misc-nginx-module
該模塊主要用于decode uri, 依賴ngx_devel_kit模塊

* luajit

http://luajit.org/

* lua-nginx-module

https://github.com/chaoslawful/lua-nginx-module
該模塊用于支持lua語言,有高并發(fā)自定義需求建議安裝瘫俊。

* nginx

http://nginx.org/


### 1.2 源碼安裝
1. 安裝libunwind庫

下載:http://download.savannah.gnu.org/releases/libunwind
解壓:
tar -zxvf libunwind-1.1.tar.gz
安裝:
./configure
make CFLAGS=-fPIC
sudo make CFLAGS=-fPIC install

* 安裝google-perftools

下載:http://google-perftools.googlecode.com
解壓:
tar -zxvf gperftools-2.1.tar.gz
安裝:
./configure
make
sudo make install
配置環(huán)境:
sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
sudo ldconfig

* 安裝luajit(Nginx暫時只支持到Lua5.1磕洪,不需要支持Lua開發(fā)可跳過此步驟)

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar zxf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make
make install PREFIX=/data/software/luajit

添加環(huán)境變量

export LUAJIT_LIB=/data/software/luajit/lib
export LUAJIT_INC=/data/software/luajit/include/luajit-2.0

* 解壓&&進入安裝目錄

tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0

* 取消debug模式
**vim auto/cc/gcc**

debug

:178
CFLAGS=”$CFLAGS -g”
==>

debug

CFLAGS=”$CFLAGS -g”

* 將nginx默認日志格式改為datatime格式
**vim src/http/modules/ngx_http_log_module.c**

:222
{ ngx_string("time_local"), sizeof("28/Sep/1970:12:00:00 +0600") - 1,
ngx_http_log_time }
==>
{ ngx_string("time_local"), sizeof("1970-09-28 12:00:00 +0600") - 1,
ngx_http_log_time },
:810
return ngx_cpymem(buf, ngx_cached_http_log_time.data,
ngx_cached_http_log_time.len);
==>
return ngx_cpymem(buf, ngx_cached_err_log_time.data,
ngx_cached_err_log_time.len);

**vim src/core/ngx_times.c**

:149
(void) ngx_sprintf(p1, "%4d/%02d/%02d %02d:%02d:%02d",
tm.ngx_tm_year, tm.ngx_tm_mon,
tm.ngx_tm_mday, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec);
==>
(void) ngx_sprintf(p1, "%4d-%02d-%02d %02d:%02d:%02d",
tm.ngx_tm_year, tm.ngx_tm_mon,
tm.ngx_tm_mday, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec);

* 配置

./configure
--prefix=/data/software/nginx
--sbin-path=/data/software/nginx/sbin/nginx
--conf-path=/data/software/nginx/etc/nginx.conf
--pid-path=/data/software/nginx/tmp/nginx.pid
--error-log-path=/data/software/nginx/log/error.log
--http-log-path=/data/software/nginx/log/access.log
--user=greentea
--group=greentea
--with-http_ssl_module
--with-http_realip_module
--with-http_stub_status_module
--with-google_perftools_module
--with-pcre=/data/software/src/pcre-8.34
--with-zlib=/data/software/src/zlib-1.2.8
--with-openssl=/data/software/src/openssl-1.0.1c
--add-module=/data/software/src/echo-nginx-module-0.53
--add-module=/data/software/src/ngx_devel_kit-0.2.19
--add-module=/data/software/src/set-misc-nginx-module-0.25
--add-module=/data/software/src/lua-nginx-module-0.10.0

* 安裝

make -j 8
make install

* 準備配置文件
拷貝nginx.conf至/data/software/nginx/etc下买雾,提供參考如下:

用戶

user greentea;

工作進程掷酗,根據(jù)硬件調(diào)整虽界,一般等于cpu核數(shù)

worker_processes 8;

錯誤日志 日志級別

error_log log/error.log;

pid放置的位置

pid tmp/nginx.pid;

google_perftools的線程目錄

google_perftools_profiles /data/greentea/tmp/tcmalloc/tcmalloc;

指定進程可以打開的最大描述符,最好與ulimit -n 的值保持一致

worker_rlimit_nofile 1048576;

events {
#使用epoll的I/O 模型
use epoll;

  #工作進程的最大連接數(shù)量扛施,根據(jù)硬件調(diào)整鸿捧,和前面工作進程配合起來用,盡量大疙渣,但是別把cpu跑到100%就行
  #每個進程允許的最多連接數(shù)匙奴, 理論上每臺nginx服務(wù)器的最大連接數(shù)為worker_processes*worker_connections
  worker_connections  65536;

}

設(shè)定http服務(wù)器,利用它的反向代理功能提供負載均衡支持

http {
#設(shè)定mime類型,類型由mime.type文件定義
include mime.types;

  default_type  application/octet-stream;

  charset  utf-8;

  log_format  main  '[$time_local] [$remote_addr] [$remote_user] [$http_x_forwarded_for] '
                   '[$request] [$status] [$request_time] [$body_bytes_sent] '
                   '[$http_referer] [$http_user_agent] [$bytes_sent] [$request_length]';

  #用了log_format指令設(shè)置了日志格式之后妄荔,需要用access_log指令指定日志文件的存放路徑泼菌;
  access_log  log/access.log  main;

  #還原用戶真實IP
  set_real_ip_from 127.0.0.1;
  set_real_ip_from 10.0.0.0/8;
  set_real_ip_from 172.16.0.0/12;
  set_real_ip_from 192.168.0.0/16;
  real_ip_header X-Forwarded-For;
  real_ip_recursive on;

  #客戶端請求頭部的緩沖區(qū)大小,這個可以根據(jù)你的系統(tǒng)分頁大小來設(shè)置,getconf PAGESIZE
  #client_header_buffer_size 4k;

  #如果把它設(shè)置為比較大的數(shù)值啦租,例如256k哗伯,那么,無論使用firefox還是IE瀏覽器篷角,來提交任意小于256k的圖片焊刹,都很正常
  #如果注釋該指令,使用默認的client_body_buffer_size設(shè)置恳蹲,也就是操作系統(tǒng)頁面大小的兩倍虐块,8k或者16k,問題就出現(xiàn)了嘉蕾。
  #無論使用firefox4.0還是IE8.0贺奠,提交一個比較大,200k左右的圖片荆针,都返回500 Internal Server Error錯誤
  client_body_buffer_size 512k;

  # 客戶端最大上傳文件大小
  client_max_body_size 1000m;

  #客戶端保持連接超時時間
  keepalive_timeout 60;
  #客戶端請求頭讀取超時時間
  #client_header_timeout 10;
  #客戶端請求主體讀取超時時間
  #client_body_timeout 10;
  #客戶端響應超時時間
  #send_timeout 10;

  #sendfile指令指定 nginx 是否調(diào)用sendfile 函數(shù)(zero copy 方式)來輸出文件
  #對于普通應用敞嗡,必須設(shè)為on,如果用來進行下載等應用磁盤IO重負載應用,可設(shè)置為off航背,
  #以平衡磁盤與網(wǎng)絡(luò)IO處理速度,降低系統(tǒng)uptime
  sendfile        on;
  #此選項允許或禁止使用socke的TCP_CORK的選項棱貌,此選項僅在使用sendfile的時候使用
  #tcp_nopush     on;
  #
  #tcp_nodelay on;

  # http://www.cnblogs.com/rmbteam/archive/2011/10/26/2225010.html
  # 是否開啟gzip數(shù)據(jù)壓縮
  gzip  on; #決定是否開啟gzip模塊
  # 設(shè)置gzip申請內(nèi)存的大小,其作用是按塊大小的倍數(shù)申請內(nèi)存空間
  # param1:int; param2:int(k) 后面單位是k
  gzip_buffers 16 8k;
  # 設(shè)置gzip壓縮等級玖媚,等級越底壓縮速度越快文件壓縮比越小,反之速度越慢文件壓縮比越大
  # param:1-9
  gzip_comp_level 6;
  # 當返回內(nèi)容大于此值時才會使用gzip進行壓縮,以K為單位,當值為0時婚脱,所有頁面都進行壓縮
  # param:int
  gzip_min_length 1000;
  # 用于識別http協(xié)議的版本今魔,早期的瀏覽器不支持gzip壓縮勺像,用戶會看到亂碼,所以為了支持前期版本加了此選項,目前此項基本可以忽略
  # param: 1.0|1.1
  # gzip_http_version 1.0
  # Nginx做為反向代理的時候啟用错森,
  gzip_proxied any;
  # 設(shè)置需要壓縮的MIME類型,非設(shè)置值不進行壓縮
  # param:text/html|application/x-javascript|text/css|application/xml
  gzip_types text/plain text/css text/javascript application/x-javascript application/xml application/javascript;
  gzip_vary on;
  gzip_disable "msie6";

  #后端服務(wù)器連接的超時時間_發(fā)起握手等候響應超時時間
  proxy_connect_timeout 90;
  #連接成功后_等候后端服務(wù)器響應時間_其實已經(jīng)進入后端的排隊之中等候處理(也可以說是后端服務(wù)器處理請求的時間)
  proxy_read_timeout 180;
  #后端服務(wù)器數(shù)據(jù)回傳時間_就是在規(guī)定時間之內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù)
  proxy_send_timeout 180;
  #設(shè)置從被代理服務(wù)器讀取的第一部分應答的緩沖區(qū)大小,通常情況下這部分應答中包含一個小的應答頭
  #默認情況下這個值的大小為指令proxy_buffers中指定的一個緩沖區(qū)的大小吟宦,不過可以將其設(shè)置為更小
  proxy_buffer_size 256k;
  #設(shè)置用于讀取應答(來自被代理服務(wù)器)的緩沖區(qū)數(shù)目和大小
  #默認情況也為分頁大小,根據(jù)操作系統(tǒng)的不同可能是4k或者8k
  proxy_buffers 4 256k;
  ##
  #proxy_busy_buffers_size 256k;
  ##設(shè)置在寫入proxy_temp_path時數(shù)據(jù)的大小涩维,預防一個工作進程在傳遞文件時阻塞太長
  #proxy_temp_file_write_size 256k;
  ##proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區(qū)
  #proxy_temp_path /data0/proxy_temp_dir;
  ##設(shè)置內(nèi)存緩存空間大小為200MB殃姓,1天沒有被訪問的內(nèi)容自動清除,硬盤緩存空間大小為30GB
  #proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
  #表示使nginx阻止HTTP應答代碼為400或者更高的應答
  #proxy_intercept_errors on;
  #nginx等待后端返回
  proxy_ignore_client_abort on;

  #這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數(shù)量宏赘,建議和打開文件數(shù)一致鸣戴,
  #inactive是指經(jīng)過多長時間文件沒被請求后刪除緩存
  #open_file_cache max=65535 inactive=60s;
  #這個是指多長時間檢查一次緩存的有效信息
  #open_file_cache_valid 80s;
  #open_file_cache指令中的inactive參數(shù)時間內(nèi)文件的最少使用次數(shù)
  #如果超過這個數(shù)字,文件描述符一直是在緩存中打開的
  #如上例近顷,如果有一個文件在inactive時間內(nèi)一次沒被使用,它將被移除
  #open_file_cache_min_uses 1;

  #負載均衡組定義
  #down:暫時不參與負載均衡
  #backup:預留的備份機器,只有其它機器掛了才訪問  
  #max_fails:允許的請求失敗次數(shù)  
  #fail_timeout:服務(wù)請求失敗后该面,暫停服務(wù)時間
  #upstream myservers {
  #   ip_hash;
  #   server 192.168.12.133:80;
  #   server 192.168.12.133:80 down;
  #   server 192.168.12.133:80 max_fails=3     fail_timeout=20ms;
  #}

  #fastcgi優(yōu)化配置
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 512k;
  fastcgi_buffers 8 512k;
  fastcgi_busy_buffers_size 1024;
  fastcgi_temp_file_write_size 1024;

  #include /data/software/nginx/etc/city.d/citys.geo.conf;

  include /data/software/nginx/etc/vhost.d/*.conf;

}

* 啟動

/data/software/nginx/sbin/nginx


### 1.3 常見問題

1. 常用命令

啟動:

  /data/software/nginx/sbin/nginx

停止:

  /data/software/nginx/sbin/nginx -s stop

重新加載:

  /data/software/nginx/sbin/nginx -s reload

測試配置文件是否正確:

  /data/software/nginx/sbin/nginx -t
  /data/software/nginx/sbin/nginx -t /data/software/nginx/etc/nginx.conf
2. 添加開機啟動

在/etc/init.d/中建立軟連接

sudo ln -s /data/software/nginx/nginx /etc/init.d/nginx

更新rc

sudo update-rc.d -f nginx remove
sudo update-rc.d -f nginx defaults

3.  openssl編譯錯誤
錯誤信息

/usr/bin/ranlib ../../libcrypto.a || echo Never mind.
make[4]: Leaving directory /data/software/src/openssl-1.0.1c/crypto/cmac' if [ -n "" ]; then \ (cd ..; make libcrypto.so.1.0.0); \ fi make[3]: Leaving directory/data/software/src/openssl-1.0.1c/crypto'
make[2]: Leaving directory /data/software/src/openssl-1.0.1c' make[1]: *** [/data/software/src/openssl-1.0.1c/.openssl/include/openssl/ssl.h] 錯誤 2 make[1]: Leaving directory/data/software/src/nginx-1.8.0'
make: *** [build] 錯誤 2

**vim auto/lib/openssl/conf**

:31
CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
==>
CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/libcrypto.a"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市信卡,隨后出現(xiàn)的幾起案子隔缀,更是在濱河造成了極大的恐慌,老刑警劉巖坐求,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚕泽,死亡現(xiàn)場離奇詭異,居然都是意外死亡桥嗤,警方通過查閱死者的電腦和手機须妻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泛领,“玉大人荒吏,你說我怎么就攤上這事≡ㄐ” “怎么了绰更?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锡宋。 經(jīng)常有香客問我儡湾,道長,這世上最難降的妖魔是什么执俩? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任徐钠,我火速辦了婚禮,結(jié)果婚禮上役首,老公的妹妹穿的比我還像新娘尝丐。我一直安慰自己显拜,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布爹袁。 她就那樣靜靜地躺著远荠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪失息。 梳的紋絲不亂的頭發(fā)上譬淳,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音根时,去河邊找鬼瘦赫。 笑死,一個胖子當著我的面吹牛蛤迎,可吹牛的內(nèi)容都是我干的确虱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼替裆,長吁一口氣:“原來是場噩夢啊……” “哼校辩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辆童,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤宜咒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后把鉴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體故黑,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年庭砍,在試婚紗的時候發(fā)現(xiàn)自己被綠了场晶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡怠缸,死狀恐怖诗轻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揭北,我是刑警寧澤扳炬,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站搔体,受9級特大地震影響恨樟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疚俱,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一厌杜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧计螺,春花似錦夯尽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陈轿,卻和暖如春圈纺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背麦射。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工蛾娶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人潜秋。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓蛔琅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親峻呛。 傳聞我的和親對象是個殘疾皇子罗售,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容