Centos 下安裝 Nginx
今天我們的目標(biāo)就是在 Centos 上搭建好 Nginx 服務(wù),方便后續(xù)開展各種測(cè)試和學(xué)習(xí)。這也是學(xué)習(xí)其他互聯(lián)網(wǎng)組件的第一步。接下來(lái),我將分步驟描述源碼編譯的過(guò)程,并做部分說(shuō)明。本次實(shí)驗(yàn)環(huán)境是 CentOS 7.6 系統(tǒng)。
1. 官網(wǎng)下載最新源代碼,并解壓
目前官方最新版本(截止到 2019 年 12 月 12 日)為 1.17.6,我們直接去官網(wǎng)找到下載地址。不推薦直接使用 yum 安裝,因?yàn)榇嬖谌缦聝蓚€(gè)問(wèn)題:
- 版本太舊,以 CentOS 為例,直接 yum 安裝的版本是 1.12.2 版本,已經(jīng)嚴(yán)重脫離了時(shí)代;
- 無(wú)法自定義安裝模塊,安裝目錄等等,不方便后續(xù)的實(shí)驗(yàn)。
# 下載nginx安裝包
$ wget http://nginx.org/download/nginx-1.17.6.tar.gz
# 解壓安裝包
$ tar -xzf nginx-1.17.6.tar.gz
2. 依賴庫(kù)提前安裝
Nginx 是完全使用 C 語(yǔ)言開發(fā)的,所以必須要有 C 編譯環(huán)境,往往 CentOS 7.6 的環(huán)境會(huì)預(yù)裝 gcc 編譯器,所以不用額外安裝,如果沒有使用 yum 直接安裝即可。另外,我們使用 Nginx 的壓縮功能、正則表達(dá)式功能等,需要安裝一些額外的依賴庫(kù),這是必須要做的,不然在編譯階段就會(huì)報(bào)錯(cuò)。如下 3 個(gè)是比較 Nginx 中比較常用模塊所依賴的庫(kù),請(qǐng)?jiān)趫?zhí)行 Nginx 源碼編譯時(shí)提前安裝好。
$ sudo yum install -y zlib zlib-devel
$ sudo yum install -y pcre pcre-devel
$ sudo yum install -y openssl openssl-devel
- 編譯并安裝
$ cd nginx-1.17.6
$ ./configure # 編譯,檢查依賴是否正確
$ make && sudo make install # 安裝
上述編譯和安裝命令就如同在 360 軟件中心,點(diǎn)擊一鍵安裝那樣,直接使用默認(rèn)的配置(通常會(huì)將相關(guān)文件安裝到 C 盤目錄)。
但是這樣往往不是我們需要的。特別是在 Nginx 中,可以指定安裝某些或者不安裝某些模塊,默認(rèn)安裝的模塊只適合簡(jiǎn)單的場(chǎng)景,往往在稍微復(fù)雜的情況下,就需要額外添加其他模塊,或者第三方以及自定義的模塊。這高可擴(kuò)展性正是 Nginx 的一大亮點(diǎn)。想要查看 configure 的可選參數(shù),使用 --help 選項(xiàng)即可:
$ ./configure --help
在所有可選參數(shù)中,最常用的有兩個(gè):
- –prefix=PATH:配置 Nginx 安裝部署的根目錄。類似于在 Windows 下安裝軟件,我們指定安裝目錄;
- –with-xxx_module:–without-xxx_module 其中 xxx 表示 Nginx 一個(gè)模塊的名稱,例如:
- with-http_ssl_module -> 支持 SSL/TLS, 即 HTTPS
- with-http_v2_module -> 支持 HTTP/2
- without-http_fastcgi_module -> 不使用 fastcgi
為了后續(xù)測(cè)試功能完善,這里我們編譯時(shí)候,盡可能多的引入一些模塊:
$ ./configure --prefix=/root/nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-stream \
--with-http_realip_module \
--with-http_flv_module \
--with-http_random_index_module \
--with-mail \
--with-pcre \
$ make && sudo make install
這里 “\” 在 Linux 系統(tǒng)環(huán)境下表示兩行之間沒有換行,只是為了方便展示命令。一般而言,Nginx 的編譯是比較順利的,偶爾報(bào)錯(cuò)是大部分因?yàn)樾枰黾拥哪K依賴的一些庫(kù)沒有事先安裝好。
對(duì)此,我們可以根據(jù)報(bào)錯(cuò)信息進(jìn)行修正問(wèn)題,保證編譯順利進(jìn)行。在上一步驟成功后,可以看到 Nginx 我們生成的 Nginx 編譯后的根目錄了。簡(jiǎn)單說(shuō)明根目錄下的內(nèi)容:
2.1 conf 目錄
這里放的是 Nginx 的相關(guān)配置文件,最重要的莫過(guò)于 nginx.conf 了,這個(gè)是默認(rèn)的配置文件。
2.2 html 目錄
這里有 2 個(gè)簡(jiǎn)單的 Nginx 頁(yè)面,分別為 50x.html 和 index.html,index.html 是 Nginx.conf
中默認(rèn)訪問(wèn)的頁(yè)面,也就是我們后續(xù)啟動(dòng) Nginx 時(shí),默認(rèn)訪問(wèn) 80 端口的頁(yè)面。
2.3 logs 目錄
暫時(shí)為空,啟動(dòng) Nginx,使用默認(rèn)的 Nginx.conf 配置文件,會(huì)在當(dāng)前目錄下生成 3 個(gè)文件,分別為:
- access.log (記錄所有請(qǐng)求)
- error.log (記錄所有錯(cuò)誤信息)
- nginx.pid (Nginx 啟動(dòng)的主進(jìn)程 id)
2.4 sbin 目錄
最最重要的文件了,C 編譯的工作,最后就是為了得到這樣一個(gè)二進(jìn)制文件。Nginx 的啟動(dòng)、重新加載、停止等都是靠該命令完成。我們一般會(huì)將該目錄放到系統(tǒng)的 PATH 變量中,這樣是為了方便直接使用 Nginx 命令,系統(tǒng)能找到該二進(jìn)制文件。不然的話,我們使用該命令就必須輸入全路徑,類似下面這樣:
# 指定全路徑
$ /root/nginx/sbin/nginx
# 將/root/Nginx/sbin/添加到了系統(tǒng)的PATH變量中,就可以直接使用
$ nginx
# 或者進(jìn)入sbin目錄
$ cd /root/nginx/sbin
$ ./nginx
3. 操作 Nginx
在 Nginx 命令行的使用中,有幾個(gè)非常重要的參數(shù),也是在操作 Nginx 時(shí)經(jīng)常用到的:
常用參數(shù) | 作用 |
---|---|
-t | 測(cè)試 Nginx.conf 文件的語(yǔ)法是否正常 |
-c | 指定 nginx.conf 文件 |
-s | 最重要的操作,不帶 - s 是啟動(dòng),-s reload 是熱加載 -s stop 是停止,-s reopen 是重新打開日志 |
實(shí)例:
# 進(jìn)入sbin目錄
$ cd /root/nginx/sbin
# 啟動(dòng)Nginx
$ ./nginx
# 檢查nginx.conf
$ ./nginx -tc /root/nginx/conf/nginx.conf
# 重新加載nginx
$ ./nginx -s reload
# 停止nginx
$ ./nginx -s stop
啟動(dòng) Nginx 后,首先使用 ps -ef | grep nginx
可以查看 Nginx 進(jìn)程是否已經(jīng)啟動(dòng),基于默認(rèn)的配置,我們將看到 2 個(gè) Nginx 的啟動(dòng)進(jìn)程:master 進(jìn)程和 worker 進(jìn)程。
這是我們?cè)谇懊嬷v到的 Nginx 的 Master-Worker 機(jī)制,后面會(huì)進(jìn)行詳細(xì)講解。另外,我們可以用命令 netstat -anltp | grep 80
,看到 CentOS 上已經(jīng)在監(jiān)聽 80 端口,而這個(gè)監(jiān)聽服務(wù)正是 Nginx。最后可以用瀏覽器或者 curl 命令直接在 CentOS 機(jī)器上檢查 Nginx 服務(wù):
$ curl http://localhost
當(dāng)出現(xiàn) “Welcome to Nginx!" 這樣的歡迎語(yǔ)句,表明我們的 Nginx 已經(jīng)正常運(yùn)行了。
4. 安裝操作視頻演示
5. 小結(jié)
本節(jié)文章中,我們介紹了 Nginx 在 CentOS 7.6 上的搭建過(guò)程。因?yàn)?CentOS 系統(tǒng)在企業(yè)的生產(chǎn)環(huán)境中用的最多,所以本章內(nèi)容非常重要。除了介紹 Nginx 命令行的部分操作外,我們還介紹了編譯 Nginx 生成的根目錄。如果是相同的操作系統(tǒng),我們甚至可以直接用編譯好的根目錄放上去直接使用,省去編譯環(huán)節(jié)。