一、实验环境

 系统:CentOS7.6

 主机:两台(一台也可以),一台实现apache+php-fpm (192.168.214.17),一台实现mysql服务器 (192.168.214.27)

 软件包:

  Apache:httpd-2.4.39.tar.bz2,apr-1.7.0.tar.bz2,apr-util-1.6.1.tar.bz2

  PHP:php-7.3.7.tar.xz

  MySQL:mariadb-10.2.25-linux-x86_64.tar.gz (二进制包)

  web网站:Discuz_X3.3_SC_UTF8.zip,wordpress-5.2.2.tar.gz

  虚拟主机配置:forum.abcdef.com (论坛域名 对应Discuz),blog.abcdef.com (博客域名 对应wordpress)

二、实验步骤

1、实现MySQL服务器(192.168.214.27)

 (1) 准备安装包 

[root@centos7- ~]# ll /data
total
-rw-r--r-- root root Dec : mariadb-10.2.-linux-x86_64.tar.gz

 (2) 新建mysql用户与数据目录

[root@centos7- ~]# useradd -r -s /sbin/nologin -d /data/mysql mysql
[root@centos7- ~]# mkdir /data/mysql
[root@centos7- ~]# chown mysql:mysql /data/mysql/

 (3) 准备二进制程序

[root@centos7- data]# cd /data/
[root@centos7- data]# tar -zxvf mariadb-10.2.-linux-x86_64.tar.gz -C /usr/local/
[root@centos7- data]# cd /usr/local/
[root@centos7- local]# ln -s mariadb-10.2.-linux-x86_64/ mysql
[root@centos7- local]# chown -R root:mysql /usr/local/mysql

 (4) 准备配置文件

[root@centos7- local]# cd /usr/local/mysql/
[root@centos7- mysql]# mkdir /etc/mysql
[root@centos7- mysql]# cp support-files/my-huge.cnf /etc/mysql/my.cnf
[root@centos7- mysql]# vim /etc/mysql/my.cnf
#在[mysqld]下添加以下三项
datadir = /data/mysql
innodb_file_per_table = on
skip_name_resolve = on
#以下项非必需,建议添加,设置服务器端字符集
character_set_server = utf8mb4

 (5) 初始化数据库,生成数据库文件

[root@centos7- mysql]# ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql

 (6) 准备服务脚本,并启动服务

[root@centos7- mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@centos7- mysql]# chkconfig --add mysqld
[root@centos7- mysql]# service mysqld start
Starting mysqld (via systemctl): [ OK ]

 (7)  配置PATH变量

[root@centos7- mysql]# echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@centos7- mysql]# . /etc/profile.d/mysql.sh

 (8) 安全加固,以上安装后数据库是没有密码的,可以使用安全初始化脚本修改密码

[root@centos7- mysql]# mysql_secure_installation 

2、编译安装httpd (192.168.214.17)

 (1) 准备安装包

[root@centos7- data]# cd /data
[root@centos7- data]# ls -lh *.bz2
-rw-r--r-- root root 852K Dec : apr-1.7..tar.bz2
-rw-r--r-- root root 419K Dec : apr-util-1.6..tar.bz2
-rw-r--r-- root root 6.8M Dec : httpd-2.4..tar.bz2

 (2) 解压源码包,并将 apr 和 apr-util 复制到 httpd 解压包中一起进行编译,当然也可以单独编译

[root@centos7- data]# tar -jxvf apr-1.7..tar.bz2
[root@centos7- data]# tar -jxvf apr-util-1.6..tar.bz2
[root@centos7- data]# tar -jxvf httpd-2.4..tar.bz2
[root@centos7- data]# mv apr-1.7. httpd-2.4./srclib/apr
[root@centos7- data]# mv apr-util-1.6. httpd-2.4./srclib/apr-util

 (3) 安装相关所需包(光盘yum源)

[root@centos7- data]# cat /etc/yum.repos.d/base.repo
[development]
name=dvdbase repo
baseurl=file:///mnt/cdrom/
enabled=
gpgcheck=
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7 [root@centos7- data]# yum install -y gcc pcre-devel openssl-devel expat-devel

 (4) 开始编译安装

[root@centos7- data]# cd httpd-2.4./
[root@centos7- httpd-2.4.]# ./configure \
> --prefix=/app/httpd24 \
> --enable-so \
> --enable-ssl \
> --enable-cgi \
> --enable-rewrite \
> --with-zlib \
> --with-pcre \
> --with-included-apr \
> --enable-modules=most \
> --enable-mpms-shared=all \
> --with-mpm=prefork
[root@centos7- httpd-2.4.]# make && make install
./configure \
--prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork

