Nginx 源碼安裝成服務

一、環境準備

  • 一臺裝有 CentOS 7.9 的虛擬機(IP: 192.168.40.81)
  • nginx-1.21.6.tar.gz 安裝包一個(版本隨意)

二、安裝

?1)解壓?nginx-1.21.6.tar.gz

tar -xzvf nginx-1.21.6.tar.gz
  • -tar:這是一個在 Linux 系統中常用的歸檔工具,能夠對多個文件或目錄進行打包操作。
  • -xzvf:此為命令的選項參數,是由多個選項組合而成的。
  • -x:代表 extract,也就是解包的意思,表明要對歸檔文件進行解壓操作。?
  • -z:意味著使用 gzip 算法對歸檔文件進行壓縮或解壓。?
  • -v:即 verbose,它的作用是在操作過程中顯示詳細的進度信息。?
  • -f:表示 file,此選項后面需要緊跟要操作的歸檔文件名稱。

這條命令的主要功能是對名為 nginx-1.21.6.tar.gz 的壓縮包進行解壓操作。具體來講,它會先運用 gzip 算法對壓縮包進行解壓縮,得到一個 tar 包,接著再對這個 tar 包進行解包處理,最終將其中包含的 Nginx 1.21.6 版本的源代碼文件釋放出來。解壓操作會在當前目錄下生成一個名為 nginx-1.21.6 的目錄,解壓出來的所有文件都存放在這個目錄中。

?2)配置編譯選項

cd nginx-1.21.6
./configure --prefix=/usr/local/nginx
  • ./configure:
  • 這是源碼編譯軟件時的標準第一步,其作用是檢查系統環境是否滿足編譯要求,像依賴庫、編譯器等是否齊全。 該命令會依據系統環境生成 Makefile 文件,而這個文件正是后續 make 和 make install 命令執行的依據。

  • --prefix=/usr/local/nginx:
  • 此為 configure 命令的一個參數,用于指定軟件的安裝路徑。在這個例子中,Nginx 會被安裝到 /usr/local/nginx 目錄下。
  • 安裝完成后,Nginx 的二進制文件會存放在 /usr/local/nginx/sbin/ 目錄,配置文件則位于 /usr/local/nginx/conf/ 目錄。

?出現下面的提示就是配置成功。

  • 中途如果有報錯,根據報錯提示,yum install -y 安裝依賴的軟件即可。?

?3)編譯安裝

make && make install

?最終會在 /usr/local 下安裝了 nginx:

?

?4)安裝成服務

  • ?創建服務腳本
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target
  • 重新加載系統服務
systemctl daemon-reload
  • ?啟動服務并設置為開機啟動
systemctl enable nginx.service --now
  • ?重啟虛擬機
reboot
  • 查看 nginx 服務狀態
systemctl status nginx

?5)手工啟動

nginx 也可以手工啟動。安裝成服務以后就不需要手工啟動。服務啟動跟手工啟動二選一。

# 進入安裝好的目錄 /usr/local/nginx/sbin
./nginx 啟動
./nginx -s stop 快速停止
./nginx -s quit 優雅關閉,在退出前完成已經接受的連接請求
./nginx -s reload 重新加載配置
在 Nginx 命令中, -s?是一個選項(option),用于向正在運行的 Nginx 主進程發送信號(signal),從而控制 Nginx 的行為(如停止、重啟、重新加載配置等)。 -s?后面需要跟具體的信號指令,常見的有:
信號指令作用
stop快速停止 Nginx(強制終止,不等待現有連接處理完畢)
quit優雅停止 Nginx(等待所有請求處理完畢后再停止)
reload重新加載配置文件(無需重啟服務,平滑應用新配置)
reopen重新打開日志文件(常用于日志切割,避免日志文件過大)

?6)訪問 Nginx

  • 在瀏覽器輸入虛擬機IP

  • 如果虛擬機防火墻關閉的話,應該能看到如下:

三、工作原理

Nginx 采用主進程 + 工作進程的多進程模型:

