準(zhǔn)備工作
為了編譯Nginx
源代碼,需要標(biāo)準(zhǔn)的GCC
編譯器磕洪。GCC
的全稱為GNU Compiler Collection
, 其由GNU
開發(fā)焙糟,并以GPL
及LGPL
許可證發(fā)行炬藤,是自由的類UNIX
即蘋果電腦Mac OSX
操作系統(tǒng)的標(biāo)準(zhǔn)編譯器额港。因?yàn)?code>GCC原本只能處理C
語言饺窿,所以原名為GNU C
語言編譯器,后來得到快速擴(kuò)展移斩,可處理C++
肚医、Fortran
、Pascal
向瓷、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”
安裝
編譯完成后,使用make
的install
命令進(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.cong
和fastcgi_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 #啟動(dòng)nginx
nginx -s quit #快速停止nginx
nginx -V #查看版本卸夕,以及配置文件地址
nginx -v #查看版本
nginx -s reload|reopen|stop|quit #重新加載配置|重啟|快速停止|安全關(guān)閉nginx
nginx -h #幫助