编译代码

 (5) 创建apache用户并修改配置文件中的启动时所用的用户和组,配置文件中默认的用户和组都为 daemon

[root@centos7- httpd-2.4.]# useradd -r -s /sbin/nologin apache
[root@centos7- httpd-2.4.]# vim /app/httpd24/conf/httpd.conf
#找到以下两项,修改用户和组为apache
user apache
group apache

 (6) 配置PATH变量并启动测试

[root@centos7- httpd-2.4.]# echo 'PATH=/app/httpd24/bin:$PATH' > /etc/profile.d/http24.sh
[root@centos7- httpd-2.4.]# . /etc/profile.d/http24.sh
[root@centos7- httpd-2.4.]# apachectl start
[root@centos7- httpd-2.4.]# curl http://192.168.214.17
#测试访问,可以看到可以了
<html><body><h1>It works!</h1></body></html>

 附:httpd 通过 systemctl 命令的启动脚本制作,根据光盘 yum 源安装的 httpd-2.4.6 包中的 httpd.service 文件修改的

[root@centos7- data]# vim /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd()
Documentation=man:apachectl() [Service]
#Type=notify
Type=forking #修改此处
#EnvironmentFile=/etc/sysconfig/httpd #注释此项
#ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecStart=/app/httpd24/bin/httpd $OPTIONS -k start #修改此处
ExecReload=/app/http24/bin/httpd $OPTIONS -k graceful
#ExecStop=/bin/kill -WINCH ${MAINPID}
ExecStop=/app/httpd24/bin/httpd $OPTIONS -k stop #修改此处
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true [Install]
WantedBy=multi-user.target [root@centos7- data]# systemctl start httpd
[root@centos7- data]# systemctl stop httpd
[root@centos7- data]# systemctl restart httpd

3、编译安装php-fpm (192.168.214.17)

 (1) 准备安装包

[root@centos7- ~]# cd /data
[root@centos7- data]# ls -l php-7.3..tar.bz2
-rw-r--r-- root root Dec : php-7.3..tar.bz2

 (2) 安装相关所需包(光盘yum源与EPEL源)

[root@centos7- data]# cat /etc/yum.repos.d/base.repo
[development] #光盘源也可用阿里云的yum源
name=dvdbase repo
baseurl=file:///mnt/cdrom/
enabled=
gpgcheck=
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7 [aliyunEpel] #epel源
name=aliyun epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever [root@centos7- data]# yum install libxml2-devel bzip2-devel libmcrypt-devel
#libmcrypt相关包依赖epel源

 (3) 解压源码包,并进行编译安装

[root@centos7- data]# tar -jxvf php-7.3..tar.bz2
[root@centos7- data]# cd php-7.3./
[root@centos7- php-7.3.]# ./configure --prefix=/app/php \
> --enable-mysqlnd \
> --with-mysqli=mysqlnd \
> --with-pdo-mysql=mysqlnd \
> --with-openssl \
> --with-freetype-dir \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib \
> --with-libxml-dir=/usr \
> --with-config-file-path=/etc \
> --with-config-file-scan-dir=/etc/php.d \
> --enable-mbstring \
> --enable-xml \
> --enable-sockets \
> --enable-fpm \
> --enable-maintainer-zts \
> --disable-fileinfo
[root@centos7- php-7.3.]# make && make install
./configure --prefix=/app/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-mbstring \
--enable-xml \
--enable-sockets \
--enable-fpm \
--enable-maintainer-zts \
--disable-fileinfo

编译代码

 (4) 准备配置文件,并修改 www.conf 配置文件中启动用户与组为 apache,默认用户与组为 nobody

[root@centos7- php-7.3.]# cp php.ini-production /etc/php.ini
[root@centos7- php-7.3.]# cd /app/php/etc/
[root@centos7- etc]# cp php-fpm.conf.default php-fpm.conf
[root@centos7- etc]# cd php-fpm.d/
[root@centos7- php-fpm.d]# cp www.conf.default www.conf
[root@centos7- php-fpm.d]# vim www.conf
#找到以下两项,将nobody改为apache
user = apache
group = apache

 (5) 准备服务启动脚本,并启动 php-fpm 服务

