CentOS 下編譯安裝 Nginx

huxiaobai_001發表於2020-03-12

yum rpm安裝Nginx真的so easy 現在我來教你如何編譯安裝nginx 其實也很簡單

1.下載解壓

cd /usr/local/src
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1/

2.執行編譯安裝命令:

./configure --prefix=/usr/local/nginx
錯誤資訊:
checking for OS
+ Linux 3.10.0-327.el7.x86_64 x86_64
checking for C compiler ... not found
./configure: error: C compiler cc is not found
解決方法:安裝gcc
yum -y install gcc

錯誤資訊:
./configure: error: the HTTP rewrite module requires the PCRE library.
解決方法:安裝pcre-devel
yum install pcre-devel

錯誤資訊:
./configure: error: the HTTP gzip module requires the zlib library.
解決方法:安裝zlib-devel
yum install zlib-devel

再次執行
./configure --prefix=/usr/local/nginx

正確的結果顯示:

CentOS 下編譯安裝 Nginx

3.執行make && make install

make && make install

現在在/usr/local下就有了nginx安裝目錄

4.如何啟動Nginx

cd /usr/local/nignx
啟動nginx:
./sbin/nginx

5.Nginx目錄介紹:

cd /usr/local/nignx
會發現nginx安裝目錄下會發現有四個目錄其中
conf:配置目錄
html 網頁檔案
logs 日誌檔案
sbin 主要的二進位制程式檔案
啟動nginx的時候可能會遇到很多問題 比如80埠被佔用 可以通過:
netstat -antp 檢視是哪個程式佔用了80
然後
kill -9 程式PID 殺死程式 或者
pkill -9 httpd 殺死該程式的所有程式 我這裡模擬的殺死httpd的所有程式
也有可能出現80埠沒有開放的事情 如何檢視80是否開放?
firewall-cmd –query-port=80/tcp 返回no說明80埠沒開放
firewall-cmd –add-port=80/tcp 開放80埠號

6.Nginx的關閉和重啟

如何重啟nginx呢? ps aux | grep nginx //首先檢視一下nginx的程式有哪些

CentOS 下編譯安裝 Nginx

你會發現怎麼兩個nginx 第一個是master主程式 第二個是子程式 真正幹活的是第二個worker子程式
master負責管理這些子程式!

重啟nginx我們可以使用nginx當中的訊號量

第一種:-INT
ps aux | grep nginx

CentOS 下編譯安裝 Nginx
可以看到nginx的主程式的PID

kill -INT 7450 //直接乾死nginx主程式 直截了當

然後進入到

cd /usr/local/nginx
./sbin/nginx

完成nginx的重啟工作!

這種方式很暴力 萬一使用者在下單 剛付完錢 但是資料沒入庫 就歇菜了!太暴力了!

第二種:quit
優雅的關閉程式 即等請求結束後再關閉
ps aux | grep nginx

CentOS 下編譯安裝 Nginx
可以看到nginx的主程式PID

kill -quit 7450 //優雅的殺掉主程式 等到請求結束再關閉

然後進入到

cd usr/local/nginx
./sbin/nginx

完成nginx的重啟工作

這種方式比較優雅!等請求結束後再殺死nginx的主程式!

第三種:hup
hup是你改了nginx的配置檔案 重讀配置檔案 它會實現平滑重啟
假設nginx的主程式還是7450
這個時候你修改了配置檔案 需要重新啟動
只需執行:

kill -hup 7450 //會平滑重啟 在完成前邊請求的前提下重新取讀取配置檔案 完成平滑重啟 客戶無感知!

整個過程不斷線 nginx的主程式PID不變 因為沒殺死程式啊!平滑的去重讀了nginx的配置檔案而已整個過程不斷線 nginx的主程式PID不變 因為沒殺死程式啊!平滑的去重讀了nginx的配置檔案而已

其他的重啟 關閉 nginx的方式:

CentOS 下編譯安裝 Nginx

進入nginx的安裝目錄

cd /usr/local/nginx 
./sbin/nginx -s stop //關閉nginx服務
./sbin/nginx -s reload //相當於重讀配置檔案 其他類似 自己去試試吧!

7.Nginx的排查錯誤機制:

./sbin/nginx -t  //這條命令會告訴你 你的nginx配置檔案是否配置正確  不正確又錯在了哪裡

8.設定開機啟動Nginx

cd /lib/systemd/system/
vim nginx.service    //沒有就是新建
[Unit]
Description=nginx service
After=network.target 

[Service] 
Type=forking 
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true 

[Install] 
WantedBy=multi-user.target

[Unit]:服務的說明

Description:描述服務
After:描述服務類別
[Service]:服務執行引數的設定

Type=forking:後臺執行的形式
ExecStart:服務的具體執行命令
ExecReload:重啟命令
ExecStop:停止命令
PrivateTmp=True:表示給服務分配獨立的臨時空間
注意:[Service]的啟動、重啟、停止命令全部要求使用絕對路徑。
[Install]:
執行級別下服務安裝的相關設定,可設定為多使用者,即系統執行級別為3。

設定開機啟動:設定開機啟動:
systemctl enable nginx

重啟測試

init 6 
systemctl status nginx.service

訪問瀏覽器,成功!
可能會用到的命令:

systemctl start nginx.service          //啟動
systemctl stop nginx.service           //停止
systemctl restart nginx.service        //重新啟動
systemctl status nginx.service         //檢視狀態
systemctl enable nginx.service         //設定開機啟動
systemctl disable nginx.service        //停止開機啟動
systemctl list-units --type=service    //檢視所有已啟動的
本作品採用《CC 協議》,轉載必須註明作者和本文連結

胡軍

相關文章