Centos 7下編譯安裝Nginx

準(zhǔn)備工作

為了編譯Nginx源代碼,需要標(biāo)準(zhǔn)的GCC編譯器磕洪。GCC的全稱為GNU Compiler Collection, 其由GNU開發(fā)焙糟,并以GPLLGPL許可證發(fā)行炬藤,是自由的類UNIX即蘋果電腦Mac OSX操作系統(tǒng)的標(biāo)準(zhǔn)編譯器额港。因?yàn)?code>GCC原本只能處理C語言饺窿,所以原名為GNU C語言編譯器,后來得到快速擴(kuò)展移斩,可處理C++肚医、FortranPascal向瓷、Objective-C肠套、Java以及Ada等其他語言。

除此之外猖任,還需要Automake工具你稚,以完成自動(dòng)創(chuàng)建Makefile文件的工作。

由于Nginx的一些模塊需要依賴其他第三方庫朱躺,通常有pcre庫(支持rewrite模塊)刁赖、zlib庫(支持gzip模塊)和openssl庫(支持ssl模塊)等。

安裝軟件和第三方庫

如果已經(jīng)安裝過以上軟件室琢,則可以略過;如果沒有落追,可以使用一下命令進(jìn)行在線安裝:

$ yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel

進(jìn)入正文

創(chuàng)建nginx用戶

groupadd nginx
useradd nginx -g nginx -s /sbin/nologin -M

下載Nginx壓縮包

這里下載是當(dāng)前的穩(wěn)定版本盈滴,若需要下載其他版本,把nginx-1.14.0.tar.gz換成想要的版本即可轿钠。

# opt目錄下如果沒有 local 目錄巢钓,使用 mkdir local 創(chuàng)建
$ cd /opt/local
$ wget https://nginx.org/download/nginx-1.14.0.tar.gz
--2018-09-04 03:04:00--  https://nginx.org/download/nginx-1.14.0.tar.gz
正在解析主機(jī) nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ...
正在連接 nginx.org (nginx.org)|206.251.255.63|:443... 已連接。
已發(fā)出 HTTP 請(qǐng)求疗垛,正在等待回應(yīng)... 200 OK
長(zhǎng)度:1016272 (992K) [application/octet-stream]
正在保存至: “nginx-1.14.0.tar.gz”

100%[=========================================================================>] 1,016,272   6.30KB/s 用時(shí) 1m 59s

2018-09-04 03:06:02 (8.37 KB/s) - 已保存 “nginx-1.14.0.tar.gz” [1016272/1016272])

解壓

下載完成后症汹,使用下面的命令進(jìn)行解壓。

# 解壓
$ tar -zxvf nginx-1.14.0.tar.gz 
$ cd nginx-1.14.0 
$ ll
drwxr-xr-x. 6 1001 1001   4096 9月   3 03:35 auto
-rw-r--r--. 1 1001 1001 286953 4月  17 11:22 CHANGES
-rw-r--r--. 1 1001 1001 437286 4月  17 11:22 CHANGES.ru
drwxr-xr-x. 2 1001 1001   4096 9月   3 22:56 conf
-rwxr-xr-x. 1 1001 1001   2502 4月  17 11:22 configure
drwxr-xr-x. 4 1001 1001   4096 9月   3 03:23 contrib
drwxr-xr-x. 2 1001 1001   4096 9月   3 03:23 html
-rw-r--r--. 1 1001 1001   1397 4月  17 11:22 LICENSE
-rw-r--r--. 1 root root    336 9月   3 03:36 Makefile
drwxr-xr-x. 2 1001 1001   4096 9月   3 03:23 man
drwxr-xr-x. 3 root root   4096 9月   3 03:42 objs
-rw-r--r--. 1 1001 1001     49 4月  17 11:22 README
drwxr-xr-x. 9 1001 1001   4096 9月   3 03:23 src

這里對(duì)解壓完成后的部分目錄和文件做個(gè)簡(jiǎn)單的介紹:

  • src 該目錄存放了Nginx的所有源碼贷腕;
  • man 該目錄存放了Nginx的幫助文檔背镇;
  • html 該目錄存放了兩個(gè)html文件咬展。這兩個(gè)文件與Nginx服務(wù)器的運(yùn)行相關(guān),這兩個(gè)文件的作用會(huì)在下文給出瞒斩,這里不做贅述破婆;
  • conf 該目錄存放的是Nginx服務(wù)器的配置文件,包含Nginx服務(wù)器的基本配置文件胸囱;
  • auto 該目錄存放了大量腳本文件祷舀,和configure腳本程序有關(guān);
  • configure 該文件是Nginx軟件的自動(dòng)腳本程序烹笔。運(yùn)行configure腳本一般會(huì)完成兩項(xiàng)工作:一是檢查環(huán)境裳扯,根據(jù)環(huán)境檢查結(jié)果生成C代碼;二是生成編譯代碼需要的Makefile文件谤职。

編譯安裝Nginx

在介紹生成Makefile文件操作之前饰豺,先介紹一下configure腳本支持的常用選項(xiàng):

選項(xiàng) 說明
--prefix=path 定義一個(gè)目錄,存放服務(wù)器上的文件 柬帕,也就是nginx的安裝目錄哟忍。默認(rèn)使用 /usr/local/nginx。
--sbin-path=path 設(shè)置nginx的可執(zhí)行文件的路徑陷寝,默認(rèn)為 prefix/sbin/nginx.
--conf-path=path 設(shè)置在nginx.conf配置文件的路徑锅很。nginx允許使用不同的配置文件啟動(dòng),通過命令行中的-c選項(xiàng)凤跑。默認(rèn)為prefix/conf/nginx.conf.
--pid-path=path 設(shè)置nginx.pid文件爆安,將存儲(chǔ)的主進(jìn)程的進(jìn)程號(hào)。安裝完成后仔引,可以隨時(shí)改變的文件名 扔仓, 在nginx.conf配置文件中使用 PID指令。默認(rèn)情況下咖耘,文件名 為prefix/logs/nginx.pid.
--error-log-path=path 設(shè)置主錯(cuò)誤翘簇,警告,和診斷文件的名稱儿倒。安裝完成后版保,可以隨時(shí)改變的文件名 ,在nginx.conf配置文件中 使用 的error_log指令夫否。默認(rèn)情況下彻犁,文件名 為prefix/logs/error.log.
--http-log-path=path 設(shè)置主請(qǐng)求的HTTP服務(wù)器的日志文件的名稱。安裝完成后凰慈,可以隨時(shí)改變的文件名 汞幢,在nginx.conf配置文件中 使用 的access_log指令。默認(rèn)情況下微谓,文件名 為prefix/logs/access.log.
--user=name 設(shè)置nginx工作進(jìn)程的用戶森篷。安裝完成后输钩,可以隨時(shí)更改的名稱在nginx.conf配置文件中 使用的 user指令。默認(rèn)的用戶名是nobody疾宏。
--group=name 設(shè)置nginx工作進(jìn)程的用戶組张足。安裝完成后,可以隨時(shí)更改的名稱在nginx.conf配置文件中 使用的 user指令坎藐。默認(rèn)的為非特權(quán)用戶为牍。
--with-select_module
--without-select_module
啟用或禁用構(gòu)建一個(gè)模塊來允許服務(wù)器使用select()方法。該模塊將自動(dòng)建立岩馍,如果平臺(tái)不支持的kqueue碉咆,epoll,rtsig或/dev/poll蛀恩。
--with-poll_module
--without-poll_module
啟用或禁用構(gòu)建一個(gè)模塊來允許服務(wù)器使用poll()方法疫铜。該模塊將自動(dòng)建立,如果平臺(tái)不支持的kqueue双谆,epoll壳咕,rtsig或/dev/poll。
--without-http_gzip_module 不編譯壓縮的HTTP服務(wù)器的響應(yīng)模塊顽馋。編譯并運(yùn)行此模塊需要zlib庫谓厘。
--without-http_rewrite_module 不編譯重寫模塊。編譯并運(yùn)行此模塊需要PCRE庫支持寸谜。
--without-http_proxy_module 不編譯http_proxy模塊竟稳。
--with-http_ssl_module 使用https協(xié)議模塊。默認(rèn)情況下熊痴,該模塊沒有被構(gòu)建他爸。建立并運(yùn)行此模塊的OpenSSL庫是必需的。
--with-pcre=path 設(shè)置PCRE庫的源碼路徑果善。PCRE庫的源碼(版本4.4 - 8.30)需要從PCRE網(wǎng)站下載并解壓诊笤。其余的工作是Nginx的./ configure和make來完成。正則表達(dá)式使用在location指令和 ngx_http_rewrite_module 模塊中巾陕。
--with-pcre-jit 編譯PCRE包含“just-in-time compilation”(1.1.12中讨跟, pcre_jit指令)。
--with-zlib=path 設(shè)置的zlib庫的源碼路徑惜论。要下載從 zlib(版本1.1.3 - 1.2.5)的并解壓许赃。其余的工作是Nginx的./ configure和make完成止喷。ngx_http_gzip_module模塊需要使用zlib 馆类。
--with-cc-opt=parameters 置額外的參數(shù)將被添加到CFLAGS變量。例如,當(dāng)你在FreeBSD上使用PCRE庫時(shí)需要使用:--with-cc-opt="-I /usr/local/include弹谁。.如需要需要增加 select()支持的文件數(shù)量:--with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=parameters 設(shè)置附加的參數(shù)乾巧,將用于在鏈接期間句喜。例如,當(dāng)在FreeBSD下使用該系統(tǒng)的PCRE庫,應(yīng)指定:--with-ld-opt="-L /usr/local/lib".