[root@centos7- php-fpm.d]# cd /data/php-7.3./
[root@centos7- php-7.3.]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@centos7- php-7.3.]# chmod +x /etc/init.d/php-fpm
[root@centos7- php-7.3.]# chkconfig --add php-fpm
[root@centos7- php-7.3.]# service php-fpm start
Starting php-fpm done
[root@centos7- php-7.3.]# ss -nlt|grep #可以看到9000端口已经启动
LISTEN 127.0.0.1: *:*

4、配置 httpd 配置文件,让其支持 php

 (1) 修改 http.conf 文件,

[root@centos7-17 ~]# vim /app/httpd24/conf/httpd.conf

#取消下面两个模块的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #修改下面行,添加 index.php
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule> #添加以下行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
#以下这行如果是单主机是必需加的,但我们要什么多虚拟主机,到时到虚拟主机配置中加即可
#ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1 

5、配置网站

 (1) 在/app/httpd24/htdocs/ 创建多虚拟主机所需文件夹

[root@centos7- ~]# mkdir -v /app/httpd24/htdocs/{wordpress,discuz}
mkdir: created directory ‘/app/httpd24/htdocs/wordpress’
mkdir: created directory ‘/app/httpd24/htdocs/discuz’

 (2) 继续在 http.conf 文件中添加多虚拟主机设置

[root@centos7- ~]# vim /app/httpd24/conf/httpd.conf

<VirtualHost *:>
ServerName blog.abcdef.com
DocumentRoot /app/httpd24/htdocs/wordpress
CustomLog logs/blog.access_log combined #访问日志
ErrorLog logs/blog.error_log #错误日志
LogLevel warn #日志级别
<Directory /app/httpd24/htdocs/wordpress>
Options none
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/wordpress/$1
</VirtualHost> <VirtualHost *:>
ServerName forum.abcdef.com
DocumentRoot /app/httpd24/htdocs/discuz
CustomLog logs/forum.access_log combined
ErrorLog logs/forum.error_log
LogLevel warn
<Directory /app/httpd24/htdocs/discuz>
Options none
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/discuz/$1
</VirtualHost>

 (3) 重新启动 httpd 服务

[root@centos7- ~]# apachectl restart

 (4) 准备网站源码,并在源码目录给 apache 用户设置访问控制权限

[root@centos7- data]# ll Discuz_X3.3_SC_UTF8.zip wordpress-5.2..tar.gz
-rw-r--r-- root root Dec : Discuz_X3.3_SC_UTF8.zip
-rw-r--r-- root root Dec : wordpress-5.2..tar.gz
[root@centos7- data]# tar -xvf wordpress-5.2..tar.gz
[root@centos7- data]# unzip Discuz_X3.3_SC_UTF8.zip
[root@centos7- data]# cp -r wordpress/* /app/httpd24/htdocs/wordpress/
[root@centos7-17 data]# cp -r upload/* /app/httpd24/htdocs/discuz/
#设置apache用户的ACL权限,以便在网站安装时有权限读写文件
[root@centos7-17 data]# setfacl -Rm u:apache:rwx /app/httpd24/htdocs/wordpress
[root@centos7-17 data]# setfacl -Rm u:apache:rwx /app/httpd24/htdocs/discuz

 (5) 在数据库服务器上 (192.168.214.27),创建数据库及连接数据库的用户

[root@centos7-27 mysql]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.2.25-MariaDB-log MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create database discuz;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> grant all on wordpress.* to 'wpuser'@'192.168.214.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant all on discuz.* to 'dsuser'@'192.168.214.%' identified by 'centos7' ;
Query OK, 0 rows affected (0.01 sec)

 (6) 设置 hosts 文件,使域名可以解析到主机,在 hosts 文件中添加一行(如果利用Linux图形桌面上的浏览器进行网站安装,hosts文件为 /etc/hosts,如果是用windows安装,则host文件 路径为 C:\Windows\System32\drivers\etc )

   192.168.214.17 blog.abcdef.com forum.abcdef.com

 (7) 安装网站即可,利用浏览器安装,输出相应域名,根据安装向导安装即可

  blog.abcdef.com域名访问如图,一步步安装即可

  forum.abcdef.com域名访问如下图,一步步安装即可

