close
      實驗說明

  



文章說明截錄至: http://baike.baidu.com/view/926025.htm#2


Nignx mapNginx可以在大多數Unix like OS上編譯運行,並有Windows移植版。

目前Nginx的1.0.0穩定版已發布,開發版本為0.9.x,穩定版為0.8.x,歷史穩定版為0.7.x,

建議使用0.8系列作為生產版本。Nginx的源代碼使用2-clause BSD-like license。

Nginx是一個很牛的高性能Web和反向代理服務器,它具有很多非常優越的特性:
  
在高連接並發的情況下,Nginx是Apache服務器不錯的替代品:Nginx在美國是做虛擬主機

生意的老闆們經常選擇的軟件平台之一。能夠支持高達50,000個並發連接數的響應,

感謝Nginx為我們選擇了epoll and kqueue作為開發模型。
  
Nginx作為負載均衡服務器:Nginx既可以在內部直接支持Rails和PHP程序對外進行服務,

也可以支持作為HTTP代理服務器對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷

還是CPU使用效率都比Perlbal要好很多。
  
作為郵件代理服務器:Nginx 同時也是一個非常優秀的郵件代理服務器

(最早開發這個產品的目的之一也是作為郵件代理服務器),Last. fm 描述了成功並且美妙

的使用經驗。

Nginx 是一個安裝非常的簡單,配置文件非常簡潔(還能夠支持perl語法),Bugs

非常少的服務器:Nginx 啟動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月

也不需要重新啟動。你還能夠不間斷服務的情況下進行軟件版本的升級。

實驗說明

過去Near,佈建環境以Apache Web 架構 為主,今測試環境使用環境很簡單

以一CentOS 6 作業系統為主


Near 最近才開始Study Nginx 組態.盼望日後可以使用到Nginx架構Web Site支援


[佈建與測試要點]

(A.) 安裝與建立支援PHPScritp(PHP+FPM)+Nginx Web Site 要點  


(B.) Nginx 虛擬主機建置(靜態與動態網頁組態): 

       本Lab 建立五個虛擬主機檔案,分別為

       v1.conf ~v5.conf    #以便區分測試每個環節操作TEST(後續會說明)

(C.) Nginx: 虛擬主機支援SSL(https)網頁加密傳輸組態

(D.) Nginx:  網頁重新導向與WEB路徑權限存取配置(Allow or Deny IP ?)

(E.) Nginx: .htpasswd :  使用網頁驗證特定使用者登入該網頁配置

(F.) Nginx: PHP 連結MySQL 資料庫測試(MySQLver. 5.6)

(E.) Nginx 調校 :  Linux 內核心優化參數配置

(F.) Nginx 日志切割: 排程設置執行日志切割分類 

PS. Nginx 使用0.8.45 版本,本人曾成功編譯安裝過官方最新版1.0_過程蠻煩,則以0.8.45版本介紹

       以上截圖後續補上,以上項次,Near 已成功執行,文章敘述後補上....COMMING SOON
 (A)Nginx , PHP-FPM 安裝與初始化組態

      本人是參考此篇進行快速安裝_您可以參考此篇預先組態完成

      http://blog.shian.tw/centos-install-nginx-and-php-fpm.html

      %安裝完成後,展示一下本LAB使用套件%

>  yum -y install nginx php-fpm     #本例使用的是Nginx 0.8.54 版本
     

%THEN 我們組態/etc/nginx/nginx.conf         #nginx.conf 組態檔

  #本LAB 客制化修改如下,本例將web root 指定為/var/www/html

 
server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        access_log  logs/host.access.log  main;
        location / {
            root   /var/www/html;
            index  index.html index.htm;
        }
        error_page  404              /404.html;
        location = /404.html {
            root   /var/www/html;
        }



#修改支援PHP語法組態,本利將php-fpm 修改為9999 port

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9999;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
            include        fastcgi_params;
        }


#由於我們上面修改了php-fpm 設定Port,我們另需修改php-fpm 組態檔指定正確port

vi /etc/php-fpm.d/www.conf

listen = 127.0.0.1:9999


THEN 我們依序啟動php-fpm 與nginx 服務,並檢測該Port是否有listen?

/etc/init.d/nginx start

/etc/init.d/php-fpm start

chkconfig nginx on

chkconfig php-fpm on

> netstat -tuln | grep '^9'

> netstat -tuln | grep '80'         #下圖中可得知9999與80 Port 皆ON 起來了



