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