Nginx安裝及配置
前情回顧
-
首先針對Nginx進程模型,我們回顧一下它的原理機制,我們知道它是通過Master通過fork分發任務節點給予
work節點
,然后work節點觸發了event
事件,之后通過一個access_muttex互斥鎖
,來單線程
調用我們的資源,之后就完成了服務間資源的調度和分配了 -
在Nginx模型中有很多服務模塊供我們使用,比如
核心模塊
HTTP模塊、EVENT模塊、MAIL模塊,還有一些常用模塊及其一些第三方模塊HTTP fastcgi、HTTP Proxy等模塊 -
關于這些模塊我們可以按功能可以分為三大類
handler處理模塊、Filters模塊以及Proxy代理模塊
,Handler用于處理請求,Filters對請求進行過濾,Proxy用做代理服務器,使用應用場景可以參考下圖:?
Nginx安裝流程
首先檢查外網環境是否能正常使用和檢查yum是否能正常使用
- 檢測網絡能否正常連接
若網絡無法正常使用:建議檢查DNS服務、網卡信息以及yum國內源是否已經配置,防火墻是否正常關閉,然后重啟網卡
- 安裝Nginx依賴環境
# PCRE庫安裝
yum -y install pcre-devel.x86_64 # 切換安裝路徑
cd /usr/src# 這里以Nginx1.26.1版本為例,首先進行源碼的安裝
wget -c http://nginx.org/download/nginx-1.26.1.tar.gz # 解壓tar.gz包
tar -xzf nginx-1.26.1.tar.gz# 進入Nginx解壓目錄,修改Nginx版本信息為JWS(預防機型兼容問題)
cd nginx-1.26.1
sed -i -e 's/1.26.1//g' -e 's/nginx\//JWS/g' -e 's/"NGINX"/"JWS"/g' src/core/nginx.h# 預編譯
useradd www # 創建用戶
userdel -r www 2>/dev/null || true; # 若存在重復用戶,予以刪除# 編譯依賴環境說明:這一部分表示創建用戶(useradd -r -s /sbin/nologin www),http_stub_status_module(用于檢查Nginx是否為運行狀態)、 http_ssl_module(啟用http和ssl支持),http_realip_module(如果有cdn或負載均衡,此模塊能記錄真實的ip),http_gzip_static_module(使用gzip對模塊進行壓縮)useradd -r -s /sbin/nologin www && ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module# 編譯并安裝
make&&make install#檢查是否安裝成功,看到ok就安裝成功啦!
/usr/local/nginx/sbin/nginx -t#啟動Nginx并檢查后臺進程運行狀態
/usr/local/nginx/sbin/nginx #啟動命令
ps -ef | grep nginx #檢查后臺進程是否運行(需要看到master,worker)############ 至此Nginx就安裝成功了 ############
我們看到運行能成功運行后的進程使用情況如下:
并且此時我們就可以通過訪問我們本機網卡本機ip就可以訪問了我們的Ngixn服務了
Nginx服務無法正常使用如何排查解決方案
- 首先檢查服務狀態是否正常
/usr/local/nginx/sbin/nginx -s reload #修改Nginx配置需要使用該配置文件加載Nginx配置
/usr/local/nginx/sbin/nginx -s stop #暫停Nginx服務
/usr/local/nginx/sbin/nginx #啟動Nginx服務
關閉了Nginx服務
- 如果Nginx服務在關閉時出現報錯,有進程和端口占用的情況
ps -ef | grep nginx #排查Nginx進程占用情況
- 使用kill命令殺進程
## 第一種方式 直接通過服務名刪除
pkill -9 nginx
## 第二種方式(我是根據我的圖片哈,大家只需要看自己占用的進程號即可) 通過ps命令查看后,選擇占用的進程號進行殺死
kill -9 5182 && kill -9 5183
- 然后通過該命令繼續排查,若沒有輸出內容,則表示無Nginx服務在運行
netstat -tnlp | grep nginx ## 檢查服務
netstat -tnlp | grep -E "80|443" ##檢查服務是否有端口占用
檢查端口是否還在正在運行
【處于運行狀態】
【處于非運行狀態】
- 上述問題排查后發現還有問題,可以檢查一次防火墻狀態,觀察是否開放端口或者保持關閉防火墻
# 防火墻狀態
systemctl status firewalld.service
# 防火墻打開
systemctl start firewalld.service
# 防火墻關閉
systemctl stop firewalld.service
# 防火墻重啟
systemctl restart firewalld.service
防火墻打開,我們就需要開放80端口
# 開放端口使用命令
firewall-cmd --zone=public --add-port=80/tcp --permanent
開放80端口
,之后重啟防火墻,讓配置生效
防火墻關閉
Nginx配置文件詳解
我們安裝完Nginx服務器之后,就讓我們一起來聊聊Nginx服務器以便于我們后期更好的運維和管理Nginx服務器
首先Nginx服務器是存放在/usr/local/nginx/conf/nginx.conf
路徑下,下面我們就來分析一下nginx.conf這個配置文件相關信息吧!!!
- 首先來查詢一下Ngixn中worker進程使用情況(
監測worker狀態
)
ps -eo psr,pid,args | grep nginx
-
監測Nginx占用cpu利用率
top -p $(pgrep -d ',' nginx)
下面我們進入這個文件來分析一下這個文件
user nobody
這里代表Ngiinx指定運行的用戶和用戶組worker_processes
則負責cpu內核進程數的調整events
則代表事件處理模塊error_log代表錯誤日志存放位置
,后面的notice、info
錯誤日志優先級(notice>info)pid
代表Nginx主進程id路徑地events
代表事件處理模塊忙著里面用worker_connectin
設置了worker線程的最大連接數,當然我們也還可以在這里面設置其他屬性設置worker進程,比如說multi-accept on
加上這個屬性可以讓worker進程一次接收多個連接
HTTP模塊之虛擬服務器配置
- Http屬性配置部分
在Http模塊中,include
里面包含中其他配置文件,senfile
用于高效文件傳輸,keepalive_timeout
代表保持連接超時的時間,gzip
用于壓縮.
- Server定義的虛擬機部分
- 在Server模塊中的配置通常會設置
listen監聽端口
、定義server_name
,以及根據設置location
的值設置網頁所在的根目錄
,以及在該目錄下要查找的頁面索引
- 在設置
location
屬性時,如果我們單個的將頁面都填入index
索引,顯然會顯得十分繁瑣,為此我們引入了URL匹配規則和處理方式精準匹配(=)、前綴匹配(^~)、正則匹配(~或~*)
- 在
location
中可以設置屬性設置root文件系統路徑,try_file
來設置順序查找文件,通過expires
來設置緩存
Nginx虛擬主機實戰
5.1虛擬主機
好比虛擬服務克隆技術,針對同一個WEB服務端部署多個網頁,這也是我們俗稱的一臺服務多個站點
5.2 實現步驟:創建兩個WEB網頁目錄,并且分別部署到不同的index.html頁面,然后我在我的nginx服務器上部署兩個不同的Web站點,端口位于同一端口
虛擬服務server組成(listen、server_name、location
)
# 1. 打開nginx.conf文件
vim /usr/local/nginx/conf/nginx.conf# 2.在HTTP模塊中增加server模塊(增加2個虛擬服務)
server{listen 80;server_name www.111.com;access_log logs/exp.access.log; #日志文件location /{ root html/tt1; #web系統目錄index index.html index.htm; #索引}
}server{listen 80;server_name www.666.com;access_log logs/exp2.access.log; #日志文件location /{root html/tt2; #web系統目錄index index.html index.htm; #索引}
}# 3.dns域名服務加載,修改hosts文件目錄c://windows/system32/divers/hosts,這里將www.111.com和www.666.com放在本地hosts路徑實現ip路徑映射(host 文件加入內容---->主機IP 映射域名 例如:10.2.53.5 www.666.com)# 5.切換目錄,創建網頁
cd /usr/local/nginx/html/
mkdir {tt1,tt2}
# 將index.html拷貝一份用戶查看虛擬主機創建效果
cp index.html tt1/
cp index.html tt2/
#可以嘗試改變index.html內容后面訪問域名可以加以區分# 4.重啟nginx-reload服務
/usr/local/nginx/sbin/nginx -s reload
``
注意不要用谷歌瀏覽器
進行訪問可以用IE、Firefox等瀏覽器都可訪問