一、從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
預設門戶網站:
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