Nginx
什么是Nginx?
Nginx是一個輕量級/高性能 的反向代理Web服務器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 協議。它實現非常高效的反向代理、負載平衡,可以處理2-3萬并發連接數,官方監測能支持5萬并發,現在中國使用nginx網站用戶有很多,例如:新浪、網易、騰訊等。
其他 web 網站服務軟件
Tomcat:Java Servlet和JSP的容器,用于托管Java Web應用程序。
IIS:Windows平臺的Web服務器,與Windows緊密集成,支持ASP.NET等技術。
Nginx 有哪些優點?
? 跨平臺、配置簡單。
? 非阻塞、高并發連接:處理 2-3 萬并發連接數,官方監測能支持5萬并發。
? 內存消耗小:開啟 10 個 Nginx 才占 150M 內存。
? 成本低廉,且開源。
? 穩定性高,宕機的概率非常小。
? 內置的健康檢查功能:如果有一個服務器宕機,會做一個健康檢查,再發送的請求就不會發送到宕機的服務器了。重新將請求提交到其他的節點上。
Nginx 應用場景
? http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。
? 虛擬主機。可以實現在一臺服務器虛擬出多個網站,例如個人網站使用的虛擬機。
? 反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用 Nginx 做反向代理。并且多臺服務器可以平均分擔負載,不會應為某臺服務器負載高宕機而某臺服務器閑置的情況。
? Nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口網關,對每個接口服務進行攔截。
Nginx 和 Apache 的差異
特點
Apache:
創建多個進程或線程,而每個進程或線程都會為其分配 cpu 和內存(線程要比進程小的多,所以 worker 支持比 perfork 高的并發),并發過大會榨干服務器資源。
Nginx:
采用單線程來異步非阻塞處理請求(管理員可以配置 Nginx 主進程的工作進程的數量)(epol),不會為每個請求分配 cpu 和內存資源,節省了大量資源,同時也減少了大量的 CPU 的上下文切換。所以才使得 Nginx 支持更高的并發。
區別
1.輕量級:Nginx 相比 Apache 占用更少的內存和系統資源,特別適合高并發場景。
2.靜態資源處理性能:Nginx 在處理靜態資源時性能遠超 Apache,速度更快。
3.反向代理加速:Nginx 支持無緩存的反向代理,可以加速網站訪問,優化流量分發。
4.性能不依賴硬件:Nginx 的性能和可伸縮性不依賴于高性能硬件,Apache 需要較強的硬件資源才能獲得高效能。
5.熱部署支持:Nginx 支持熱部署,可以在不影響服務的情況下進行配置修改或軟件升級,而 Apache 需要重啟才能應用修改。
6.異步與同步處理:Nginx 是異步非阻塞的處理方式,一個進程可以處理多個連接;Apache 則是同步多進程,一個進程處理一個連接。
7.模塊化設計:Nginx 高度模塊化,開發模塊相對簡單,并且自帶的組件比 Apache 更少,適合針對特定需求進行優化。
8.高并發性能:Nginx 在高并發場景下能保持低資源消耗的同時提供高性能,而 Apache 則在高并發下消耗更多資源。
9.配置簡潔:Nginx 的配置文件相對簡潔,容易上手和維護;而 Apache 的配置文件復雜,學習成本較高。
這些差異使 Nginx 在處理高并發、靜態資源、反向代理等場景下更受歡迎,而 Apache 則更適用于復雜的動態內容管理或特定模塊需求的環境。
Nginx 默認的配置文件路徑
在基于RHEL(如CentOS、Fedora)的Linux發行版中,使用yum安裝 Nginx后,默認的配置文件路徑通常如下:
1.主配置文件:
?/etc/nginx/nginx.conf
這個是Nginx的主配置文件,所有的全局配置選項(如worker進程數、日志文件路徑、http塊設置等)都會在這里定義。
2.站點虛擬主機配置目錄:
?/etc/nginx/conf.d/
這個目錄通常包含具體的站點虛擬主機配置文件。默認的站點配置文件為:
?/etc/nginx/conf.d/default.conf
可以在這里添加、修改或刪除站點配置文件。
3.網站根目錄(默認網頁目錄):
?/usr/share/nginx/html/
這是Nginx安裝后,默認的網頁存放目錄。默認的網頁文件(如index.html)也存放在這個路徑中。
4.日志文件路徑:
日志文件路徑可以在nginx.conf文件中通過access_log和error_log指令進行更改。
?訪問日志:/var/log/nginx/access.log
?錯誤日志:/var/log/nginx/error.log
YUM安裝的默認目錄和文件:
/etc/nginx/ # 配置文件目錄 ├── nginx.conf # 主配置文件 └── conf.d/ # 站點配置目錄 └── default.conf # 默認站點配置文件 /usr/share/nginx/html/ # 默認網站根目錄 /var/log/nginx/ # 日志文件目錄
Nginx 服務的 YUM 安裝
使用官方YUM源
# nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
啟動
systemctl start nginx netstat -lntp | grep nginx
查看版本、系統狀態、開啟模塊等信息
nginx -v
Nginx 服務的編譯安裝
官網下載軟件包https://nginx.org/en/download.html。生產環境一般用穩定版。
1. 關閉防火墻并上傳安裝包
1. 關閉防火墻:
systemctl stop firewalld systemctldisablefirewalld setenforce 0
2. 將 Nginx 安裝包上傳至/opt目錄:
`nginx-1.12.0.tar.gz`
2. 安裝依賴包
Nginx 的配置及運行需要pcre、zlib、openssl等軟件包的支持,安裝這些軟件開發包提供相應的庫和頭文件:
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
3. 創建 Nginx 運行用戶和組
Nginx 默認以nobody身份運行,建議創建專門的用戶和組來更好地控制權限:
`useradd -M -s /sbin/nologin nginx`
4. 編譯安裝 Nginx
1. 解壓 Nginx 源碼包:
cd/opt tar zxvf nginx-1.12.0.tar.gz -C /opt/
2. 進入解壓后的目錄并配置編譯選項:
cdnginx-1.12.0/ ./configure --prefix=/usr/local/nginx # 指定 Nginx 的安裝路徑 --user=nginx # 指定運行 Nginx 的用戶 --group=nginx # 指定運行 Nginx 的組 --with-http_stub_status_module # 啟用 http_stub_status_module 模塊以支持狀態統計 #清爽版 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module ![]()
3. 編譯并安裝:
make && make install
4. 創建命令符號鏈接,讓系統可以識別nginx命令:
`ln-s /usr/local/nginx/sbin/nginx /usr/local/sbin/`
5. 管理 Nginx 服務
1. 檢查 Nginx 配置文件是否正確:
nginx -t
2. 啟動 Nginx:
/usr/local/nginx/sbin/nginx # 或 nginx -g"daemon off;" # 不要以守護進程(daemon)模式運行。
3. 停止 Nginx:
cat/usr/local/nginx/logs/nginx.pid # 查看 Nginx 的 PID kill-3kill-s QUIT killall -3 nginx killall -s QUIT nginx
4. 重載 Nginx 配置:
kill-1kill-s HUP killall -1 nginx killall -s HUP nginx
5. 分割日志并重新打開日志文件:
kill-USR1
6. 平滑升級 Nginx:Nginx 會啟動新版本的可執行文件,并且不會中斷現有的連接。這種方式可以實現平滑升級。
kill-USR2
6. Nginx 新版本平滑升級
大致步驟:
下載、解壓軟件包 -> 進入軟件包目錄 ./configure 配置 -> make 編譯 -> 替換nginx二進制文件 -> make upgrade
1. 解壓新版本的 Nginx 源碼包:
tar -zxvf nginx-1.xx.xx.tar.gz cdnginx-1.xx.xx
2. 配置并編譯新版本 Nginx:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module make
3. 備份舊的 Nginx 二進制文件并替換為新版本(objs目錄):
mv/usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old cpobjs/nginx /usr/local/nginx/sbin/nginx
4. 升級 Nginx:
make upgrade # 確保當前 Nginx 進程是通過 /usr/local/nginx/sbin/nginx 啟動的或者先停止舊版本 Nginx,然后啟動新版本:
killall nginx /usr/local/nginx/sbin/nginx
7. Nginx 添加系統服務
方法一:使用init.d添加 Nginx 系統服務(腳本)
1. 編輯 Nginx 啟動腳本:
`vim /etc/init.d/nginx`
2. 填寫以下腳本內容:
#!/bin/bash #chkconfig: - 99 20 #description: Nginx Service Control Script COM="/usr/local/nginx/sbin/nginx" PID="/usr/local/nginx/logs/nginx.pid" case"$1"in start) $COM ;; stop) kill-s QUIT $(cat$PID) ;; restart) $0stop $0start ;; reload) kill-s HUP $(cat$PID) ;; *) echo"Usage:$0{start|stop|restart|reload}" exit1 esac exit0 ![]()
3. 修改文件權限并添加為系統服務:
chmod+x /etc/init.d/nginx chkconfig --add nginx
4. 啟動、停止 Nginx 服務:
systemctl stop nginx systemctl start nginx
方法二:使用systemd添加 Nginx 系統服務
1. 編輯 Nginx 的systemd服務文件:
`vim /lib/systemd/system/nginx.service`
2. 填寫以下內容:
[Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP$MAINPID ExecStop=/bin/kill -s QUIT$MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target ![]()
3. 各個字段說明:
?[Unit]
?Description:描述服務
?After:定義服務的依賴,網絡服務啟動后再啟動 Nginx。
?[Service]
?Type=forking:Nginx 以后臺模式運行。
?PIDFile:指定 Nginx 進程 ID 的存放路徑。
?ExecStart:Nginx 的啟動命令。
?ExecReload:Nginx 的重載命令。
?ExecStop:Nginx 的停止命令。
?PrivateTmp=true:為 Nginx 分配獨立的臨時空間。
?[Install]
?WantedBy=multi-user.target:設置服務在多用戶模式下啟動。
4. 修改權限并啟動 Nginx 服務:
chmod754 /lib/systemd/system/nginx.service systemctl start nginx.service systemctlenablenginx.service
Nginx 的2個進程
查看進程后有3個進程,實際有2個Nginx的進程,分別為:
master進程:管理worker進程,加載配置文件
worker進程:處理連接請求
詳解:
ps -elf | grep nginx 1 S root 17968 1 0 80 0 - 5146 sigsus 11:27 ? 0000 nginx: master process /usr/local/nginx/sbin/nginx 5 S nginx 17969 17968 0 80 0 - 5257 ep_pol 11:27 ? 0000 nginx: worker process 0 S root 18037 15136 0 80 0 - 28206 pipe_w 11:34 pts/0 0000 grep --color=auto nginx
這三個進程涉及 Nginx 的工作機制:
1.nginx: master process /usr/local/nginx/sbin/nginx
? 這是 Nginx 的主進程,負責整體管理。它啟動后會監聽配置文件變化,管理多個工作進程(worker process)。主進程本身不處理實際的請求,而是用于:
? 讀取和解析配置文件
? 管理子進程(啟動、停止、重啟等)
? 處理信號(如重載、停止等)
2.nginx: worker process
? 這些是 Nginx 的工作進程,負責實際處理客戶端請求。每個 worker 進程獨立處理請求,包括靜態內容、代理請求、負載均衡等。Nginx 使用異步的、事件驅動的模型,所以一個 worker 可以同時處理大量連接。
3.grep --color=auto nginx
? 這部分是執行的grep命令,用于查找與 Nginx 相關的進程。-color=auto參數會將匹配到的字符串(這里是 “nginx”)高亮顯示。
總結:主進程負責管理,工作進程負責處理實際的請求。
Nginx 命令管理及進程控制
1.啟動與停止 Nginx
?后臺啟動 Nginx:
`nginx` AI寫代碼bash該命令啟動 Nginx 進程并以后臺模式運行。
?前臺啟動 Nginx:
nginx -g"daemon off;"該命令啟動 Nginx 進程,并以前臺模式運行。此模式主要用于調試或某些特殊場景。
?停止 Nginx(優雅停止):
nginx -s quit kill-3這三種方式都可以優雅地停止 Nginx,完成當前連接后停止服務。nginx -s quit是通過發送信號讓主進程優雅停止,而kill -s QUITkill-s QUIT
2.重新加載 Nginx 配置
?重新加載配置:
這幾種方法用于在不停止 Nginx 的情況下,重新加載配置文件。nginx -s reload通過向 Nginx 主進程發送HUP信號來重新加載配置,而kill -1
nginx -s reload kill-1kill-s HUP
3.其他進程管理命令
?檢查配置文件語法:
nginx -t該命令檢查 Nginx 配置文件語法的正確性,并報告是否有錯誤。
?日志文件切割(重新生成日志文件):
kill-USR1向 Nginx 主進程發送USR1信號,用于重新生成日志文件。該命令常用于日志分割,將舊的日志文件關閉并重新打開新日志文件。
鏈接: https://blog.csdn.net/qq_44421043/article/details/142467150
-
Web
+關注
關注
2文章
1287瀏覽量
71325 -
服務器
+關注
關注
13文章
9784瀏覽量
87856 -
nginx
+關注
關注
0文章
170瀏覽量
12582
原文標題:從Nginx小白到運維高手:安裝配置與進程管理實戰教程
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
nginx重啟命令linux步驟是什么?
nginx重啟命令linux步驟是什么?
NanoPi NEO - 可靠的Nginx 網絡服務器
nginx錯誤頁面配置
主要學習下nginx的安裝配置
nginx和tomcat區別

一文讀懂Nginx、Apache工作原理
Apache Doris正式成為 Apache 頂級項目
Nginx入門指南
Nginx 如何實現高性能低消耗

評論