了解了如上選項(xiàng)后沟于,就可以根據(jù)實(shí)際情況使用configure腳本生成Makefile文件了咳胃。若上面的選項(xiàng)無法滿足需求,可自行Google其他選項(xiàng)旷太,上面介紹的只是其中的一小部分展懈。

生成Makefile文件

使用下面的命令配置并生成Makefile文件:

# 推薦參數(shù)
$ ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --with-pcre-jit --with-http_ssl_module --with-http_v2_module --with-http_sub_module --with-stream --with-stream_ssl_module
checking for OS
 + Linux 3.10.0-862.el7.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
... 這里省略n行
checking for zlib library ... found
creating objs/Makefile

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library

  nginx path prefix: "/Nginx"
  nginx binary file: "/Nginx/sbin/nginx"
  nginx modules path: "/Nginx/modules"
  nginx configuration prefix: "/Nginx/conf"
  nginx configuration file: "/Nginx/conf/nginx.conf"
  nginx pid file: "/Nginx/logs/nginx.pid"
  nginx error log file: "/Nginx/logs/error.log"
  nginx http access log file: "/Nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

--prefix配置指定了Nginx的安裝路徑,其他的配置使用默認(rèn)的配置供璧。

在運(yùn)行過程中存崖,configure腳本調(diào)用auto目錄中的各種腳本對(duì)系統(tǒng)環(huán)境及相關(guān)配置和設(shè)置進(jìn)行了檢查。

編譯

得到了Makefile文件后睡毒,就可以編譯源碼了来惧。在當(dāng)前目錄使用命令make編譯源代碼:

$ make
make -f objs/Makefile
make[1]: 進(jìn)入目錄“/nginx/nginx-1.14.0”
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
    -o objs/src/core/nginx.o \
    src/core/nginx.c
... 這里省略n行
objs/src/http/modules/ngx_http_upstream_zone_module.o \
objs/ngx_modules.o \
-ldl -lpthread -lcrypt -lpcre -lz \
-Wl,-E
sed -e "s|%%PREFIX%%|/Nginx|" \
    -e "s|%%PID_PATH%%|/Nginx/logs/nginx.pid|" \
    -e "s|%%CONF_PATH%%|/Nginx/conf/nginx.conf|" \
    -e "s|%%ERROR_LOG_PATH%%|/Nginx/logs/error.log|" \
    < man/nginx.8 > objs/nginx.8
make[1]: 離開目錄“/nginx/nginx-1.14.0”

安裝

編譯完成后,使用makeinstall命令進(jìn)行安裝:

$ make install
make -f objs/Makefile install
make[1]: 進(jìn)入目錄“/nginx/nginx-1.14.0”
test -d '/Nginx' || mkdir -p '/Nginx'
test -d '/Nginx/sbin' \
    || mkdir -p '/Nginx/sbin'
test ! -f '/Nginx/sbin/nginx' \
    || mv '/Nginx/sbin/nginx' \
        '/Nginx/sbin/nginx.old'
... 這里省略n行
test -d '/Nginx/logs' \
    || mkdir -p '/Nginx/logs'
test -d '/Nginx/html' \
    || cp -R html '/Nginx'
test -d '/Nginx/logs' \
    || mkdir -p '/Nginx/logs'
make[1]: 離開目錄“/nginx/nginx-1.14.0”

到此演顾,我們已經(jīng)安裝后了一個(gè)最基本的Nginx服務(wù)器供搀,其安裝路徑為/usr/local/nginx

后記

安裝完成后钠至,將當(dāng)前目錄切換到/usr/local/nginx葛虐,然后查看安裝目錄包含哪些文件(夾):

$ cd /usr/local/nginx
$ ls *
conf:
fastcgi.conf          fastcgi_params.default  mime.types          nginx.conf.default   uwsgi_params
fastcgi.conf.default  koi-utf                 mime.types.default  scgi_params          uwsgi_params.default
fastcgi_params        koi-win                 nginx.conf          scgi_params.default  win-utf

html:
50x.html  index.html

logs:

sbin:
nginx

安裝目錄主要包含 conf html logs sbin 四個(gè)目錄。

  • conf 存放了Nginx的所有配置文件棕洋。其中挡闰,nginx.conf文件是Nginx服務(wù)器的主配置文件,其他配置文件是用來配置Nginx的相關(guān)功能掰盘,比如摄悯,fastcgi.congfastcgi_params用來配置fastcgi
  • html 該目錄存放了Nginx服務(wù)器在運(yùn)行過程中調(diào)用的一些html文件愧捕。index.html文件是在服務(wù)器運(yùn)行成功后默認(rèn)返回的網(wǎng)頁奢驯;50x.html是在Nginx服務(wù)器出現(xiàn)某些問題時(shí)將會(huì)調(diào)用該頁面。
  • logs 顧名思義次绘,用來存放Nginx服務(wù)器的日志瘪阁。因?yàn)槟壳胺?wù)器還未啟動(dòng),所以該目錄為空邮偎。
  • sbin 只有一個(gè)nginx文件管跺,該文件就是Nginx服務(wù)器的主程序了。

啟動(dòng)

$ ./sbin/nginx

測(cè)試

$ curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

若返回類似如上的結(jié)果禾进,證明已成功啟動(dòng)豁跑。其實(shí),上面返回的是目錄/Nginx/html/下的index.html文件泻云,可以使用cat /Nginx/html/index.html命令進(jìn)行驗(yàn)證艇拍。

若是有圖形界面狐蜕,在瀏覽器訪問localhost,可以看到類似下圖的頁面:

Nginx默認(rèn)頁面

附——常用命令

nginx  #啟動(dòng)nginx
nginx -s quit  #快速停止nginx
nginx -V #查看版本卸夕,以及配置文件地址
nginx -v #查看版本
nginx -s reload|reopen|stop|quit   #重新加載配置|重啟|快速停止|安全關(guān)閉nginx
nginx -h #幫助
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末层释,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子快集,更是在濱河造成了極大的恐慌贡羔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件个初,死亡現(xiàn)場(chǎng)離奇詭異治力,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)勃黍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門宵统,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人覆获,你說我怎么就攤上這事马澈。” “怎么了弄息?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵痊班,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我摹量,道長(zhǎng)涤伐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任缨称,我火速辦了婚禮凝果,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睦尽。我一直安慰自己器净,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布当凡。 她就那樣靜靜地躺著山害,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沿量。 梳的紋絲不亂的頭發(fā)上浪慌,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音朴则,去河邊找鬼权纤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妖碉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼芥被,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼欧宜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拴魄,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤冗茸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后匹中,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夏漱,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年顶捷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挂绰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡服赎,死狀恐怖葵蒂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情重虑,我是刑警寧澤践付,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站缺厉,受9級(jí)特大地震影響永高,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜提针,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一命爬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辐脖,春花似錦遇骑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枝恋,卻和暖如春先壕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奴拦。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工媒鼓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓绿鸣,卻偏偏與公主長(zhǎng)得像疚沐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子潮模,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348