一 nginx web服務軟件php
用戶訪問網站的流程:html
利用DNS進行域名的解析python
利用tcp的三次握手過程創建連linux
http請求報文數據:nginx
1.0:tcp的短連接web
什麼是短連接:在http/1.0中默認使用短連接,也就是客戶端和服務端每進行一次http操做都會創建一次連接,同時操做完畢以後也會就會當即斷開鏈接。也就是說客戶端每訪問一次服務端就會創建一次連接,訪問結束之後就會當即斷開鏈接正則表達式
1.1:tcp的長鏈接數據庫
什麼是長鏈接:從http/1.1事後默認使用長鏈接,用於保持鏈接的特性,若是使用長鏈接的http請求會在響應頭加上Connection:keep-alive這段代碼。在使用長鏈接的額狀況下,客戶端和服務端之間創建的http協議在一次請求創建鏈接事後就會保持連接,客戶端再次訪問服務器的時候仍是基於此次的連接進行訪問。keep-alive不是永久保存連接的,他只有一段時間的保持連接不斷,能夠在不一樣服務器上面設置保存連接的時間後端
http響應報文數據:瀏覽器
curl -I www.baidu.com : 利用命令顯示響應報文起始行和包頭信息。
curl -v www.baidu.com :顯示http協議訪問訪問網站的詳細過程信息。
wget --debug www.baidu.com : 顯示輸出信息
利用tcp的四次揮手過程斷開鏈接
url和uri的區別:
url:是uniform resource locator縮寫,是統一資源定位器,它是一種具體的url。能夠用來標識一個資源,而且還指明如何locate(定位)這個資源。
uri:是uniform resource identifier的縮寫,廷議資源標識符,用於標識一個資源的。
網頁資源:靜態資源頁面和動態資源頁面
靜態資源頁面幾個特徵:
1) 每一個頁面都有一個固定的URL地址,且URL通常以.html、.htm、.shtml等常見形式爲後綴,並且地址中不含有問號「?」或「&」等特殊符號。 2) 網頁內容一經發布到網站服務器上,不管是否有用戶訪問,每一個網頁的內容都是保存在網站服務器文件系統上的,也就是說,靜態網頁是實實在在保存在服務器上的文件實體,每一個網頁都是一個獨立的文件。 3) 網頁內容是固定不變的,所以,容易被搜索引擎收錄(容易被用戶找到)(優勢)。 4) 由於網頁沒有數據庫的支持,因此在網站製做和維護方面的工做量較大,當網站信息量很大時,徹底依靠靜態網頁比較困難(缺點)。 5) 網頁的交互性較差,在程序的功能實現方面有較大的限制(缺點)。 6) 網頁程序在用戶瀏覽器端解析,如IE瀏覽器,程序解析效率很高,因爲服務器端不進行解析,而且不須要讀取數據庫,所以服務器端能夠接受更多的併發訪問。當客戶端向服務器請求數據時,服務器會直接從磁盤文件系統上返回數據(不作任何解析)。待客戶端拿到數據後,在瀏覽器端解析並展示出來(優勢)。
動態資源頁面幾個特徵:
1) 網頁擴展名後綴常見爲:.asp、.aspx、.php、.js、.do、.cgi等。 ※ 2) 網頁通常以數據庫技術爲基礎,大大下降了網站維護的工做量。 3) 採用動態網頁技術的網站能夠實現更多的功能,如用戶註冊、用戶登陸、在線調查、投票、用戶管理、訂單處理、發博文等。 4) 動態網頁並非獨立存在於服務器上的網頁文件,當用戶請求服務器上的動態程序時,服務器解析這些程序並可能經過讀取數據庫來返回一個完整的網頁內容。 5) 動態網頁中的「?」在搜索引擎的收錄方面存在必定的問題,搜索引擎通常不會從一個網站的數據庫中訪問所有網頁,或者出於技術等方面的考慮,搜索蜘蛛通常不會去抓取網址中「?」後面的內容,所以在企業經過搜索引擎進行推廣時,須要針對採用動態網頁的網站作必定的技術處理(僞靜態技術),以便適應搜索引擎的抓取要求。(缺點) 程序在服務器端解析,這至關於顧客點餐,飯店廚師作飯作菜,耗時長、效率低。在這個過程當中,會消耗大量的CPU和內存、I/O等資源,而且多數還要提供讀取數據庫等服務,所以,其訪問效率遠不如靜態網頁,在服務器端解析動態程序的服務常見的有PHP引擎、Java容器(Tomcat、Resin、Jboss、Weblogic)等。
僞靜態資源頁面:從網站的URL地址看,僞靜態表面上看起來是靜態內容(如地址結尾帶html),但這實際上是經過rewrite規則實現的URL地址重寫。改寫後的URL地址規範、美觀,有利於搜索引擎抓取,以及提高用戶訪問體驗。如:http://oldboy.blog.51cto.com/2561410/803606和http://www.discuz.net/forum-3967-1.html這兩個地址都是僞靜態的。由於僞靜態網頁仍是動態網頁,因此從性能上考慮,僞靜態功能不但沒有提高網站性能,反而會下降網站的性能。這一點讀者要理解。可能有些讀者就會有疑問了,爲何動態網頁不能直接轉成靜態網頁呢?
應用部署nginx網站服務:
支持高併發:可以支持幾萬併發鏈接(特別是靜態小文件業務環境)
資源消耗小:在3萬併發鏈接下,開啓10個nginx線程消耗的內存不懂200mb
能夠作http反向代理和加速緩存,及負載均衡功能,內置對RS節點服務器健康檢查功能,這個就至關因而專業的Haproxy軟件或LVS的功能
具有Squuid等專業的緩存軟件的緩存功
支持異步網絡I/O事件模型epoll
select和epoll的區別:http://www.cnblogs.com/fangjie0410/p/7688365.html
利用編譯安裝方式安裝nginx軟件的方法:
linux的幾種安裝方式:
1. yum安裝軟件 2. rpm -ivh安裝軟件 3. 編譯安裝軟件 4. 利用軟件二進制包方式(綠色軟件)
第一步:解決軟件的依賴關係
yum install pcre-devel openssl-devel -y
第二步:建立nginx進程管理用戶
useradd www -M -s /sbin/nologin : 建立虛擬用戶
id www : 檢查指定用戶是否存在
第三步:編譯安裝nginx軟件
編譯安裝軟甲三部曲:
①. 配置軟件 cd /server/tools/ tar xf nginx-1.12.2.tar.gz cd /server/tools/nginx-1.12.2 ./configure --help --- 檢查軟件能夠配置的參數信息 ./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module ②. 編譯軟件 make ③. 編譯安裝 make install
第四步:建立軟鏈接
ln -s /application/nginx-1.12.2/ /application/nginx
第五步:啓動nginx服務
/application/nginx/sbin/nginx ps -ef|grep nginx setenforce 0 --- 關閉selinux安全功能 /etc/init.d/iptables stop --- 關閉iptables防火牆功能
nginx詳細配置說明:
conf --- nginx程序配置文件保存目錄 nginx.conf --- 程序主配置文件 grep -Ev "#|^$" nginx.conf.default >nginx.conf --- 精簡化nginx默認配置文件
nginx配置文件的案例:
cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.etiantian.org; root html/www; index index.html index.htm; } server { listen 80; server_name bbs.etiantian.org; root html/bbs; index index.html index.htm; } server { listen 80; server_name blog.etiantian.org; root html/blog; index index.html index.htm; } }
建立出相應站點目錄和網站頁面文件
mkdir /application/nginx/html/{www,bbs,blog} -p for name in www bbs blog;do echo "10.0.0.7 $name" >/application/nginx/html/$name/index.html;done for name in www bbs blog;do cat /application/nginx/html/$name/index.html;done
重啓nginx服務加載新的nginx的配置文件:/application/nginx/sbin/nginx -s reload
利用瀏覽器默認訪問網站
作好DNS解析:
10.0.0.10 www.etiantian.org bbs.etiantian.org blog.etiantian.org html --- 站點目錄 logs --- nginx程序日誌目錄 tail -f access.log --- 追蹤日誌信息(實時產生的日誌信息)
nginx程序記錄客戶端訪問狀況日誌信息
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; $remote_addr --- 訪問者(客戶端)的源公網IP地址信息 $remote_user --- 登陸用戶信息 [$time_local] --- 訪問時間信息 $request --- 請求的頁面 $status --- 顯示響應狀態信息 $body_bytes_sent --- 響應報文主體大小 $http_referer --- 記錄有什麼網站進行盜鏈了 $http_user_agent --- 表示客戶端用什麼瀏覽器瀏覽的網站 $http_x_forwarded_for --- 當配置反向代理負載均衡時候 sbin --- nginx程序命令保存目錄 nginx命令參數說明 -t --- 檢查nginx配置文件語法是否正確 -s --- 控制服務運行狀態 -s stop --- 中止nginx服務 -s reload --- 平滑重啓nginx服務
二 nginx的反向代理和負載均衡
安裝負載均衡服務軟件
第一步:解決軟件以=依賴關係
yum install pcre-devel openssl-devel -y
第二步:建立nginx進程管理用戶
useradd www -M -s /sbin/nologin
id www
第三步:編譯安裝nginx軟件
編譯安裝軟件三步曲:
#①. 配置軟件 mkdir /server/tools/ -p cd /server/tools/ wget http://nginx.org/download/nginx-1.12.2.tar.gz tar xf nginx-1.12.2.tar.gz cd /server/tools/nginx-1.12.2 ./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module #②. 編譯軟件 make #③. 編譯安裝 make install
第四步:建立軟鏈接
/application/nginx/sbin/nginx
ps -ef|grep nginx
配置nginx的web服務:for name in www bbs;do echo "$(hostname) $name.etiantian.org" >/application/nginx/html/$name/oldboy.html;done
利用負載均衡服務器測試訪問後端節點
[root@python7 ~]# curl -H host:www.etiantian.org 10.0.0.10/oldboy.html web01 www.etiantian.org [root@python7 ~]# curl -H host:bbs.etiantian.org 10.0.0.10/oldboy.html web01 bbs.etiantian.org [root@python7 ~]# curl -H host:www.etiantian.org 10.0.0.20/oldboy.html web02 www.etiantian.org [root@python7 ~]# curl -H host:bbs.etiantian.org 10.0.0.20/oldboy.html web02 bbs.etiantian.org
編寫nginx反響代理服務配置文件
01. 定義我能夠調度的web節點信息 upstream oldboy { server 10.0.0.10:80; server 10.0.0.20:80; } 02. 接收到請求後。進行調度 location / { proxy_pass http://oldboy; } proxy_set_header host $host; --- 修改反向代理到後端節點中請求報文頭部信息 請求報文頭部中host信息 ngx_http_proxy_module ngx_http_upstream_module
三 參數location得理解
「~」用於區分大小寫(大小寫敏感)的匹配; ~ /images {} 「~*」 用於不區分大小寫的匹配。還能夠用邏輯操做符!對上面的匹配取反,即!~ 和 !~*。 「^~」做用是在常規的字符串匹配檢查以後,不作正則表達式的檢查,即若是最明確的那個字符串匹配的location配置中有此前綴,那麼不作正則表達式的檢查。
[root@oldboyedu-s6 nginx-1.12.2]# cat conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.etiantian.org etiantian.org; root html/www; location / { return 401; } location /documents/ { return 403; } location ^~ /images/ { return 404; } location ~* \.(gif|jpg|jpeg)$ { return 500; } } } ^~ ~* /documents/ / 第1名:「location ~* \.(gif|jpg|jpeg)$ {」 正則匹配 第2名:「location /documents/ {」 匹配常規字符串,若是有正則則優先匹配正則。 第3名:「location / {」 全部location都不能匹配後的默認匹配。 [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200 HTTP/1.1 401 Unauthorized Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:13:41 GMT Content-Type: text/html Content-Length: 195 Connection: keep-alive [root@oldboyedu-s6 nginx-1.12.2]# [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/documents/index.html HTTP/1.1 403 Forbidden Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:14:42 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/documents/w.jpg HTTP/1.1 500 Internal Server Error Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:15:56 GMT Content-Type: text/html Content-Length: 193 Connection: close [root@oldboyedu-s6 nginx-1.12.2]# [root@oldboyedu-s6 nginx-1.12.2]# curl -I 10.0.0.200/images/www.jpg HTTP/1.1 404 Not Found Server: nginx/1.12.2 Date: Thu, 15 Mar 2018 04:16:52 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive