1. 程式人生 > >nginx(重點篇)

nginx(重點篇)

1.圖片/檔案上傳分析

傳統方式的檔案上傳:將檔案通過流傳入到tomcat伺服器下面的images資料夾中,這樣的上傳方式效率十分低下、高併發情況下極易出現執行緒異常

叢集下的檔案上傳:搭建負載均衡伺服器nginx,由專門負責上傳/下載的圖片伺服器FastDFS統一管理

FastDFS:分散式檔案系統

 

2.nginx簡介

Nginx是一款高效能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬併發連結,並且cpu、記憶體等資源消耗卻非常低,執行非常穩定。(tomcat只有五百左右的併發)

 

2>nginx應用場景

http伺服器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態伺服器。

虛擬主機。可以實現在一臺伺服器虛擬出多個網站。例如個人網站使用的虛擬主機。

反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺伺服器不能滿足使用者的請求時,需要用多臺伺服器叢集可以使用nginx做反向代理。並且多臺伺服器可以平均分擔負載,不會因為某臺伺服器負載高宕機而某臺伺服器閒置的情況。

官方網站http://nginx.org/

 

3.nginx的安裝(linux系統下)

安裝環境:

1>需要安裝gcc的環境

:nginx是基於c語言開發的,所以在安裝前必須安裝c語言的編譯環境

yum install gcc-c++

2>第三方開發包三條yum命令

       PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 相容的正則表示式庫。nginx的http模組使用pcre來解析正則表示式,所以需要在linux上安裝pcre庫。注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。

yum install -y pcre pcre-devel

zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。

yum install -y zlib zlib-devel

       OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的金鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用。nginx不僅支援http協議,還支援https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。

yum install -y openssl openssl-devel

 

安裝步驟:

第一步:把nginx的原始碼包上傳到linux系統:nginx-1.8.0.tar.gz

第二步:解壓縮

[[email protected] ~]# tar zxf nginx-1.8.0.tar.gz

第三步:進入nginx-1.8.0然後使用configure命令建立一makeFile檔案。

./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi

注意:啟動nginx之前,上邊將臨時檔案目錄指定為/var/temp/nginx,需要在/var下建立tempnginx目錄

[[email protected] sbin]# mkdir /var/temp/nginx/client -p

第四步:make

第五步:make install

 

啟動nginx:

進入/usr/local/nginx/sbin目錄

[[email protected] ~]# cd /usr/local/nginx/sbin

啟動:[[email protected] sbin]# ./nginx

關閉nginx:[[email protected] sbin]# ./nginx -s stop             推薦使用:[[email protected] sbin]# ./nginx -s quit

重新整理配置檔案:[[email protected] sbin]# ./nginx -s reload

訪問ngin(linux的ip地址):192.168.247.128,預設是80埠

 

 

4.配置虛擬主機

 

在一臺伺服器啟動多個網站,如何區分不同的網站:通過埠區分虛擬主機,通過域名區分不同虛擬主機

埠:例如(80,81,82....)

域名:就是網站(www.baidu.comwww.jd.com....)

listen(埠)、server——name(域名:訪問的網站)、root(訪問後顯示的頁面首頁)

1>通過埠區分虛擬主機

nginx的配置檔案:/usr/local/nginx/conf/nginx.conf

可以配置多個server,這樣配置了多個虛擬主機。

新增一個虛擬主機:埠為81,當我們訪問nginx:192.168.247.128:81此時出現的頁面是html-81

注意:修改配置檔案後要重新整理nginx伺服器[[email protected] sbin]# ./nginx -s reload

    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html-81;
            index  index.html index.htm;
        }
    }

 

2>通過域名區分虛擬主機

Dns伺服器:把域名解析為ip地址,儲存的就是域名和ip的對映關係。

nginx的/usr/local/nginx/conf/nginx.conf配置檔案中:一個域名對應一個ip地址,一個ip地址可以被多個域名繫結。

測試方法:

本地測試可以修改hosts檔案。
修改window的hosts檔案:(C:\Windows\System32\drivers\etc)
可以配置域名和ip的對映關係,如果hosts檔案中配置了域名和ip的對應關係,不需要走dns伺服器。

192.168.247.128 www.taobao.com
192.168.247.128 www.baidu.com

nginx的/usr/local/nginx/conf/nginx.conf配置檔案新增server節點:listen(埠)、server——name(域名:訪問的網站)、root(訪問後顯示的頁面首頁)

  server {
        listen       80;
        server_name  www.taobao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html-taobao;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  www.baidu.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html-baidu;
            index  index.html index.htm;
        }
    }

 

 

5.反向代理

正向代理:伺服器接收到使用者請求後,根據使用者請求的資訊決定去那臺伺服器(使用者決定)

反向代理:反向代理(Reverse Proxy)實際執行方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。(伺服器決定)

反向代理的作用:負載均衡,通過反向代理伺服器來優化網站的負載

 

2>nginx實現反向代理:兩個域名指向同一臺nginx伺服器,使用者訪問不同的域名顯示不同的網頁內容。

第一步:安裝兩個tomcat,分別執行在8080和8081埠。

第二步:啟動兩個tomcat。

第三步:反向代理伺服器的配置(nginx的/usr/local/nginx/conf/nginx.conf配置檔案)

listen(埠)、server——name(域名:訪問的網站)、root(訪問後顯示的頁面首頁)、tomcat1 /2(tomcat的首頁,此時有兩個tomcat在啟動中)

upstream tomcat1 {
	server 192.168.247.128:8080;
    }
    server {
        listen       80;
        server_name  www.sina.com.cn;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcat1;
            index  index.html index.htm;
        }
    }
    upstream tomcat2 {
	server 192.168.247.128:8081;
    }
    server {
        listen       80;
        server_name  www.sohu.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcat2;
            index  index.html index.htm;
        }
    }

第四步:nginx重新載入配置檔案

第五步:配置域名

在hosts檔案中新增域名和ip的對映關係(C:\Windows\System32\drivers\etc)

 192.168.247.128 www.sina.com.cn

 192.168.247.128 www.sohu.com

第六步:測試 >>> 在window瀏覽器中訪問www.sina.com.cn和www.sohu.com

 

6.負載均衡

如果一個服務由多條伺服器提供,需要把負載分配到不同的伺服器處理,需要負載均衡。

 upstream tomcat2 {

       server  192.168.247.128:8081;

       server  192.168.247.128:8082;

  }

可以根據伺服器的實際情況調整伺服器權重。權重越高分配的請求越多,權重越低,請求越少。預設是都是1

 upstream tomcat2 {
	server 192.168.247.128:8081;
	server 192.168.247.128:8082 weight=2;
    }