1. 程式人生 > 其它 >[學習筆記]在Linux中使用原始碼編譯的方式安裝Nginx

[學習筆記]在Linux中使用原始碼編譯的方式安裝Nginx

準備工作

準備nginx原始碼包:

http://nginx.org/en/download.html

準備相關的依賴包以及環境:

gzip 模組需要 zlib 庫  http://www.zlib.net/rewrite

模組需要 pcre 庫http://www.pcre.org/

若開啟ssl 功能則需要 openssl 庫https://www.openssl.org/source/

如果沒有安裝gcc-c++,需要安裝它,執行如下命令:

yum install gcc-c++

安裝完成:

用上傳工具將安裝包拷貝到Home的任意目錄下

  將這幾個檔案拷貝至/usr目錄下:

sudo cp openssl-3.0.2.tar.gz /usr/
sudo cp pcre-8.45.tar.gz /usr/
sudo cp zlib-1.2.11.tar.gz /usr/
sudo cp nginx-1.20.2.tar.gz /usr/

安裝openssl-3.0.2:

回到/usr目錄下執行:

sudo tar -zxvf openssl-3.0.2.tar.gz
cd openssl-3.0.2
sudo ./config
sudo make && make install

如果出現  Can't locate IPC/Cmd.pm 這樣的錯誤如下圖

 則根據這篇文章安裝相關模組

(5條訊息) 編譯OpenSSL時報錯,Can‘t locate IPC/Cmd.pm in @INC_Sunlight_Rain_的部落格-CSDN部落格https://blog.csdn.net/sd4493091/article/details/122220902

安裝pcre-8.45:

回到/usr目錄下執行:

sudo tar -zxvf pcre-8.45.tar.gz
cd pcre-8.45
sudo ./configure
sudo make && make install

 安裝zlib-1.2.11:

回到/usr目錄下執行:

sudo tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
sudo ./configure
sudo make && make install

 

安裝nginx

回到/usr目錄下執行:

sudo tar zxvf nginx-1.20.2.tar.gz
cd nginx-1.8.0
sudo ./configure

configure的時候會驗證安裝環境,若依賴包環境安裝不全則可能出現如下錯誤

通過所有檢測: 

 執行:

sudo make && make install

等待編譯完成,執行whereis檢視nginx安裝目錄:

執行下面語句,將執行二進位制軟連結到/usr/sbin/nginx目錄下:

 sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

安裝成功

 

 將nginx寫入系統服務

執行下面語句在 /usr/lib/systemd/system/目錄下建立服務描述檔案nginx.service:

vi /usr/lib/systemd/system/nginx.service

輸入下面內容並儲存 

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

執行如下命令,重新載入配置檔案和.service檔案:

sudo systemctl daemon-reload

可以看到 服務已經被載入進來了

之後就可以啟用服務或者新增到啟動項了

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Troubleshooting

1. 如果埠被佔用,則無法執行nginx,預設nginx是通過80埠訪問的,所以需要排查端口占用的程式:

netstat -tunlp

如果systemd有報錯,可以通過如下命令檢視

sudo journalctl -fu  nginx.service

預設情況下日誌記錄在syslog,如果看報錯詳細,可以通過如下命令檢視

sudo cat /var/log/messages

如果有類似Can't open PID file /run/nginx.pid  這樣的報錯,需要修改nginx.service 中pid檔案的路徑為實際pid的路徑,具體路徑在nginx.conf中檢視:

執行下面命令:

sudo vi /usr/lib/systemd/system/nginx.service

將ExecStartPre與PIDFile項改為如下:

ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
PIDFile=/usr/local/nginx/logs/nginx.pid

全文完