天天看點

BM00002——|nginx|入門概念剖析|

一、從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

[[email protected] ~]#   wget   -c  http://nginx.org/download/nginx-1.16.0.tar.gz   -P  /tmp/     //-c 斷點續傳,  -P 指定特定目錄    下載下傳nginx源碼包。
[[email protected] ~]# tar -zxvf nginx-1.16.0.tar.gz        //-x解壓、-z gzip壓縮、-v詳細、-f檔案
           

因為Nginx是基于C語言開發的源代碼軟體程式,預設不能被linux作業系統直接使用,需要借助C編譯器将源代碼編譯器将源代碼檔案編譯生成二進制檔案,是以需執行源代碼軟體部署三步驟:

//預編譯:主要是檢測linux系統安裝該軟體所需的依賴環境、庫檔案、檢測linux系統是否存在GCC編譯環境(C編譯器),指定軟體服務部署的路徑,自定義軟體服務特定的子產品和功能,最終會産生Makefile檔案。
[[email protected] 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編譯工具,在編譯源代碼檔案時,在哪個源碼開始編譯至哪個源碼結束編譯。以及記錄編譯時的依賴關系
[[email protected] nginx-1.16.0]#  make  
cc -c    // 隻編譯,不産生二進制檔案
cc -o    // 産生二進制檔案
cc -o objs/nginx   //把這個檔案拷貝到我們的安裝目錄之下。
[[email protected] nginx-1.16.0]# md5sum objs/nginx         
ec4cf649ae95588e9906eaa71baa354f  objs/nginx      //檢視得objs/nginx檔案的md5位354f
[[email protected] 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
[[email protected] nginx-1.16.0]#  make install
[[email protected] 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    // 啟動程式
           

配置後檢查狀态:

[[email protected] ~]# /usr/local/nginx/sbin/nginx   //啟動服務
[[email protected] ~]# ps -ef |grep nginx
root        3131       0  0 09:01 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www         3132    3131  0 09:01 ?        00:00:00 nginx: worker process
root        3134     161  0 09:02 ?        00:00:00 grep --color=auto nginx
[[email protected] ~]# netstat -tunlp |grep -w 80  --color       //-w 列印出來,檢視80端口
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3131/nginx: master
[[email protected] ~]# netstat -tunlp |grep -v 80                //-v 取反。不看80端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       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            
[[email protected] ~]#  firewall-cmd --add-port=80/tcp  --permanent    //開啟防火牆的80 端口   //centos7
[[email protected] ~]#  iptables -t filter -A INPUT -m tcp -p --dport 80 -j ACCEPT     //開啟80 端口   //centos6
           

預設門戶網站:

BM00002——|nginx|入門概念剖析|

2、Nginx降級實戰:把nginx的版本從1.16.0降級為1.15.0(版本跨度太大可能編譯不成功)

//1、檢視服務的版本
[[email protected] ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.16.0
//2、發現我們的nginx版本比較高,降級  //我們降級需先知道降級的版本;降級到1.10.3版本,且不影響我們現有的服務。
//保留之前新版本的編譯參數
//現有的nginx編譯參數怎麼檢視
 [[email protected] ~]# /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、需先将降級之後的版本解壓。
[[email protected] 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檔案需讓它生效,不生效還是使用之前的檔案。
[[email protected] 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目錄,找到主配置檔案:
[[email protected] conf]#vim /ur/local/nginx/conf/nginx.conf
//shell三劍客awk、sed、grep去除配置檔案中#号和空行;
[[email protected] conf]# awk '/#/' nginx.conf          //第一個斜杆開始查找,第二個斜杠查找結束,查找兩個斜杠裡面的内容
[[email protected] conf]# awk '!/#/' nginx.conf         //加上!号表示取反,表示我們不需要顯示空行。
[[email protected] conf]# awk '!/#/' nginx.conf|awk '!/^$/'       // ^ 表示空行;/^/以空開頭以空結尾;/^$/以空開頭,不以空結尾。
[[email protected] conf]# sed  '/#/d' nginx.conf|sed '/^$/d'      //删除#号的空行的内容
[[email protected] conf]# grep -v "#" nginx.conf|grep -v "^$"
           

4、最終nginx.conf的代碼是:

[[email protected] 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;
        }
    }
}
           
[[email protected] conf]# ps -ef |grep nginx
root        3131       0  0 10:39 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx    //master不負責接收使用者請求,隻負責管理程序。
www         3132    3131  0 10:39 ?        00:00:00 nginx: worker process                                //worker
可以看到一個master和一個worker程序:(配置檔案裡面隻有一個程序)
更改配置檔案4個程序:
[[email protected] conf]# /usr/local/nginx/sbin/nginx -s reload   //重新開機nginx
           

5、基于同一個80端口,不同的通路域名(v1.cvc.net、v2.cvc.net)配置

[[email protected] 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兩個釋出目錄;

[[email protected] conf]# mkdir -p /usr/loca/nginx/html/v{1,2}.cvc.net  //大括号表示範圍
[[email protected] 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
[[email protected] 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

[[email protected] /]# /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
[[email protected] 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
然後再通過浏覽器去通路;
[[email protected] v2.cvc.net]# pkill nginx    停止nginx
           

繼續閱讀