天天看点

简单lamp动静、站库分离搭建过程

环境:三台主机,一台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

内容为

    $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

    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

b.conf

    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

下面在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 []:[email protected]                                   管理员邮箱

    为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 []:[email protected]                                           管理员邮箱

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 [email protected]:/path/

输入root的密码,就可以拷贝过去

签证:

openssl ca -in /path/keyfile.csr -out /etc/pki/CA/keyfile.crt -days 365

ca:签发证书

拷贝回原来的机器

scp keyfile.crt [email protected]:/etc/httpd/ssl/

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

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

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

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

<VirtualHost *:443>                                修改端口为443

    DirectoryIndex index.html index.php

        Options None

        AllowOverride None

    ProxyRequests off

    SSLEngine on                                         下面三行就是加密认证

    SSLCertificateFile "/etc/httpd/ssl/keyfile.crt"

    SSLCertificateKeyFile "/etc/httpd/ssl/keyfile.key"

重启一下httpd即可完成配置

在win机器上测试

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