nginx服務器

一 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瀏覽器,程序解析效率很高,因爲服務器端不進行解析,而且不須要讀取數據庫,所以服務器端能夠接受更多的併發訪問。當客戶端向服務器請求數據時,服務器會直接從磁盤文件系統上返回數據(不作任何解析)。待客戶端拿到數據後,在瀏覽器端解析並展示出來(優勢)。
View Code

  動態資源頁面幾個特徵:

1)    網頁擴展名後綴常見爲:.asp、.aspx、.php、.js、.do、.cgi等。    ※
2)    網頁通常以數據庫技術爲基礎,大大下降了網站維護的工做量。    
3)    採用動態網頁技術的網站能夠實現更多的功能,如用戶註冊、用戶登陸、在線調查、投票、用戶管理、訂單處理、發博文等。
4)    動態網頁並非獨立存在於服務器上的網頁文件,當用戶請求服務器上的動態程序時,服務器解析這些程序並可能經過讀取數據庫來返回一個完整的網頁內容。
5)    動態網頁中的「?」在搜索引擎的收錄方面存在必定的問題,搜索引擎通常不會從一個網站的數據庫中訪問所有網頁,或者出於技術等方面的考慮,搜索蜘蛛通常不會去抓取網址中「?」後面的內容,所以在企業經過搜索引擎進行推廣時,須要針對採用動態網頁的網站作必定的技術處理(僞靜態技術),以便適應搜索引擎的抓取要求。(缺點)
程序在服務器端解析,這至關於顧客點餐,飯店廚師作飯作菜,耗時長、效率低。在這個過程當中,會消耗大量的CPU和內存、I/O等資源,而且多數還要提供讀取數據庫等服務,所以,其訪問效率遠不如靜態網頁,在服務器端解析動態程序的服務常見的有PHP引擎、Java容器(Tomcat、Resin、Jboss、Weblogic)等。
View Code

  僞靜態資源頁面:從網站的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. 利用軟件二進制包方式(綠色軟件)
View Code

  第一步:解決軟件的依賴關係

   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
View Code

  第四步:建立軟鏈接

   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防火牆功能  
View Code

 nginx詳細配置說明:

    conf             --- nginx程序配置文件保存目錄 
    nginx.conf   --- 程序主配置文件
    grep -Ev "#|^$" nginx.conf.default >nginx.conf    --- 精簡化nginx默認配置文件
View Code

 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;
        }
    }
View Code

 建立出相應站點目錄和網站頁面文件

    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
View Code

 重啓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      --- 追蹤日誌信息(實時產生的日誌信息)
View Code

  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服務
View Code

二 nginx的反向代理和負載均衡

 安裝負載均衡服務軟件

  第一步:解決軟件以=依賴關係

   yum install pcre-devel openssl-devel -y

    第二步:建立nginx進程管理用戶

useradd www -M -s /sbin/nologin
id www
View Code

  第三步:編譯安裝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
View Code

  第四步:建立軟鏈接

/application/nginx/sbin/nginx
ps -ef|grep nginx
View Code

 配置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
View Code

 編寫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
View Code

 三 參數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
View Code
相關文章
相關標籤/搜索