/sbin/nginx 啟動主進程。

  • 主進程啟動時讀取并解析配置文件(如?/etc/nginx/nginx.conf)。
  • 配置信息被解析為內存中的數據結構(如結構體、哈希表等)。
  • 主進程會創建監聽套接字(如監聽 80/443 端口)。

主進程通過 fork() 系統調用創建多個工作進程。

  • fork() 會復制主進程的內存空間,包括已解析的配置數據結構。因此,每個工作進程都獲得了主進程配置信息的副本。
  • 每個工作進程都會繼承主進程監聽套接字。
  • 所有工作進程并行監聽相同的端口,客戶端連接到達時,由操作系統內核決定哪個工作進程接收連接(通常采用負載均衡算法)。

客戶端請求 inde.html。

  • 工作進程通過事件循環(Event Loop)監聽多個連接的讀寫事件。
  • 當某個連接有數據可讀時,工作進程讀取請求、解析 HTTP 頭,并根據配置文件決定如何處理請求(如轉發到后端服務器、返回靜態文件等)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80565.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80565.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80565.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

L51.【LeetCode題解】438. 找到字符串中所有字母異位詞(四種方法)

目錄 1.題目 2.分析 暴力解法 方法1:排序(超時) 方法2:哈希表(險過) ★判斷兩個哈希表是否相同算法(通用方法,必須掌握) 能相等的前提:兩個哈希表的大小相等 哈希表有迭代器,可以使用范圍for從頭到尾遍歷 提交結果 優化方法:定長滑動窗口 提交結果 使用哈希數組更快…

Qt模塊化架構設計教程 -- 輕松上手插件開發

概述 在軟件開發領域,隨著項目的增長和需求的變化,保持代碼的可維護性和擴展性變得尤為重要。一個有效的解決方案是采用模塊化架構,尤其是利用插件系統來增強應用的功能性和靈活性。Qt框架提供了一套強大的插件機制,可以幫助開發者輕松實現這種架構。 模塊化與插件系統 模…

深入理解 HashMap 的索引計算:右移與異或的作用

在 Java 中,HashMap 是一種高效的數據結構,它通過將鍵映射到數組中的索引位置來實現快速的插入和查找。但之前看源碼總是理解到它要hash之后散列到數組中某一個位置,但卻從未深究它究竟怎么散列的,如果不夠散那就意味著hash沖突增…

overleaf較高級的細節指令

換行命令 原來代碼是將三個矩陣表達式在同一行顯示,使用aligned環境(需引入amsmath宏包,一般文檔導言區默認會引入),把三個矩陣的定義分別放在不同行,可通過\\換行。 對齊命令 &放在等號前&#xff0…

LiteLLM:統一API接口,讓多種LLM模型調用如臂使指

在人工智能迅猛發展的今天,各種大語言模型(LLM)層出不窮。對開發者而言,如何高效集成和管理這些模型成為一個棘手問題。LiteLLM應運而生,它提供了一個統一的API接口,讓開發者可以輕松調用包括OpenAI、Anthropic、Cohere等在內的多種LLM模型。本文將深入介紹LiteLLM的特性、…

Google語法整理

以下是從整理出的 Google 語法: site:指定域名,如 “apache site:bbs.xuegod.cn”,可查詢網站的收錄情況 。 inurl:限定在 url 中搜索,如 “inurl:qq.txt”,可搜索 url 中包含特定內容的頁面&a…

python 寫一個工作 簡單 番茄鐘

1、圖 2、需求 番茄鐘(Pomodoro Technique)是一種時間管理方法,由弗朗西斯科西里洛(Francesco Cirillo)在 20 世紀 80 年代創立。“Pomodoro”在意大利語中意為“番茄”,這個名字來源于西里洛最初使用的一個…

Compose Multiplatform iOS 穩定版發布:可用于生產環境,并支持 hotload

隨著 Compose Multiplatform 1.8.0 的發布,iOS 版本也引來的第一個穩定版本,按照官方的原話:「iOS Is Stable and Production-Ready」 ,而 1.8.0 版本,也讓 Kotlin 和 Compose 在移動端有了完整的支持。 在 2023 年 4 …

Jenkins 服務器上安裝 Git

安裝 Git # 更新包列表 sudo apt update# 安裝 Git sudo apt install git 驗證安裝 # 檢查 Git 版本 git --version 查看所有全局配置 git config --global --list 查看特定配置項 # 查看用戶名配置 git config --global user.name# 查看郵箱配置 git config --global u…

OpenHarmony SystemUI開發——實現全局導航欄和狀態欄關閉

在實際生產中,進場遇到需要關閉導航欄和狀態欄的需求,現分享解決辦法: 開發環境 OpenHarmony 5.0.0r 代碼分析 思路: launcher本身可以關閉 導航欄(實際是 公共事件,發送消息給systemUI來實控制&#x…

大模型微調終極方案:LoRA、QLoRA原理詳解與LLaMA-Factory、Xtuner實戰對比

文章目錄 一、微調概述1.1 微調步驟1.2 微調場景 二、微調方法2.1 三種方法2.2 方法對比2.3 關鍵結論 三、微調技術3.1 微調依據3.2 LoRA3.2.1 原理3.2.2 示例 3.3 QLoRA3.4 適用場景 四、微調框架4.1 LLaMA-Factory4.2 Xtuner4.3 對比 一、微調概述 微調(Fine-tun…

單片機-STM32部分:10-2、邏輯分析儀

飛書文檔https://x509p6c8to.feishu.cn/wiki/VrdkwVzOnifH8xktu3Bcuc4Enie 安裝包如下:根據自己的系統選擇,目前這個工具只有window版本哦 安裝方法比較簡單,都按默認下一步即可,注意不要安裝到中文路徑哦。 其余部分參考飛書文檔…

uniapp-商城-48-后臺 分類數據添加修改彈窗bug

在第47章的操作中,涉及到分類的添加、刪除和更新功能,但發現uni-popup組件存在bug。該組件的函數接口錯誤導致在小程序中出現以下問題:1. 點擊修改肉類名稱時,回調顯示為空,并報錯“setVal is not defined”&#xff0…

STM32-ADC模數轉換器(7)

目錄 一、ADC簡介 二、逐次逼近型ADC 三、ADC基本結構圖 四、規則組的四種轉換模式 五、轉換時間 對GPIO來說,它只能讀取引腳的高低電平,使用了ADC模數轉化器之后,就可以對高電平和低電平之間的任意電壓進行量化,最終用一個變…

智能商品推薦系統技術路線圖

智能商品推薦系統技術路線圖 系統架構圖 --------------------------------------------------------------------------------------------------------------- | 用戶交互層 (Presentation Layer) …

【Docker系列】docker inspect查看容器部署位置

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

標量/向量/矩陣/張量/范數詳解及其在機器學習中的應用

標量(Scalar)、向量(Vector)、矩陣(Matrix)、張量(Tensor)與范數(Norm)詳解及其在機器學習中的應用 1. 標量(Scalar) 定義&#xff1…

【2025年】基于電腦的jdk1.8通過idea創建springboot2.x版本(非常簡潔快速)

【2025年】基于電腦的jdk1.8通過idea創建springboot2.x版本 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是springboot的使用。前后每一小節的內容是存在的有:學習and理解的關聯性。【幫幫志系列文章】&…

SierraNet協議分析使用指導[RDMA]| 如何設置 NVMe QP 端口以進行正確解碼

在解碼RoCEv2數據包(包括TCP RDMA和RoCE RDMA)時,若捕獲的跟蹤數據無法正確解碼,通常需要執行特定的解碼步驟。對于RoCE RDMA跟蹤數據的處理,分析器主要采用兩種方式獲取必要信息以實現數據包解碼: 首先&am…

JavaScript基礎-局部作用域

在JavaScript中,理解不同種類的作用域是掌握這門語言的關鍵之一。作用域決定了變量和函數的可訪問性(即可見性和生命周期)。與全局作用域相對應的是局部作用域,它限制了變量和函數只能在其定義的特定范圍內被訪問。本文將深入探討…