1. 程式人生 > >nginx功能之一 搭建web伺服器

nginx功能之一 搭建web伺服器

一      nginx的優點

          1、可以高併發連線

          官方測試Nginx能夠支撐5萬併發連線,實際生產環境中可以支撐2~4萬併發連線數。

          原因,主要是Nginx使用了最新的epoll(Linux2.6核心)和kqueue(freeBSD)網路I/O模型,而Apache使用的是傳統的Select模型,其比較穩定的Prefork模式為多程序模式,需要經常派生子程序,所以消耗的CPU等伺服器資源,要比Nginx高很多。

          2、記憶體消耗少

          Nginx+PHP(FastCGI)伺服器,在3萬併發連線下,開啟10個Nginx程序消耗150MB記憶體,15MB*10=150MB,開啟的64個PHP-CGI程序消耗1280記憶體,20MB*64=1280MB,加上系統自身消耗的記憶體,總共消耗不到2GB的記憶體。

          如果伺服器的記憶體比較小,完全可以只開啟25個PHP-CGI程序,這樣PHP-CGI消耗的總記憶體數才500MB。

          3、成本低廉

          購買F5BIG-IP、NetScaler等硬體負載均衡交換機,需要十多萬到幾十萬人民幣,而Nginx為開源軟體,採用的是2-clause BSD-like協議,可以免費試用,並且可用於商業用途。

          BSD開源協議是一個給使用者很大自由的協議,協議指出可以自由使用、修改原始碼、也可以將修改後的程式碼作為開源或專用軟體再發布。

          4、配置檔案非常簡單

          網路和程式一樣通俗易懂,即使,非專用系統管理員也能看懂。

          5、支援Rewrite重寫

          能夠根據域名、URL的不同,將http請求分到不同的後端伺服器群組。

          6、內建的健康檢查功能

          如果NginxProxy後端的某臺Web伺服器宕機了,不會影響前端的訪問。

          7、節省頻寬

          支援GZIP壓縮,可以新增瀏覽器本地快取的Header頭。

          8、穩定性高

          用於反向代理,宕機的概率微乎其微。

          9、支援熱部署

          Nginx支援熱部署,它的自動特別容易,並且,幾乎可以7天*24小時不間斷的執行,即使,執行數個月也不需要重新啟動,還能夠在不間斷服務的情況下,對軟體版本進行升級。

二 搭建靜態web伺服器

1 訪問基本的靜態頁面

   (1)使用原始碼包安裝nginx軟體

[[email protected] ~]# yum -y install gcc pcre-devel openssl-devel httpd-tools     //安裝依賴包
[[email protected] ~]# useradd -s /sbin/nologin nginx
[[email protected] ~]# tar  -xf   nginx-1.10.3.tar.gz
[[email protected] ~]# cd  nginx-1.12.2
[[email protected] nginx-1.12.2]# ./configure   \
> --prefix=/usr/local/nginx   \                //指定安裝路徑
> --user=nginx   \                            //指定使用者
> --group=nginx  \                            //指定組
> --with-http_ssl_module                        //開啟SSL加密功能
> --with-stream                              //開啟4層反向代理功能
> --with-http_stub_status_module             //開啟status狀態頁面
[[email protected] nginx-1.12.2]# make && make install  //編譯 安裝

   (2) nginx命令的用法

[email protected] ~]# /usr/local/nginx/sbin/nginx                    //啟動服務
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s stop            //關閉服務
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload        //重新載入配置檔案
[[email protected] ~]# /usr/local/nginx/sbin/nginx –V                //檢視軟體資訊
[[email protected] ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/        //方便後期使用

    (3)測試首頁檔案,Nginx Web服務預設首頁文件儲存目錄為/usr/local/nginx/html/,在此目錄下預設有一個名為index.html的檔案,使用客戶端訪問測試頁面:

[[email protected] ~]# curl http://192.168.4.5
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>

2 訪問nginx Web頁面實現使用者認證

   (1)修改Nginx配置檔案   

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        auth_basic "Input Password:";                        //認證提示符
        auth_basic_user_file "/usr/local/nginx/pass";        //認證密碼檔案
        location / {
            root   html;
            index  index.html index.htm;
        }
  }

    (2)生成密碼檔案,建立使用者及密碼,使用htpasswd命令建立賬戶檔案,需要確保系統中已經安裝了httpd-tools

