环境:三台主机,一台win机器(访问测试用)

    1、192.168.10.80:安装阿帕奇。httpd

    2、192.168.10.81:安装php组件。php-fpm、php-mysql

    3、192.168.80.82:安装数据库。mariadb

rpm安装也好,yum安装也好,编译安装也可。



安装:

三台机器分别yum安装服务

1、yum -y install httpd

2、yum -y install php-fpm php-mysql

3、yum -y install mariadb



设置:

ip地址要和服务器在一个网段中。

win机器设置一下hosts文件

C:\Windows\System32\drivers\etc

要是不能修改的话,设置一下权限。

在后面加入一条

192.168.10.80    www.a.com  www.b.com

这样就可以在浏览器地址栏中用域名访问192.168.10.80了。



1、设置httpd

一般来说使用虚拟主机来完成。

在/etc/httpd/conf.d/下建立.conf文件。名字最好是主机的名字(好标示)。

如果为了和前任(包括系统自带)的配置文件分开。可以在/etc/httpd/下面建立一个自己的目录,在这里面在写虚拟主机的配置conf文件。
最后在httpd.conf文件中包含以下这个目录即可。IncludeOptional 自建目录名/*.conf。可以跟全路径。

内容如下:

<VirtualHost *:80>
        ServerName www.a.com                主机名
        ServerAlias www.a.com               访问域名

        DirectoryIndex index.html index.php    设置目录访问默认页面

        DocumentRoot /var/www/html/a        网站根目录
        <Directory /var/www/html/a>         目录控制
                Require all Granted         允许访问
        </Directory>
        ProxyPassMatch  ^/(.*\.php)$  fcgi://192.168.10.81:9000/www/$1   

                      #php结尾文件访问去192.168.10.81主机
</VirtualHost>

启动httpd服务

systemctl start httpd.server


ss -tnl 80端口listen。


一般没错的话,可以在/var/www/html/a目录下建立一个index.html文件,在别的主机访问测试一下。

显示正常就没有问题了。


win机器访问www.a.com/index.html。

如果内容正确,那么httpd的虚拟主机建立好了


2、设置php

安装php-fpm(响应httpd的php请求)和php-mysql(连接数据库用)

这里只改两个地方即可。

/etc/php-fpm.d/www.conf文件,

listen = 192.168.10.81:9000                    #监听端口和ip

listen.allowed_clients = 192.168.10.80         #允许ip访问


启动服务

systemctl start php-fpm

ss -tnl 9000端口listen。


创建网站目录,在目录下创建一个测试网页

mkdir /www

注意:

        这里的目录是虚拟主机代理时的目录

        ProxyPassMatch  ^/(.*\.php)$  fcgi://192.168.10.81:9000/www/$1 



编辑一个index.php文件,内容为

<?php

    phpinfo();

?>


win机器访问www.a.com/index.php。

能出现phpinfo的信息就没问题了。


3、设置mariadb

启动服务

systemctl start mariadb

连接测试mysql能进入命令行,ss -tnl 3306端口listen。


配置文件:/etc/my.cnf, /etc/my.cnf.d/*.cnf
    [mysqld]
    innodb_file_per_table = ON
    skip_name_resolve = ON


mysql进入mariadb的命令行


最好创建一个专用的数据库

create database 数据库名;


设置密码:

mysql>set password for 'root'@'localhost'=password('123456');


授权:

grant all on 数据库名.* to '用户名'@'访问IP' identified by '密码';
访问IP支持%,表示0~255。如172.16.%.%。一般是内网地址


这样在别的机器上连接测试

mysql -uroot -h192.168.10.82 -p123456

注意-u、-h、-p后面直接跟参数,不能有空格。


如果在别的机器上能访问mysql数据库,则连接没问题。


在192.168.10.81机器上,/www目录下建立一个连接测试页con.php

内容为


<?php
    $conn = mysql_connect('192.168.10.82','root','123456');
    if($conn)
        echo "OK";
    else
        echo "Failure";
?>

mysql_connect函数有三个参数,数据了ip、账号、密码。填写正确即可


win机器访问www.a.com/con.php

如果访问显示为OK,则连接数据库没问题。



到此,三机分离的网站搭建完成。




测试网站:

这里安装两个测试程序,一个是phpmyadmin,一个是wordpress



在192.168.10.80主机上

制作两个虚拟主机,a和b,配置文件为在/etc/httpd/conf.d下

a.conf

<VirtualHost *:80>
    ServerName www.a.com
    ServerAlias www.a.com
    DocumentRoot /var/www/html/a
    <Directory /var/www/html/a>
        Require all Granted
    </Directory>
    ProxyPassMatch  ^/(.*\.php)$  fcgi://192.168.10.81:9000/www/a/$1
</VirtualHost>

b.conf
<VirtualHost *:80>
    ServerName www.b.com
    ServerAlias www.b.com
    ProxyPassMatch  ^/(.*\.php)$  fcgi://192.168.10.81:9000/www/b/$1

    DirectoryIndex index.html index.php

    DocumentRoot /var/www/html/b
    <Directory /var/www/html/b>

        Options None
        AllowOverride None
        Require all Granted
    </Directory>
</VirtualHost>


下面在192.168.10.81机器上操作

1、phpmyadmin

直接下载安装包,解压到/www/a/目录下


需要安装包php-mbstring支持。

需要修改/www/a/phpmyadmin/libraries/config.default.php文件的一个地方

$cfg['Servers'][$i]['host'] = '192.168.10.82';

把ip地址改成数据库的地址


下面再在数据库哪里修改,等会再说


2、wordpress

下载解压至/www/b/,完整路径为/www/b/wordpress
这里只修改一个地方即可
复制/www/b/wordpress/wp-config-sample.php文件到本目录,改名为wp-config.php

修改部分内容,把数据库名,账号密码,主机ip修改好。

/** WordPress数据库的名称 */
define('DB_NAME', 'wp');
/** MySQL数据库用户名 */
define('DB_USER', 'wpuser');
/** MySQL数据库密码 */
define('DB_PASSWORD', 'wppass');
/** MySQL主机 */
define('DB_HOST', '192.168.10.82');



