言:
LAMP为网站搭建的很基本的一个架构,如果仅仅只是静态的网页文件,我们就可以通过基本的web服务器来处理。当我们需要处理动态内容时,比如把用户数据放在数据库,从数据库取出数据等等,我们就必须借助CGI连接到处理动态请求的应用。FastCGI作为一个常驻型的CGI,可以独立于apache服务,可以实现分布式的部署。接下来我们用一台 主机来搭建phpMyAdmin和WordPress,并且让wordpress实现https。
正文:
部署之前我们先简单介绍下我们用到的架构,不用多说LAMP就是我们熟悉的linux系统,apache,MySQL(maridb)和php,本次部署过程中我们用到的数据库是maridb,基本上和mysql没多大区别。当我们的web服务器收到一个请求时,如果请求的是静态资源,服务器就返回静态资源,如果请求的是动态资源,服务器本身并不能处理,需要发到可以处理动态请求的程序上。CGI就是http服务器与其他程序交谈的接口。
首先,安装必要的程序,
yum install httpd php php-mysql php-fpm mariadb-server mariadb php-mbstring
其中php-mysql是php连接mysql的,php-fpm就是fastcgi。然后我们就启动这些服务。
systemctl start httpd
systemctl start mariadb
systemctl start php-fpm
然后我们得下载MyAdmin和WordPress,解压后放到/var/www/html目录下,并分别重命名为vhost1和vhost2
mv /var/www/html/{MyAdmin*,vhost1}
mv /var/www/html/{WordPress*,vhost2}
一台服务器起两个web服务,所以我们就得用到虚拟主机实现,实现方法也特别简单。
修改httpd配置文件,/etc/httpd/conf/httpd.conf找到DocumentRoot注释掉。
vim /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html"
然后我们就开始建我们第一个虚拟主机vhost1了,在/etc/httpd/conf.d/目录下面,新建一个vhost.conf,以此来记录虚拟主机的相关配置。配置内容:
#/etc/httpd/conf.d/vhost.conf
DirectoryIndex index.php
<VirtualHost *:80>
Servername
DocumentRoot /var/www/html/vhost1
ProxyRequests Off
ProxyPassMatch ^/(.*\.php) fcgi://127.0.0.1:9000/var/www/html/vhost1/$1
<Directory "/var/www/html/vhost1">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
默认当我们输入网址或者ip时,可以自动识别工作目录下的index.html文件为主页,为了也能识别index.php,我们就得配置DirectoryIndex index.php。下面的就是第一个虚拟主机的配置。我们的第一个网站放在/var/www/html/vhost1下,并自动加载index.php。此时我们就可以访问我们的第一个网站了,只用输入ip或域名即可。
两个进程间通信间通信是要靠一个叫做socket的东东,就是ip和端口号,http服务的默认端口为80,当然ip地址还是很难记住的,所以我们用一个可读性更高的域名来标识一个网站。所以当我们想在一台服务器上放好几个站点时,服务器怎么来区分他们呢?
虚拟主机可以通过三种方法构架,分别是基于ip,基于端口,和基于域名。使用的最多的就是基于不同域名实现的.
接下来,我们实现基于httpd的WordPress,一般而言,我们得自行购买证书,放在服务器上,不过既然是自己随便玩玩,也没想着上线,所以我们可以自建CA,下发证书。我们打开另一个linux系统,作为CA服务器。实现一个CA服务器也相当简单,生成一个私钥,然后通过这个私钥来生成一个自签证书。然后http服务器向CA服务器发一个证书 签名的请求,服务签名后再发给http服务器。好了,我们直接来实现把。
#CA服务器端(172.16.254.181)
cd/etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048)#生成私钥,让在private目录下
openssl req -new -x509 -key private/cakey.pem -out cacert.pem#通过上面的私钥生成自签证书
touch serial index.txt #生成计数文件
echo 01 > serial #初始话计数。
#http端(172.16.53.183)
cd /etc/httpd
mkdir ssl #在httpd的配置文件目录下,新建ssl用来存放私钥和证书
cd ssl
(umask 077;openssl genrsa -out httpd.key 1024)#建立私钥
openssl req -new -key httpd.key -out httpd.csr#建立证书签字请求文件
scp httpd.csr 172.16.253.181:/tmp#发送到CA服务器端。
#服务器端
openssl ca -in /tmp/httpd.csr -out certs/httpd.crt #签字,并把证书放在certs目录下,如果报错,基本上是因为你的CA服务器忘记创建index.txt 或serial里面没序号。
scp certs/httpd.crt 172.16.53.180:/etc/httpd/ssl/#把证书发送到httpd服务器端
使用基于ssl的https时,我们还得用到一个模块,所以我们先安装模块。
yum install mod_ssl