(B). 虛擬主機配置,靜態HTML 與動態PHP配置

 本利建立5個Name-Based 虛擬主機檔案,規劃測試用途如下

  Virtual Web Root :  集中於/var/www/html/v1~v5 底下 

 v1.conf ->  v1.qyun.com    /v1   #靜態網頁,測試Nginx 存取權限與資料夾重新導向

 v2. conf -> v2.qyun.com    /v2    #動態網頁,
測試PHP網頁執行與SSL(https://)

 v3.conf  -> v3.qyun.com   /v3     #動態網頁: 測試PHP連結MySQL資料庫測試

 v4.conf ->  v4.qyun.com   /v4    #靜態網頁: 測試.htpasswd 網頁登入用戶驗證

 v5.conf ->  v5.qyun.com    /v5   #靜態網頁:  與v1配合被從新導向之目的網頁

[靜態網頁配置範例]    v1.conf , v4.conf , v5.conf

vi /etc/nging/conf.d/v1.conf    #以v1為例,其餘依照此例自建

server {
    listen       80;
    server_name  v1.qyun.com;
 
    location / {
        root   /var/www/html/v1;
        index  index.php index.html index.htm;
    }
 
  location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
        access_log off;
        expires max;
        root /var/www/html/v1;
   }
}

 
[動態PHP網頁配置範例] v2.conf , v3.conf

vi /etc/nginx/conf.d/v2.conf   #以v2為例,其餘依照此例自建

server {
    listen   80;
    server_name
v2.qyun.com
;   
    location / {
        root   /var/www/html/v2;
        index index.php index.htm index.html;
        if (-f $request_filename) {
                        expires 30d;
                        break;
        }
        if (!-e $request_filename) {
                        rewrite ^(.+)$ /index.php?q=$1 last;
        }
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9999;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/html/v2$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }
    location ~ /\.ht {
        deny  all;
    }
}


PS>請重新啟動NGINX生效上述修改設定

THEN 我們建立PHP測試頁PHP執行狀況,我們建立在v3

 vi /var/www/html/v3/test.php

<?php

phpinfo();

?>

THEN 我們打開Chrome 瀏覽器檢視 http://v3.qyun.com/   #PHP已正常運行



(C). PHP+MYSQL 資料庫連線測試 MySQL_ver. 5.6

       我們預計實驗在 v3.qyun.com 此台虛擬主機上,請確定MySQL順利安裝與啟動
 

登入MySQL 建立Test帳號


> grant all on *.*  to qyun@localhost identified by 'qyun520';

> flush privileges;  


編寫簡易連線MYSQL程式

vi   /var/www/html/v3/index.php

<?php
$link = mysql_connect('localhost', 'qyun', 'qyun520');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>;
echo 'This v3.qyum.com host'

THEN 我們打開Chrome 瀏覽器檢視 http://v3.qyun.com/index.php

 #Conncted Successfully , PHP連線資料庫測試OK



(D). SSL(https) Virtual Host 實務測試

我們預計實驗在 v2.qyun.com 此台虛擬主機上

建立privkey 與憑證申請書.csr

mkdir -p  /var/www/html/ssl/v2       
#本人習慣建置一個SSL資料夾存取所有金鑰,憑證

cd  /var/www/html/ssl/v2

openssl genrsa -out privkey.pem 2048        #建立privkey key

openssl req -new -key privkey.pem -out cert.csr     #憑證申請書

openssl req -new -x509 -days 3650 -key privkey.pem -out cacert.pem   

#自我簽署憑證

#上述完後應該會成立三個檔案 
 cacert.pem  cert.csr  privkey.pem  

THEN 接著我們需編輯 /etc/nginx/conf.d/v2.conf     
  #組態SSL相關設定如下


server {                                                #本人在server 敘述式插入粉色字支援ssl設定
    listen   443;
    server_name v2.qyun.com;
    ssl on;
    ssl_certificate     /var/www/html/ssl/v2/cacert.pem;
    ssl_certificate_key /var/www/html/ssl/v2/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;

.......} 以下省略        #設定OK請重啟NGINX 服務


THEN 我們打開Chrome 瀏覽器檢視 https://v2.qyun.com   #SSL TEST OK



(E). 網址重新導向至v5.qyun.com 與 Nginx 網頁權限存取配置 

      我們預計實驗在 v1.qyun.com 此台虛擬主機上


編輯/etc/nginx/conf.d/v1.conf   

#我們預計將
v1.qyun.com  連線從導至v5.qyun.com

