1. 程式人生 > 實用技巧 >NO.A.0002——Nginx入門概念剖析;nginx升級,降級,nginx web虛擬主機

NO.A.0002——Nginx入門概念剖析;nginx升級,降級,nginx web虛擬主機

一、從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
[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檔案
因為Nginx是基於C語言開發的原始碼軟體程式,預設不能被linux作業系統直接使用,需要藉助C編譯器將原始碼編譯器將原始碼檔案編譯生成二進位制檔案,所以需執行原始碼軟體部署三步驟:
//預編譯:主要是檢測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    // 啟動程式
配置後檢查狀態:
[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
預設入口網站: 2、Nginx降級實戰:把nginx的版本從1.16.0降級為1.15.0(版本跨度太大可能編譯不成功)
//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="">