nginx+Apache實現動靜分離


Nginx動靜分離實現:

Nginx是一種輕量級,高性能,多進程的Web服務器,非常適合作為靜態資源的服務器使用,而動態的訪問操作可以使用穩定的Apache、Tomcat及IIS等來實現,這里就以Nginx作為代理服務器的同時,也使用其作為靜態資源的服務器,而動態的訪問服務器就以Apache為例說明。

 

·     原理

·     實現

·     驗證

 

一、原理

原理:

 

說明:

1、代理服務器和靜態服務器即為一台服務器上,這里只是為了明顯區分動靜分離所處服務器的不同;

2、靜態服務器中,存放的資源主要是源代碼文件、圖片、屬性、樣式以及其它所有非動態的資源文件;

3、調度規則,即為代理服務器,這里是Nginx的服務器調度規則;

4、動態服務器,其種類比較繁多,可以是Apache、Tomcat、IIS以及其它Web服務器,它們一般分別隸屬於一台服務器;

 

二、實現

1、實現說明

如上圖所示,當客戶端訪問代理服務器時:

首先,加載和顯示存放在靜態服務器中的靜態資源,這里以html為例;

其次,如果上一步沒有匹配對應的資源,我們就認為是動態訪問請求,那么就直接訪問參與負載均衡的服務器列表中的某一台服務器的動態操作;

最后,Nginx作為Web服務器加載靜態資源(html、css、js、image),而靜態資源如果需要動態獲取數據,並填充到頁面顯示,會自動去往負載服務器獲取並返回,在實現了動態分離的同時,也參與了服務器的負載均衡。

 

2、准備工作

准備兩台計算機設備,分別為:

靜態服務器:169.254.195.161

動態服務器:169.254.28.29

 

3、安裝配置

首先,在靜態服務器中安裝Nginx服務器,在動態服務器中安裝Apache服務器,具體安裝過程中這里省略;

其次,分別配置Nginx和Apache,配置如下:

nginx.conf:

http {

    #load balancing servers

    upstream webservers {

      ip_hash;

      server 169.254.28.29max_fails=2 fail_timeout=2;

   }

 

   server {

      listen       80;

      server_name  localhost;

     

      access_log/usr/local/nginx/logs/access.log;

      error_log/usr/local/nginx/logs/error.log;

     

      #limitbuffer size and overflows

      client_body_buffer_size16k;

      client_header_buffer_size1k;

      client_max_body_size1m;

 

      #default char set

      charset utf-8;

     

      #默認靜態資源

      location / {

          root    /project/cwteam;

          index  index.html index.htm   

      

          allow all;

      }

      #動態資源加載

      location ~\.(PHP|jsp)?$ {

          proxy_pass http://webservers;

      }

  }

}

 

httpd.conf:

這里只羅列Apache根目錄的配置路徑,如下:

DocumentRoot “D:/project/cwteam”

<Directory “D:/project/cwteam”>

Options IndexesFollowSymLinks Includes ExecCGI

AllowOverride All

Require all granted

</Directory>

 

最后,啟動Nginx和Apache服務,並驗證是否成功啟動。

 

三、驗證

首先,在靜態服務器中的Web根目錄下,放置一個static.html文件,內容如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<script src="../Public/htmls/js/jQuery-1.8.3.min.js"></script>

</head>

<body style="">

      <div id="ajaxDync"></div>

</body>

 

<script type="text/JavaScript">

$(document).ready(function() {

      $.ajax({  

            url:'./dynamic.php?action=ok',  

            type:'get',  

            cache : false,

          success:function(data){  

              $("#ajaxDync").html(data);  

          }

      });

});

</script>

</html>

 

其次,在動態服務器中的Web服務器目錄下放在一個動態腳本dynamic.php,內容如下:

<?php

if($_GET['action']=='ok'){

      echo 'Hello World!'.'---IP:169.254.28.29';

}

?>

 

NOTE:

1、為了區分動靜服務器內的服務器腳本,我們在靜態服務器中的dynamic.php內容:

<?php

if($_GET['action']=='ok'){

      echo 'Hello World!'.'---IP:169.254.195.161';

}

?>

而在動態服務器中的dynamic.php內容如下:

<?php

if($_GET['action']=='ok'){

      echo 'Hello World!'.'---IP:169.254.28.29';

}

?>

 

2、需要保證動靜服務器擁有同樣的代碼項目,一般使用rsync同步軟件同步不同服務器中的項目資源文件,關於rsync會在后續總結介紹使用。

 

最后,打開瀏覽器輸入192.168.1.100,結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM