Nginx+httpd反代實現動靜分離


什麼是動靜分離php


爲了提升網站的響應速度,減輕程序服務器(apache+php,nginx+php等)的負載,對於靜態資源好比圖片,js,css,html等靜態文件,咱們能夠在反向代理服務器中設置,將訪問不一樣類型的資源分別調度到後端不一樣服務器組,這樣客戶端請求一個靜態資源時,代理服務器將請求代理到靜態資源服務器組。用戶請求的動態文件好比php,jsp則轉發給後端php服務器或tomcat應用服務器處理,這就是動靜分離。這也是反向代理服務器的一個重要的做用。css

本文的動靜分離主要是經過nginx+httpd和php+nginx來實現,其中一臺nginx做爲前端反向代理服務器負責分離用戶訪問的請求,httpd+php處理php的動態請求,另一臺nginx處理圖片、html、JS、CSS等靜態文件。html


基礎知識瞭解完後,我們來具體實踐一下動靜分離的感受。。前端

環境介紹mysql

S6PBB6{6)X`E@_TK2)]RNL1.png

服務器名稱 系統類型 預裝的軟件 ip地址 域名
nginx代理服務器 Centos7.5 nginx 192.168.2.221 www.aa1.com
httpd+php動態解析服務器 Centos7.5 httpd+php 192.168.2.222 www.aa2.com
靜態資源服務器 Centos7.5 nginx 192.168.2.225 www.aa5.com

    一、代理服務器:
        服務:Nginx,並配置代理與動靜分離到後端兩臺動態與靜態服務器上linux

    二、動態服務器:    
        服務:httpd、PHP,負責處理客戶端請求php動態頁面
nginx

    三、靜態服務器
web

        服務:nginx,負責處理客戶端請求的圖片、js、css、html等靜態資源
sql

配置過程apache

1、配置前的初始配置,配置好ip地址、關閉防火牆、selinux、配置hosts解析文件(使用虛擬主機的不一樣域名)實現各主機互訪;這個步驟三個主機都操做,我只操做一個

[root@centos01 /]# systemctl stop firewalld
[root@centos01 /]# setenforce 0
[root@centos01 /]# vim /etc/hosts
192.168.2.221   www.aa1.com
192.168.2.222   www.aa2.com
192.168.2.225   www.aa5.com


2、給各服務器安裝須要的軟件

代理服務器安裝nginx軟件

[root@centos01 /]# yum install -y nginx

httpd+php服務器安裝軟件

[root@centos02 /]# yum install -y php php-mysql php-mbstring php-gd php-common httpd

靜態服務器安裝軟件

[root@centos03 /]# yum install -y nginx


3、各服務器配置參數

配置httpd+php服務器

    1.配置httpd支持php解析,添加index.php主頁支持,添加在httpd配置調用php模塊

[root@centos02 /]# vim /etc/httpd/conf/httpd.conf 
<IfModule log_config_module>
    LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxylog    ##代理的請求日誌格式
    CustomLog "logs/access_log" proxylog        ##調用代理的日誌格式(顯示真實客戶端ip地址,默認日誌只顯示代理服務器ip)
</IfModule>
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
...略
    AddType application/x-httpd .php
...略
    LoadModule php5_module modules/libphp5.so

    2.在網站根目錄新建一個php測試頁,將httpd服務加入開啓自啓而後啓動httpd服務

[root@centos02 /]# vim /var/www/html/index.php
<?php
phpinfo();
?>
[root@centos02 /]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@centos02 /]# systemctl start httpd

    3.使用客戶端添加hosts解析,瀏覽器訪問http://www.aa2.com 驗證php解析是否正常

Y)HM546RMG{_4_@JUSP$C{T.png

配置nginx代理服務器

    1.新建一個虛擬主機配置文件,添加代理服務器配置參數

[root@centos01 /]# vim /etc/nginx/conf.d/proxy.conf
server {
        listen 80;
        server_name www.aa1.com;
#設置真實客戶端的ip地址
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#匹配php請求,將請求轉發到動態服務器組
        location ~* \.php$ {
        proxy_pass http://www.aa2.com;
        }
#匹配直接訪問流量,將請求轉發到動態服務器組
        location / {
        proxy_pass http://www.aa2.com;
        }
#匹配以靜態資源後綴結尾的,將請求轉發到靜態服務器組
        location ~* \.(png|jpg|jpeg|html|htm|js|css|xml)$ {
        proxy_pass http://www.aa5.com;
        }
}

    2.檢查nginx配置文件語法是否正確並啓動nginx代理服務

[root@centos01 /]# nginx -t 
[root@centos01 /]# nginx 
[root@centos01 /]# ss -tnl | grep 80

    3.使用客戶端訪問代理服務器域名www.aa1.com驗證動態資源反代是否成功

]E]G9}U_Z2~$IJZO03W$7(R.png

靜態服務器配置

    1.新建靜態web虛擬主機,配置靜態資源網站根目錄,配置訪問日誌格式使用proxy格式(顯示真實的客戶端ip地址)

[root@localhost /]# vim /etc/nginx/conf.d/static.conf
server {
        listen 80;
        server_name www.aa5.com;
        access_log /var/log/nginx/accecc.log proxy;
        location / {
        root /web/;
        }
}

    2.修改靜態服務器主配置文件,添加一個proxy日誌格式(名稱必定和上面一致);測試配置文件語法是否正確,啓動nginx服務

[root@localhost /]# vim /etc/nginx/nginx.conf 
http {
...略
    log_format  proxy  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
...略
}
[root@localhost /]# nginx -t 
[root@localhost /]# nginx

    3.建立靜態網站根目錄,新建一個靜態頁面文件

[root@localhost /]# mkdir /web
[root@localhost /]# vim /web/aa5.html
<h1>This is static server resources <h1>


最後的結果驗證

    方法一:

    1.使用客戶端訪問http://www.aa1.com/index.php或者直接訪問主頁,結果反饋的是httpd+php服務器的php信息頁面

25W(]3N(~ZH]$X~VOK145IH.png

    2.客戶端訪問代理服務器http://www.aa1.com/aa5.html的靜態html頁面,結果返回的是靜態服務器上面的靜態資源網頁(httpd服務器沒有

$HDQ2B2DAX1~70YG$39G$GM.png

    方法二:搭建phpMyAdmin網站程序驗證動靜分離

    1.將phpMyAdmin的網站源碼上傳至httpd網站根目錄並解壓,而後客戶端訪問代理服務器http://www.aa1.com/查看結果;能夠看到php頁面能夠訪問,靜態圖片沒法正常顯示

       [HQ$PC2K)OJ349EK_(QXCPI.png

    2.將phpMadmin源碼上傳到靜態服務器網站根目錄,而後再次訪問代理服務器的www.aa1.com網頁查看結果(能夠發現頁面已經顯示正常

ZVZOKI[GMU%8ONTC7GTX~CC.png

相關文章
相關標籤/搜索