[學習筆記]在Linux中使用原始碼編譯的方式安裝Nginx
阿新 • • 發佈:2022-03-17
準備工作
準備nginx原始碼包:
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 這樣的錯誤如下圖
則根據這篇文章安裝相關模組
安裝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
全文完