1. 程式人生 > >CentOS 7.1.1503 varnish動靜分離反代用戶請求

CentOS 7.1.1503 varnish動靜分離反代用戶請求

mbstring tables enforce not found creat per 文件系統 主機 含義

前言

<> 非常感謝Kason老師,您是我們成功的蠟燭,燃燒著自己,照亮我們前進的道路。

varnish配置動靜分離時,這些問題困擾了兩周:

  • 環境:varnish做為反代,你們都知道的:varnish,nginx, haproxy都可以做為反代服務器,varnish比較擅長緩存。後端主機一個提供動態資源及變化的資源(php, css, js),一個提供靜態資源(images)
  • 每次訪問varnish的6081端口,phpinfo.php和php-mysql.php都可以正常訪問,肯定沒有問題,但訪問wodpress時,要麽是NOT FOUND要麽是直接將目錄索引顯示出來。

> 總結:

> 對中小型站點的整個架構沒有一個完整、清晰的認識。
>
我只是將老師的配置粘貼進去,從不去想真正的含義。
> * 學到puppet時,越覺得前面的東西是多麽重要,了解一個個架構,才能更好的駕駛運維工具本身。


站點架構

  • 在接入層將動靜分離,一般varnish不會做動靜分離
  • varnish接收到圖片和js,css文件後,將其反代到不同的主機。圖片至分布式文件系統,js,css文件反代至業務層。
  • 所以如果在varnish動靜分離,首先要確保各個資源都代理至正確的主機,而後將所有的資源全部代理至動態服務器。
    技術分享圖片

環境

技術分享圖片

配置前提


所有節點時間同步。
關閉防火墻、SELinux。

yum源:EPEL、Base。

~]# ntpdate 0.centos.pool.ntp.org
~]# iptables -F
~]# setenforce 0

配置靜態服務器


安裝程序包

~]# yum -y install httpd

啟動服務

~]# systemctl start httpd.service

測試訪問

http://172.16.0.68/
Testing 123..

配置動態服務器


安裝程序包

~]# yum -y install httpd php php-mysql mariadb-server php-mbstring php-mcrypt

啟動httpd服務

~]# systemctl start httpd.service

測試訪問httpd服務

http://172.16.0.69/
Testing 123..

配置mariadb-server

~]# vim /etc/my.cnf.d/server.cnf 
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON

啟動mariadb服務

~]# systemctl start mariadb.service
~]# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     

授權用戶,供wordpress使用

[root@localhost ~]# mysql
MariaDB [(none)]> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON wordpress.* TO ‘wpuser‘@‘172.16.0.%‘ IDENTIFIED BY ‘wppass‘;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

測試連接mysql

~]# mysql -uwpuser -pwppass -h172.16.0.69

提供開源php資源

~]# cp wordpress-4.9.1-zh_CN.tar.gz /var/www/html/

展開php程序,為其鏈接

~]# tar xf wordpress-4.9.1-zh_CN.tar.gz 
~]# ln -sv wordpress wp
~]# ll
total 9912
-rw-------. 1 root   root          1637 Dec  6 02:45 anaconda-ks.cfg
-rw-r--r--. 1 root   root          1556 Jan 14 14:58 genaral_test.sh
drwxr-xr-x. 1 nobody nfsnobody      498 Nov 30 20:20 wordpress
-rw-r--r--. 1 root   root      10130710 Dec  1 18:57 wordpress-4.9.1-zh_CN.tar.gz
lrwxrwxrwx. 1 root   root             9 Jan 14 15:41 wp -> wordpress
-rw-r--r--. 1 root   root           832 Jan 14 14:58 yum.sh

提供連接mariadb-server的配置

/** WordPress數據庫的名稱 */
define(‘DB_NAME‘, ‘wordpress‘);
/** MySQL數據庫用戶名 */
define(‘DB_USER‘, ‘wpuser‘);
/** MySQL數據庫密碼 */
define(‘DB_PASSWORD‘, ‘wppass‘);
/** MySQL主機 */
define(‘DB_HOST‘, ‘172.16.0.69‘);

提供測試頁面

web測試頁面

~]# cat /var/www/html/index.html 
<h1>172.16.0.69</h1>

php環境測試

 ~]# cat /var/www/html/phpinfo.php 
<html>
    <title>Test Page</title>
    <body>
        <h1>172.16.0.69</h1>
        <?php
            phpinfo();
        ?>
    </body>
</html>

php-mysql測試頁面

~]# cat /var/www/html/php-mysql.php 
<?php
    $conn = mysql_connect(‘172.16.0.69‘,‘wpuser‘,‘wppass‘);
    if ($conn)
        echo "connect 172.16.0.69 success";
    else
        echo "connect 172.16.0.69 failure";
?>

測試連接

技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

給靜態服務器一份php程序

~]# scp -r /var/www/html/{wordpress,wp} 172.16.0.68:/var/www/html

配置varnish緩存服務器


安裝varnish

~]# yum -y install varnish

配置varnish

~]# vim /etc/varnish/varnish.params 
‘VARNISH_LISTEN_PORT=80
VARNISH_STORAGE="file,/data/varnish/cache,1g"
~]# vim /etc/varnish/default.vcl
backend default {
    .host = "172.16.0.68";
    .port = "80";
}
backend appsrv {
    .host = "172.16.0.69";
    .port = "80";
}  
sub vcl_recv {
    if (req.url ~ "(?i)\.(php|jsp|do)$") {
            set req.backend_hint = appsrv;
    }
    if (req.url ~ "(?i)\.(css|js)$") {
            set req.backend_hint = appsrv;
    }
    if (req.url ~ "(?i)\.(jpg|jpeg|png|gif)$") {
            set req.backend_hint = default;
    } else {
            set req.backend_hint = appsrv;
    }
}

準備目錄

~]# install -d -v -o varnish -g varnish /data/varnish/cache

啟動varnish

~]# systemctl start varnish.service
~]# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:6082          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     

測試訪問

技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

查看是否動靜分離

172.16.0.68靜態服務器上查看

技術分享圖片

172.16.0.69動態服務器上查看

技術分享圖片

CentOS 7.1.1503 varnish動靜分離反代用戶請求