NO.A.0002——Nginx入門概念剖析;nginx升級,降級,nginx web虛擬主機
阿新 • • 發佈:2020-11-18
一、從0構建Nginx WEB平臺
nginx是一款開源的,免費的WEB伺服器軟體,2019年3月12日被F5硬體負載均衡廠家以6.7億美金收購,nginx主要使用於釋出網站程式碼(開發人員編寫的)提供網頁資訊服務的,使用者通過瀏覽器可以實現頁面的訪問:
nginx web軟體預設只能給處理靜態網頁,不能直接處理動態網頁,動態網頁交於第三方的程式去解析,Nginx官方宣稱祁處理靜態網頁的併發能力可以達到5w/s其相當於Apache WEB 整體效能的5~10倍 :併發更高,效能更好(相對於Apache
Apache:是傳統web伺服器,開發與Nginx之前。現在nginx正在一步步取代Apache;也是用來處理靜態網頁的;不能處理動態網頁。
Tomcat:是Apache基金會旗下的一款產品:是處理動態網頁的。
靜態網頁:一般是跟後端資料庫不發生互動的網頁,網頁內容很少更新或者幾乎不更新。網頁檔案字尾命名通常是以htm、html、xml等結尾的。
動態網頁:跟後端資料發生互動,網頁內容經常更新,或者歲後端資料庫內容變化而更新;網頁檔案字尾以asp、php、jsp 等結尾。
二、基於Centos Linux 作業系統,從0開始構建一套Nginx WEB服務平臺,主要有兩種方式、
YUM二進位制的方式:部署方式相對比較簡單,快捷高效,可以自動校驗軟體的安全性可以自動校驗軟體包的正確性,可以自動解決軟體包之間的依賴關係。可以自動安裝軟體服務並設定為系統服務。不能自定義軟體服務特定的功能和模組。預設安裝完畢之後檔案和目錄相對比較分散,不變與後期的維護和管理。
MAKE原始碼編譯的方式:相對較複雜,不能校驗,不能自動安裝系統的依賴,自動配置自定義軟體的模組和功能,安裝目錄比較統一,便於後期的維護和管理。
三、基於MAKE原始碼編譯方式:
1、構建Nginx WEB平臺,首先從Nginx官網下載Nginx軟體包穩定的版本,nginx-1.160.tar.gz
主機IP地址:192.168.1.81
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
因為Nginx是基於C語言開發的原始碼軟體程式,預設不能被linux作業系統直接使用,需要藉助C編譯器將原始碼編譯器將原始碼檔案編譯生成二進位制檔案,所以需執行原始碼軟體部署三步驟:[root@localhost ~]# wget -c http://nginx.org/download/nginx-1.16.0.tar.gz -P /tmp/ //-c 斷點續傳, -P 指定特定目錄 下載nginx原始碼包。 [root@cdeba90ec46e ~]# tar -zxvf nginx-1.16.0.tar.gz //-x解壓、-z gzip壓縮、-v詳細、-f檔案
配置後檢查狀態://預編譯:主要是檢測linux系統安裝該軟體所需的依賴環境、庫檔案、檢測linux系統是否存在GCC編譯環境 (C編譯器),指定軟體服務部署的路徑,自定義軟體服務特定的模組和功能,最終會產生Makefile檔案。 [root@localhost nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module //設定我們的使用者和組www、便於後期管理我們的nginx, //需要我們手動建立。--with-http_stub_status_module 開啟狀態監控模組 //編譯:主要通過make編譯工具,讀取Makefile檔案,呼叫linux作業系統下GCC編譯環境(C編譯器)將軟體包中的 原始碼檔案編譯生成二進位制檔案,Makefile檔案用途,主要告知make編譯工具,在編譯原始碼檔案時, 在哪個原始碼開始編譯至哪個原始碼結束編譯。以及記錄編譯時的依賴關係 [root@localhost nginx-1.16.0]# make cc -c // 只編譯,不產生二進位制檔案 cc -o // 產生二進位制檔案 cc -o objs/nginx //把這個檔案拷貝到我們的安裝目錄之下。 [root@cdeba90ec46e nginx-1.16.0]# md5sum objs/nginx ec4cf649ae95588e9906eaa71baa354f objs/nginx //檢視得objs/nginx檔案的md5位354f [root@cdeba90ec46e nginx-1.16.0]# md5sum /usr/local/nginx/sbin/nginx ec4cf649ae95588e9906eaa71baa354f /usr/local/nginx/sbin/nginx //nginx檔案md5值是354f, 是因為make的時候把檔案拷貝到安裝目錄之下 //安裝:主要是將第二步make編譯產生的二進位制檔案,拷貝或者安裝至linux作業系統指定的安裝目錄 --prefix=/usr/local/nginx [root@localhost nginx-1.16.0]# make install [root@cdeba90ec46e nginx-1.16.0]# ls -l /usr/local/nginx/ total 0 drwxr-xr-x 2 root root 333 Nov 2 08:54 conf //配置檔案所在路徑 drwxr-xr-x 2 root root 40 Nov 2 08:54 html //釋出目錄,開發寫的程式碼存放位置, drwxr-xr-x 2 root root 6 Nov //日誌檔案 drwxr-xr-x 2 root root 19 Nov 2 08:54 sbin // 啟動程式
預設入口網站: 2、Nginx降級實戰:把nginx的版本從1.16.0降級為1.15.0(版本跨度太大可能編譯不成功)[root@cdeba90ec46e ~]# /usr/local/nginx/sbin/nginx //啟動服務 [root@cdeba90ec46e ~]# ps -ef |grep nginx root 3131 0 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx www 3132 3131 00:00:00 nginx: worker process root 3134 161 00:00:00 grep --color=auto nginx [root@cdeba90ec46e ~]# netstat -tunlp |grep -w 80 --color //-w 打印出來,檢視80埠 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3131/nginx: master [root@cdeba90ec46e ~]# netstat -tunlp |grep -v 80 //-v 取反。不看80埠 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address tate PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 110/sshd tcp6 0 0 :::22 :::* LISTEN 110/sshd [root@cdeba90ec46e ~]# firewall-cmd --add-port=80/tcp --permanent //開啟防火牆的80 埠 //centos7 [root@cdeba90ec46e ~]# iptables -t filter -A INPUT -m tcp -p --dport 80 -j ACCEPT //開啟80 埠 //centos6
//1、檢視服務的版本
[root@cdeba90ec46e ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.16.0
//2、發現我們的nginx版本比較高,降級
//我們降級需先知道降級的版本;降級到1.10.3版本,且不影響我們現有的服務。
//保留之前新版本的編譯引數
//現有的nginx編譯引數怎麼檢視
[root@cdeba90ec46e ~]# /usr/local/nginx/sbin/nginx -V // -V大寫
nginx version: nginx/1.16.0
built by gcc 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC)
configure arguments: --prefix=/usr/local/nginx --user=www --group=www
--with-http_stub_status_module //複製之前的引數預編譯使用
//3、需先將降級之後的版本解壓。
[root@cdeba90ec46e nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --user=www
--group=www --with-http_stub_status_module //-V查找出來的引數
//降級不執行make install,只執行make即可,只有安裝的時候需要makeinstall
//二進位制檔案我們備份為.old檔案:我們的服務沒有收到任何影響nginx呼叫檔案的時候是呼叫檔案的描述符
//新的objs/nginx檔案需讓它生效,不生效還是使用之前的檔案。
[root@cdeba90ec46e nginx-1.15.0]# kill USR2 cat /usr/local/nginx/logs/nginx.pid
// USR2陸續的把nginx.pid檔案的程式一步步停掉。
3、Nginx平滑升級:
和nginx降級的方案一樣,升級降級不必執行make install;
我們只要nginx二進位制檔案即可,無需安裝。
四、Nginx WEB虛擬主機企業實戰:
1、在企業生產環境中,一臺nginx伺服器通常不僅僅只釋出一個網站,而是基於單臺nginx伺服器,釋出+部署多套網站,可以最大化的利用Nginx WEB伺服器作業系統資源,避免資源的浪費。
2、將單臺Nginx WEB伺服器,釋出多套網站的方式,稱為虛擬主機,nginx釋出虛擬主機主要有三種方式。
基於同一個80埠,不同的IP地址:(多IP)不推薦,
基於同一個IP地址,不同的PORT埠:(多埠)使用者直接訪問都是用80埠,不推薦
基於同一個80埠,不同的訪問域名:(多域名)
3、基於同一個80埠,不同的訪問域名(v1.cvc.net、v2.cvc.net);來配置Nginx多網站虛擬主機,操作方案:
//1、切換到nginx安裝目錄下進入conf目錄,找到主配置檔案:
[root@cdeba90ec46e conf]#vim /ur/local/nginx/conf/nginx.conf
//shell三劍客awk、sed、grep去除配置檔案中#號和空行;
[root@cdeba90ec46e conf]# awk '/#/' nginx.conf
//第一個斜杆開始查詢,第二個斜槓查詢結束,查詢兩個斜槓裡面的內容
[root@cdeba90ec46e conf]# awk '!/#/' nginx.conf
//加上!號表示取反,表示我們不需要顯示空行。
[root@cdeba90ec46e conf]# awk '!/#/' nginx.conf|awk '!/^$/'
// ^ 表示空行;/^/以空開頭以空結尾;/^$/以空開頭,不以空結尾。
[root@cdeba90ec46e conf]# sed '/#/d' nginx.conf|sed '/^$/d' //刪除#號的空行的內容
[root@cdeba90ec46e conf]# grep -v "#" nginx.conf|grep -v "^$"
4、最終nginx.conf的程式碼是:
[root@cdeba90ec46e conf]# grep -v "#" nginx.conf|grep -v "^$"
worker_processes 1; //worker_processes表示nginx的服務程序,負責接收和處理使用者的請求。-9表強制kill
events { //events 時間模組
worker_connections 1024;
//worker_connections表示一個工作程序處理的使用者請求為1024,
//整個nginx可以處理最大的使用者併發為1024*4=4096個人使用者請求
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server { //server裡面的內容是我們的虛擬主機,也就是網站;預設nginx只有一套網站。
//若想釋出多套網站,我們複製server再貼上就可以了。
listen 80; //監聽埠
server_name localhost; //server_name監聽域名 ;localhost表示本機域名;
location / { //location表示我們的釋出目錄;
root html; // root:表示釋出目錄,html:表示相對路徑;
//絕對路徑是:/usr/local/nginx/html
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@cdeba90ec46e conf]# ps -ef |grep nginx
root 3131 0 nginx: master process /usr/local/nginx/sbin/nginx
//master不負責接收使用者請求,只負責管理程序。
www 3132 3131 nginx: worker process //worker程序
可以看到一個master和一個worker程序:(配置檔案裡面只有一個程序)
更改配置檔案4個程序:
[root@cdeba90ec46e conf]# /usr/local/nginx/sbin/nginx -s reload //重啟nginx
5、基於同一個80埠,不同的訪問域名(v1.cvc.net、v2.cvc.net)配置
[root@cdeba90ec46e conf]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 4;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
===========================================================================================
server { //第一個虛擬主機
listen 80;
server_name v1.cvc.net; //域名
location / {
root /usr/local/nginx/html/v1.cvc.net; //釋出目錄
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server { //第二個虛擬主機
listen 80;
server_name v2.cvc.net; //域名
location / {
root /usr/local/nginx/html/v2.cvc.net; //釋出目錄
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
6、手工方式建立mkdir兩個釋出目錄;
[root@cdeba90ec46e conf]# mkdir -p /usr/loca/nginx/html/v{1,2}.cvc.net //大括號表示範圍
[root@cdeba90ec46e html]# cat >/usr/local/nginx/html/v1.cvc.net/index.html<<EOF
<html>
<h1>v1.cvc.net Test Pages 域名:www.cvc.com</h1>
<hr color=red>
</html>
EOF
[root@cdeba90ec46e html]# cat >/usr/local/nginx/html/v2.cvc.net/index.html<<EOF
<html>
<h1>v2.cvc.net Test Pages 域名:www.cvc.com</h1>
<hr color=red>
</html>
EOF
[root@cdeba90ec46e /]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@cdeba90ec46e conf]# /usr/local/nginx/sbin/nginx -s reload //重啟nginx
7、內網環境下我們需要配置本地hosts檔案,域名解析;
1、看瀏覽器快取,沒有
2、看電腦本地的hosts檔案,DNS伺服器會將這個域名的請求交給我們本地DNS伺服器;
3、本地DNS有域名的配置,會直接發給瀏覽器;
4、若本地的DNS伺服器也沒有,會發往根,
本地DNS配置,hosts檔案配置;
本地電腦C:\Windows\System32\drivers\etc
192.168.1.81 v1.cvc.net
192.168.1.81 v2.cvc.net
然後再通過瀏覽器去訪問;
[root@cdeba90ec46e v2.cvc.net]# pkill nginx 停止nginx
此課程有nginx虛擬主機配置指令碼PS:52:49
https://ke.qq.com/webcourse/2025906/102127284#taid=8522396233296306&vid=5285890801428670469
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
<wiz_marker id="wiz-painter-root" style="">