什麼是動靜分離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
服務器名稱 | 系統類型 | 預裝的軟件 | 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解析是否正常
配置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驗證動態資源反代是否成功
靜態服務器配置
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信息頁面
2.客戶端訪問代理服務器http://www.aa1.com/aa5.html的靜態html頁面,結果返回的是靜態服務器上面的靜態資源網頁(httpd服務器沒有)
方法二:搭建phpMyAdmin網站程序驗證動靜分離
1.將phpMyAdmin的網站源碼上傳至httpd網站根目錄並解壓,而後客戶端訪問代理服務器http://www.aa1.com/查看結果;能夠看到php頁面能夠訪問,靜態圖片沒法正常顯示
2.將phpMadmin源碼上傳到靜態服務器網站根目錄,而後再次訪問代理服務器的www.aa1.com網頁查看結果(能夠發現頁面已經顯示正常)