192.168.10.82上

下面就是数据库方面的操作。

操作简单


添加数据库,为phpmyadmin和wordpress使用

create database phpdata;

create database wp;


授权

grant all on phpdata.* to 'root'@'192.168.10.%' identified by '123456';

grant all on wp.* to 'wpuser'@'192.168.10.%' identified by 'wppass';


重启一下数据库。



测试连接机器


浏览器输入www.a.com/phpadmin/index.php

输入root密码为123456。一般进入phpmyadmin管理页面就没问题了。


我遇到几个问题,提供一下解决方案。

提示没有mbstring,在php主机上yum一下php-mbstring包即可

提示session错误,这个php主机的/var/lib/php/目录下创建一个session文件夹即可

出现phpmyadmin页面,但是输入账号密码后提示2002错误,这个需要修改一个文件

在/phpmyadmin/libraries目录下有一个文件config.default.php

$cfg['Servers'][$i]['host'] = '192.168.10.82';把ip地址填为数据库地址即可



浏览器输入www.b.com/wordpass/index.php

这里需要初始化wordpass的选项,填好即可。


这里出了个问题,初始化后无法访问www.b.com/wordpass/index.php

经过排查,是因为默认打开是一个目录地址www.b.com/wordpass/,而不是php的文件地址www.b.com/wordpass/index.php,所以不能正确的解析到php主机上去.

需要添加访问目录是的默认打开页面DirectoryIndex index.html index.php




https

分为两个过程,颁发CA和设置加密


1、颁发CA

颁发CA有两种方式,其实最后都是一样,一个是自建自发,一个是在别的机器上建立CA服务器,在颁发证书给httpd。


创建CA服务器:

安装程序openssl,一般自带,如果没有yum一个即可

    一般这个在mariadb服务器上使用,也可以在httpd服务器上,建议在mariadb服务器上

     生成秘钥:
    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
    /etc/pki/CA/private/cakey.pem:必须是这个目录这个文件名,文件名要是别的,需要在配置文件中修改。
    生成自签证书:
    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
    req:证书请求和生成工具
    -new:生成一个新的请求
    -x509:自签证,专用于私有CA
    -key:秘钥位置,后面跟秘钥位置
    -out:保存位置,后面跟公钥位置
    -days:过期时间
Country Name (2 letter code) [XX]:CN                            国家,两个字符
State or Province Name (full name) []:BJ                       省
Locality Name (eg, city) [Default City]:BJ                      市
Organization Name (eg, company) [Default Company Ltd]:ORG       公司名
Organizational Unit Name (eg, section) []:CEO                     部门
Common Name (eg, your name or your server's hostname) []:www.cash.com    个人或者主机名
Email Address []:cash@cash.com                                   管理员邮箱


    为CA创建所需目录及文件,如果存在就不管
    mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
    touch /etc/pki/CA/{serial,index.txt}
    echo 01 > /etc/pki/CA/serial


在httpd服务器上操作,生成一个秘钥,让CA服务器认证一下。

方便管理,在/etc/httpd目录下创建一个ssl目录,在这个目录下操作。

其实在哪里都可以,但是建议不要乱来。


生成个人秘钥

(umask 077; openssl genrsa -out keyfile.key 2048)                  生成keyfile.key
openssl req -new -key keyfile.key -out keyfile.csr -days 365     生成csr文件,需要填写信息

Country Name (2 letter code) [XX]:CN        和CA服务器需要相同,省市也一样
State or Province Name (full name) []:BJ            省
Locality Name (eg, city) [Default City]:BJ                市
Organization Name (eg, company) [Default Company Ltd]:a    公司名
Organizational Unit Name (eg, section) []:CTO            部门
Common Name (eg, your name or your server's hostname) []:www.a.com    个人或者主机名
Email Address []:cash@a.com                                           管理员邮箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:cashcash                密码
An optional company name []:cash Inc

注意,Common Name主机名需要和网站名相同,要不然不是你的网站的CA,无法使用


拷贝到CA主机上,用scp命令
scp keyfile.csr root@192.168.10.82:/path/
输入root的密码,就可以拷贝过去

签证:
openssl ca -in /path/keyfile.csr -out /etc/pki/CA/keyfile.crt -days 365
ca:签发证书


拷贝回原来的机器
scp keyfile.crt root@192.168.10.80:/etc/httpd/ssl/

注意:为了安全,最好把用完的文件删除,如CA主机上的keyfile.csr,本机的keyfile.scr。


要是本机自建自发的话,省去了scp过程。


下面就是修改虚拟主机的配置,要不然网站也没法用。


主要是添加三行和修改端口。

<VirtualHost *:443>                                修改端口为443
    ServerName www.a.com
    ServerAlias www.a.com
    DirectoryIndex index.html index.php
    DocumentRoot /var/www/html/a
    <Directory /var/www/html/a>
        Options None
        AllowOverride None
        Require all Granted
    </Directory>
    
    ProxyRequests off
    ProxyPassMatch  ^/(.*\.php)$  fcgi://192.168.10.81:9000/www/a/$1

    SSLEngine on                                         下面三行就是加密认证
    SSLCertificateFile "/etc/httpd/ssl/keyfile.crt"
    SSLCertificateKeyFile "/etc/httpd/ssl/keyfile.key"

</VirtualHost>


重启一下httpd即可完成配置

在win机器上测试

https://www.a.com/index.php