[[email protected] ~]# yum -y install  httpd-tools
[[email protected] ~]# htpasswd -c /usr/local/nginx/pass   tom        //建立密碼檔案
New password: 
Re-type new password: 
Adding password for user tom
[[email protected] ~]# htpasswd  /usr/local/nginx/pass   jerry      //追加使用者,不使用-c選項
New password: 
Re-type new password: 
Adding password for user jerry
[[email protected] ~]# cat /usr/local/nginx/pass

    (3)重啟Nginx服務,訪問測試

[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload    //重新載入配置檔案  
[[email protected] ~]# firefox http://192.168.4.5                    //輸入密碼後可以訪問

3 基於域名的虛擬主機:修改Nginx配置檔案,新增server容器實現虛擬主機功能;對於需要進行使用者認證的虛擬主機新增auth認證語句。虛擬主機一般可用分為:基於域名、基於IP和基於埠的虛擬主機。

要求:    實現兩個基於域名的虛擬主機,域名分別為www.a.com和www.b.com                對域名為www.a.com的站點進行使用者認證,使用者名稱稱為tom,密碼為123456

    (1)修改Nginx服務配置

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;                                      //埠
        server_name  www.a.com;                                //域名
auth_basic "Input Password:";                        //認證提示符
        auth_basic_user_file "/usr/local/nginx/pass";        //認證密碼檔案
location / {
            root   html;                                    //指定網站根路徑
            index  index.html index.htm;
       }
       
}
… …
    server {
        listen  80;                                        //埠
        server_name  www.b.com;                                //域名
location / { 
root   www;                                 //指定網站根路徑
index  index.html index.htm;
}
}

  (2)建立網站根目錄及對應首頁檔案

[[email protected] ~]# mkdir /usr/local/nginx/www
[[email protected] ~]# echo "www" > /usr/local/nginx/www/index.html

   (3)重啟nginx服務

[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload

   (4)修改客戶端主機的/etc/hosts檔案,進行域名解析

 [[email protected] ~]# vim /etc/hosts
 192.168.4.5    www.a.com  www.b.com

  (5)測試

[[email protected] ~]# firefox http://www.a.com            //輸入密碼後可以訪問
[[email protected] ~]# firefox http://www.b.com            //直接訪問

4 配置基於加密網站的虛擬主機

原始碼安裝Nginx時必須使用--with-http_ssl_module引數,啟用加密模組,對於需要進行SSL加密處理的站點新增ssl相關指令(設定網站需要的私鑰和證書)。 加密演算法一般分為對稱演算法、非對稱演算法、資訊摘要。 對稱演算法有:AES、DES,主要應用在單機資料加密。 非對稱演算法有:RSA、DSA,主要應用在網路資料加密。 資訊摘要:MD5、sha256,主要應用在資料完整性校驗、資料秒傳等

    (1)生成私鑰與證書

[[email protected] ~]# cd /usr/local/nginx/conf
[[email protected] ~]# openssl genrsa > cert.key                            //生成私鑰
[[email protected] ~]# openssl req -new -x509 -key cert.key > cert.pem      //生成證書

    (2)修改Nginx配置檔案,設定加密網站的虛擬主機

[[email protected] ~]# vim  /usr/local/nginx/conf/nginx.conf
… …    
server {
        listen       443 ssl;
        server_name            www.c.com;
        ssl_certificate      cert.pem;         #這裡是證書檔案
        ssl_certificate_key  cert.key;         #這裡是私鑰檔案
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }

    (3)重啟nginx服務並測試

[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload
[[email protected] ~]# firefox https://www.c.com            //信任證書後可以訪問(客戶機測試)