Near於下圖函式中插入以下設定

 if ($host = 'v1.qyun.com' ){
        rewrite ^/(.*)$
http://v5.qyun.com$1 permanent;


THEN 我們打開Chrome 瀏覽器檢視  http://v1.qyun.com/

當我們鍵入URL: http://v1.qyun.com 時將快速重導至 http://v5.qyun.com


   封鎖特定IP禁止存取特定Web Site

   編輯403錯誤訊息導向網頁403.htm

    vi /var/www/html/v1/403.htm

<html>
<head><title>Error 403 - IP Address Blocked</title></head>
<body>
Your IP Address is blocked. <br>
If you this an error, please contact webmaster with your IP at
near@seed.net.tw
</body>
</html>

THEN 修改/etc/nginx/conf.d/v1.conf    加入以下設置

error_page 403 /403.htm;             # main  location 區段插入此行
------


deny 192.168.0.198;                    #Server宣告示,我們指定封所.198 網址

 allow all;

location = /403.htm{                 # 新增Location 敘述如下,修改完成後請重新啟動NGINX
root /var/www/html/v1;
allow all;
}



THEN 我們打開Chrome 瀏覽器檢視 http://v1.qyun.com/   #Client 端IP 192.168.0.199

 當Client IP被BLOCK 時除現403錯誤,Client 端將顯示以下Message
  

 Your IP Address is blocked..... 
 
(F). .htpasswd 網頁登入使用者驗證存取網頁配置

       我們預計實驗在 v4.qyun.com 此台虛擬主機上


#配置User 網頁存取帳密

  mkdir  -p   /var/www/html/htpv4/                              #建立存放網頁驗證資料夾

  htpasswd -c /var/www/html/htpv4/htpv4 near    
  #建立使用者near 帳密

  > cat  /var/www/html/htpv4/htpv4                 # 檢視建置OK成果
 

THEN 我們編輯/etc/nginx/conf.d/ v4.conf 檔案,修改組態支援網頁使用者驗證登入

 
 auth_basic "LT-COUNT-TongJi";                                #插入Main Location敘述式區段
 auth_basic_user_file /var/www/html/htpv4/htpv4 ;  #修改完成請重新啟動Nginx 生效設定

THEN 我們打開Chrome 瀏覽器檢視 http://v4.qyun.com/  

  進入網頁前要求:  輸入使用著帳號/密碼,當輸入正確才可存取該網頁


   當登入成功後,我們就可以順利取得網頁資訊了
  
(G). Nginx : Linux 核心參數優化

       編輯  /etc/  /etc/sysctl.conf    

 #Optimization                                        #參考官方手冊,插入以下優化參數
  
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn =32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_timestamps = 0
net.core.wmem_max = 16777216
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000

/sbin/sysctl -p       #生效該敘述設定,若打錯字將顯示錯誤.請修正


 
(H.) 實現日誌分割設計

日誌路徑:  /var/log/nginx/access.log

編寫Shell Script  如下

vi /usr/local/bin//cut_nginx_logs.sh

chmod +x  /usr/local/bin/cut_nginx_logs.sh

#此Script 將依日期時間歸納Access.log,方便系統管理員日後檢查日誌track#

#當日誌過舊超過30日時,將自動刪除過舊網誌

  
#!/bin/bash

#set the path to nginx log files
log_files_path="/var/log/nginx/"
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
#set nginx log files you want to cut
log_files_name=(access)
#set the path to nginx.
nginx_sbin="/usr/sbin/nginx"
#Set how long you want to save
save_days=30

mkdir -p $log_files_dir

log_files_num=${#log_files_name[@]}

#cut nginx log files
for((i=0;i<$log_files_num;i++));do
mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log
done

#delete 30 days ago nginx log files
find $log_files_path -mtime +$save_days -exec rm -rf {} \;

$nginx_sbin -s reload


排程執行  cut_nginx_logs.sh  日誌切割 00:00  每次零點零分執行

00 00 * * * /usr/local/bin/cut_nginx_logs.sh /dev/null 2>&1

手動執行日誌備分

source  /usr/local/bin/cut_nginx_logs.sh   

#下圖中,已成功切割日製,方便系統管理員日後追蹤log

 
LAB: 實作時所參考部分資料

http://www.21andy.com/blog/20100203/1609.html

http://linux-guys.blogspot.com/     蚊子館_Near_強力推薦:對NGINX初學者很有幫助


arrow
arrow
    全站熱搜

    終極.凱因斯 發表在 痞客邦 留言(0) 人氣()