Linux学习-基于CentOS7的LAMP环境实现多虚拟主机的更多相关文章

  1. linux学习(一) -- ubuntu下lamp环境的配置

    以下为实测教程,希望能为大家提供帮助,转载请注明出处 ubuntu+apache+mysql+php7 第一.更换apt的源 1.复制原文件备份 sudo cp /etc/apt/source.lis ...

  2. CentOS7单机部署lamp环境和apache虚拟主机

    (1)apache介绍 apache : httpd.apache.org 软件包:httpd 端口服务:80/tcp(http) 443/tcp(https,http+ssl) 配置文件: /etc ...

  3. Linux学习-基于CentOS7的ProxySQL实现读写分离

    一.实验环境 主机:3台,一台ProxySQL(192.168.214.37),两台主从复制,master(192.168.214.17),slave(192.168.214.27) 系统:CentO ...

  4. Linux学习-基于CentOS7的MariaDB数据库的安装

    一.实验环境: 系统:CentOS7.6,关闭了防火墙与SELINUX 数据库版本:mariadb-10.2.25(二进制安装与源码安装) 二.安装方法: 1.yum源安装 (1) 配置yum源,官方 ...

  5. Linux学习-基于CentOS7的MySQL5.7的GTID复制

    一.GTID复制简介 GTID (global transaction id)全局事务标识符,MySQL5.6版本开始支持,GTID复制不像传统的复制方式(导步复制.半同步复制)需要找到binlog和 ...

  6. Linux学习-基于CentOS7的MariaDB数据库的主从复制

    一.MySQL主从复制原理 主从同步过程中主服务器有一个工作线程I/O dump thread,从服务器有两个工作线程I/O thread和SQL thread: 主服务器: dump Thread: ...

  7. linux环境下配置虚拟主机域名

    linux环境下面配置虚拟主机域名 第一步:在root目录下面(即根目录)ls(查看文件)cd进入etc目录find hosts文件vi hosts 打开hosts文件并进行编辑在打开的文件最下面添加 ...

  8. centos7 配置lamp 环境

    搭建版本 版本组合 php5.6+apache/2.4.6(centos7)+mysql5.7.24 因为新系统不能确认哪些指令已经搭建  所以安装前需要确认下是否拥有 检测是否已经安装过Vim rp ...

  9. Linux下Discuz!7.2 LAMP环境搭建

    linux下Discuz LAMP环境搭建 1.需要的源代码 httpd-2.2.15.tar.gz          mysql-5.1.44.tar.gz     php-5.3.2.tar.gz ...

随机推荐

  1. 利用sshpass批量导入ssh-key

    #!/bin/bash set +x base_dir=$(pwd) ip_list='10.200.7.28,10.200.7.29,10.200.7.30,10.200.7.31' USER='r ...

  2. DataAdapter的Fill方法(转)

    使用DataAdapter填充DataSet(1) 在选择了DataAdapter的类型(SqlDataAdapter或OleDbDataAdapter)并配置了DataAdapter来执行所需的任务 ...

  3. [Web 前端] 030 ajax 是什么

    AJAX 是什么 1. AJAX 是一种"艺术" 简单地说 AJAX 是在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的艺术 网上是这样说的 AJAX 指异步 Java ...

  4. C++中的赋值操作符重载和拷贝构造函数

    1,关于赋值的疑问: 1,什么时候需要重载赋值操作符? 2,编译器是否提供默认的赋值操作符? 2,关于赋值的疑问: 1,编译器为每个类默认重载了赋值操作符: 1,意味着同类型的类对象可以相互赋值: 2 ...

  5. uboot常用命令

    一. 常用简单命令 1.1. help命令 a. 帮助查看其他命令的使用方法,类型linux下man b. 示例: help help x210 # help help help [command . ...

  6. [多校联考2019(Round 4 T2)][51nod 1288]汽油补给(ST表+单调栈)

    [51nod 1288]汽油补给(ST表+单调栈) 题面 有(N+1)个城市,0是起点N是终点,开车从0 -> 1 - > 2...... -> N,车每走1个单位距离消耗1个单位的 ...

  7. HDU-4857 逃生(反向拓扑排序 + 逆向输出)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. linux基本命令之磁盘管理命令(ls,cd,pwd,mkdir,rmdir,clear, touch)

    linux磁盘管理命令 1.ls(list)命令:列出目录内容. 格式:ls [参数][文件或目录] ls -a或-all表示列出所有文件和目录,以点开始的是影藏文件,例如,.bash_history ...

  9. 【问题解决方案】visudo: /etc/sudoers is busy, try again later

    参考链接: 博客园:visudo: /etc/sudoers is busy, try again later CSDN:Shell 获取进程号并杀掉该进程 注:找到几篇相同的参考内容,都是只有查看进 ...

  10. nmap 扫描出某网段内web服务器

    今天碰到一个问题,客户要求在他们内网中扫描出所有web服务器,然后再对web进行渗透测试,共两个网段. 以前我记得用nmap时曾得到过某地址的web服务器数据,比如显示是IIS或apach,但忘了具体 ...