所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台。
在说lamp架构平台的搭建前,我们先来了解下什么是CGI,什么是FastCGI,什么是…
web服务器的资源分为两种,静态资源和动态资源
那么web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求

如上图所示
阶段①显示的是httpd服务器(即apache)和php服务器通过FastCGI协议进行通信,且php作为独立的服务进程运行
阶段②显示的是php程序和mysql数据库间通过mysql协议进行通信。php与mysql本没有什么联系,但是由Php语言写成的程序可以与mysql进行数据交互。同理perl和python写的程序也可以与mysql数据库进行交互
上图阶段①中提到了FastCGI,下面我们来了解下CGI与FastCGI。
CGI(Common Gateway Interface,通用网关接口),CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
FastCGI(Fast Common Gateway Interface)是CGI的改良版,CGI是通过启用一个解释器进程来处理每个请求,耗时且耗资源,而FastCGI则是通过master-worker形式来处理每个请求,即启动一个master主进程,然后根据配置启动几个worker进程,当请求进来时,master会从worker进程中选择一个去处理请求,这样就避免了重复的生成和杀死进程带来的频繁cpu上下文切换而导致耗时
httpd与php结合的方式有以下三种:
较于CGI方式,FastCGI更为常用,很少有人使用CGI方式来加载动态资源
通过上面的图说明一下web的工作流程:
环境说明:
| 系统平台 | IP | 需要安装的服务 |
|---|---|---|
| centos8 redhat8 | 192.168.229.129 | httpd-2.4 mysql-5.7 php php-mysql |
LAMP平台软件安装次序:
httpd --> mysql --> php注意:php要求httpd使用prefork MPM
apache官网: https://apache.org/
# YUM源配置
## 基础源
[root@localhost yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@localhost yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
# 清除缓存
[root@localhost yum.repos.d]# dnf clean all
0 files removed
# 建立缓存
[root@localhost yum.repos.d]# dnf makecache
# 配置epel源
[root@localhost yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@localhost yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@localhost yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
# 清除缓存
[root@localhost yum.repos.d]# dnf clean all
0 files removed
# 建立缓存
[root@localhost yum.repos.d]# dnf makecache
# 安装开发工具包(标志安装)
[root@localhost ~]# yum groups mark install 'Development Tools'
# 创建apache系统用户
[root@localhost ~]# useradd -r -M -s /sbin/nologin apache
[root@localhost ~]# id apache
uid=995(apache) gid=992(apache) groups=992(apache)
# 安装依赖包
[root@localhost ~]# dnf -y install openssl-devel pcre-devel expat-devel libtool boost-devel --allowerasing gcc gcc-c++ make vim wget
安装 boost-devel --allowerasing 这个是因为安装gcc报错所以需要安装这个
# 下载和安装apr和apr-util、httpd包
#下载apr包
[root@localhost ~]# cd /opt/
[root@localhost opt]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
#下载apr-util包
[root@localhost opt]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
#下载httpd包
[root@localhost opt]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
[root@localhost opt]# ls
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.53.tar.gz
# 解压包
[root@localhost opt]# tar xf apr-1.7.0.tar.gz
[root@localhost opt]# tar xf apr-util-1.6.1.tar.gz
[root@localhost opt]# tar xf httpd-2.4.53.tar.gz
# 需要进去apr 里面的configure 更改一个数据
[root@localhost opt]# vim apr-1.7.0/configur
cfgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile" # 将此行加上注释,或者删除此行
# 编译Apr
[root@localhost opt]# cd apr-1.7.0/
[root@localhost apr-1.7.0]# ./configure --prefix=/usr/local/apr
配置过程略...
# make
[root@localhost apr-1.7.0]# make
编译安装过程略...
# make install
[root@localhost apr-1.7.0]# make install
编译安装过程略...
# 编译Apr-util
[root@localhost apr-1.7.0]# cd ../apr-util-1.6.1/
[root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
配置过程略...
# make
[root@localhost apr-util-1.6.1]# make
编译安装过程略...
# make install
[root@localhost apr-util-1.6.1]# make install
编译安装过程略...
# 编译安装httpd
[root@localhost apr-util-1.6.1]# cd ../httpd-2.4.53/
[root@localhost httpd-2.4.53]# ./configure --prefix=/usr/local/apache \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
编译安装过程略...
# make
[root@localhost httpd-2.4.53]# make
编译安装过程略...
# make install
[root@localhost httpd-2.4.53]# make install
编译安装过程略...
# 设置环境变量
[root@localhost ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@localhost ~]# source /etc/profile.d/apache.sh # 刷新,让其生效
[root@localhost ~]# which apachectl # 查看是否已生效
/usr/local/apache/bin/apachectl
# 配置头文件
[root@localhost ~]# ln -s /usr/local/apache/include /usr/include/apache
# 配置man文档
[root@localhost ~]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/apache/man # 添加
# 启动apache
[root@localhost ~]# apachectl start
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:80 *:*
# 用apachectl start 这个命令启动会有一个警告,是因为需要进到主文件里面修改一个数据
### apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
# 解决警告信息
# 第一种做法 vim 进入里面取消 #号
[root@localhost ~]# cd /usr/local/apache/conf/
[root@localhost conf]# vim httpd.conf
ServerName www.example.com:80 # 取消ServerName前面的注释
# 第二种做法使用sed命令
[root@localhost ~]# sed -i '/#ServerName/s/#//g' /usr/local/apache/conf/
# 关闭防火墙和SElinux
[root@localhost ~]# systemctl disable --now firewalld
[root@localhost ~]# vim /etc/selinux/config
[root@localhost ~]# head -7 /etc/selinux/config | tail -1
SELINUX=disabled
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
# 现在有一个问题,就是开机自启?
配置apache开机自启
## 配置service 文件
# 进到这个系统目录
[root@localhost ~]# cd /usr/lib/systemd/system
# 复制一份,进里面改
[root@localhost system]# cp sshd.service httpd.service
[root@localhost system]# vim httpd.service
[Unit]
Description=httpd server daemon
After=network.target sshd-keygen.target
[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start
ExecStop=/usr/local/apache/bin/apachectl stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
# 刷新进程
[root@localhost ~]# systemctl daemon-reload
# 设置apache开机自启
[root@localhost ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl status httpd
● httpd.service - httpd server daemon
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2022-07-04 18:59:49 CST; 1s ago
Process: 48390 ExecStart=/usr/local/apache/bin/apachectl start (code=exited, status=0/SUCCESS)
........省略mysql官网:https://downloads.mysql.com/
# 安装依赖包
[root@localhost ~]# dnf -y install ncurses-compat-libs openssl-devel openssl cmake mariadb-devel
# 创建mysql系统用户
[root@localhost ~]# useradd -r -M -s /sbin/nologin mysql
[root@localhost ~]# id mysql
uid=994(mysql) gid=991(mysql) groups=991(mysql)
# 下载二进制格式的mysql软件包
[root@localhost ~]# cd /opt/
[root@localhost opt]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
# 解压软件至/usr/local/
[root@localhost opt]# ls
apr-1.7.0 apr-util-1.6.1 httpd-2.4.53 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
[root@localhost opt]# tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@localhost ~]# ls /usr/local/
apache apr-util etc include lib64 mysql-5.7.37-linux-glibc2.12-x86_64 share
apr bin games lib libexec sbin src
# 重命名为 mysql
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
[root@localhost local]# ls
apache apr apr-util bin etc games include lib lib64 libexec mysql sbin share src
[root@localhost local]# ll mysql/ -d
drwxr-xr-x. 9 root root 129 Jul 4 19:09 mysql/
# 修改目录/usr/local/mysql的属主属组
[root@localhost local]# chown -R mysql.mysql mysql
[root@localhost local]# ll mysql/ -d
drwxr-xr-x. 9 mysql mysql 129 Jul 4 19:09 mysql/
# 添加环境变量
[root@localhost ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@localhost ~]# source /etc/profile.d/mysql.sh
[root@localhost ~]# which mysqld
/usr/local/mysql/bin/mysqld
# 配置include
## 软链接到/usr/include/mysql,叫mysql
[root@localhost ~]# ln -s /usr/local/mysql/include /usr/include/mysql
# 配置 man 文档
[root@localhost ~]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/mysql/man # 添加这条
# 映射库文件
[root@localhost ~]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[root@localhost ~]# ldconfig # 让其生效
# 建立数据存放目录
[root@localhost ~]# mkdir /opt/data
[root@localhost ~]# chown -R mysql.mysql /opt/data/
[root@localhost ~]# ll /opt/data/ -d
drwxr-xr-x. 2 mysql mysql 6 Jul 4 19:20 /opt/data/
- name: privode initialize.sh.j2
template:
src: files/initialize.sh.j2
dest: /opt/initialize.sh
mode: 0755
- name: exec initialize
shell: /opt/initialize.sh
register: print_mysql_info
- debug: var=print_mysql_info
# 初始化数据库
[root@localhost ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
......省略
root@localhost: V2hQugC(hAh9
# 请注意,这个命令的最后会生成一个临时密码,此处密码是V2hQugC(hAh9ik
# 再次注意,这个密码是随机的,你的不会跟我一样,一定要记住这个密码,因为一会登录时会用到
# 生成配置文件
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 配置服务启动脚本
[root@localhost ~]# cd /usr/local/mysql/support-files/
[root@localhost support-files]# ls
magic mysqld_multi.server mysql-log-rotate mysql.server
# 复制
[root@localhost support-files]# cp mysql.server mysqld
[root@localhost support-files]# ll mysqld -d
-rwxr-xr-x. 1 root root 10576 Jul 4 19:37 mysqld
# 设置所有者所属组为mysqld
[root@localhost support-files]# chown -R mysql.mysql mysqld
[root@localhost support-files]# ll mysqld -d
-rwxr-xr-x. 1 mysql mysql 10576 Jul 4 19:37 mysqld
[root@localhost support-files]# vim mysqld
basedir=/usr/local/mysql # 找到这两行添加/usr/local/mysql
datadir=/opt/data # 找到这两行添加/opt/data
# 启动mysql
[root@localhost ~]# /usr/local/mysql/support-files/mysqld start
Starting MySQL.Logging to '/opt/data/localhost.localdomain.err'.
SUCCESS!
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:80 *:*
[root@localhost ~]# ps -ef|grep mysql
root 50891 1 0 19:44 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/data --pid-file=/opt/data/mysql.pid
mysql 51091 50891 0 19:44 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/opt/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --pid-file=/opt/data/mysql.pid --socket=/tmp/mysql.sock --port=3306
root 51124 1694 0 19:45 pts/0 00:00:00 grep --color=auto mysql
# 修改密码
# 使用临时密码登录
[root@localhost ~]# mysql -uroot -p
Enter password: # 输入密码
......省略
# 设置新密码
mysql> set password = password('runtime123!');
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 退出登录验证密码
[root@localhost ~]# mysql -uroot -pruntime123!
....省略
mysql>
# 配置service 让它开机自启
[root@localhost ~]# cd /usr/lib/systemd/system
[root@localhost system]# cp sshd.service mysqld.service
[root@localhost system]# vim mysqld.service
[Unit]
Description=mysql server daemon
After=network.target sshd-keygen.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysqld start
ExecStop=/usr/local/mysql/support-files/mysqld stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
[root@localhost system]# systemctl daemon-reload
# 开机自启
[root@localhost ~]# systemctl enable --now mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
[root@localhost ~]# systemctl status mysqld
● mysqld.service - mysql server daemon
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendo>
Active: active (running) since Mon 2022-07-04 20:04:28 CST; 1s ago
Process: 51213 ExecStart=/usr/local/mysql/support-files/mysqld start (c>
Main PID: 51226 (mysqld_safe)
........省略PHP官网:https://www.php.net/
# 下载 PHP
[root@localhost opt]# wget https://www.php.net/distributions/php-7.4.29.tar.xz
........省略
[root@localhost opt]# ls
apr-1.7.0 apr-util-1.6.1 data httpd-2.4.53 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz php-7.4.29.tar.xz
# 解压
[root@localhost opt]# tar xf php-7.4.29.tar.xz -C /usr/local/
[root@localhost ~]# ls /usr/local/
apache apr apr-util bin etc games include lib lib64 libexec mysql php-7.4.29 sbin share src
# 这是查找MySQL跟PHP打交道的包名
[root@localhost ~]# dnf list all | grep mysql | grep php
php-mysqlnd.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 AppStream
# 安装依赖包
[root@localhost ~]# dnf -y install libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel pcre-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel sqlite-devel libzip-devel php-mysqlnd
安装过程略....
# 安装 oniguruma包
[root@localhost ~]# dnf -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
# 编译安装php
[root@localhost ~]# cd /usr/local/php-7.4.29/
[root@localhost php-7.4.29]# ./configure --prefix=/usr/local/php7 \
--enable-fpm \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-openssl \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--enable-exif \
--enable-ftp \
--enable-gd \
--with-jpeg \
--with-zlib-dir \
--with-freetype \
--with-gettext \
--enable-json \
--enable-mbstring \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-readline \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--with-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-pcntl \
--enable-posix
# make
[root@localhost php-7.4.29]# make
编译过程略
[root@localhost php-7.4.29]# make install
安装过程略
# 安装后配置
[root@localhost ~]# echo 'export PATH=/usr/local/php7/bin:$PATH' > /etc/profile.d/php7.sh
[root@localhost ~]# source /etc/profile.d/php7.sh
[root@localhost ~]# which php
/usr/local/php7/bin/php
# 配置头文件
[root@localhost ~]# ln -s /usr/local/php7/include /usr/include/php7
# 配置库文件
[root@localhost ~]# echo '/usr/local/php7/lib' > /etc/ld.so.conf.d/php7.conf
[root@localhost ~]# ldconfig
# 查看版本
[root@localhost ~]# php -v
PHP 7.4.29 (cli) (built: Jul 4 2022 21:07:32) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
# 配置php-fpm
[root@localhost php-7.4.29]# pwd
/usr/local/php-7.4.29
[root@localhost php-7.4.29]# \cp php.ini-production /etc/php.ini # 这个文件已存在所以要加上\表示覆盖
[root@localhost php-7.4.29]# cp sapi/fpm/php-fpm /etc/init.d/php-fpm
[root@localhost php-7.2.8]# chmod +x /etc/init.d/php-fpm # 如果有执行权限忽略这一条
[root@localhost ~]# cd /usr/local/php7/etc
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# cd php-fpm.d
[root@localhost php-fpm.d]# cp www.conf.default www.conf
# 编辑php-fpm的配置文件(/usr/local/php7/etc/php-fpm.conf):
# 配置fpm的相关选项为你所需要的值:
[root@localhost ~]# vim /usr/local/php7/etc/php-fpm.conf
.....
.....
pm.max_children = 50 ;最多同时提供50个进程提供50个并发服务
pm.start_servers = 5 ;启动时启动5个进程
pm.min_spare_servers = 2 ;最小空闲进程数
pm.max_spare_servers = 8 ;最大空闲进程数
[root@localhost ~]# tail /usr/local/php7/etc/php-fpm.conf
; file.
; Relative path can also be used. They will be prefixed by:
; - the global prefix if it's been set (-p argument)
; - /usr/local/php7 otherwise
include=/usr/local/php7/etc/php-fpm.d/*.conf
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
# 查看端口号是否监听在9000上
[root@localhost php-fpm.d]# pwd
/usr/local/php7/etc/php-fpm.d
[root@localhost php-fpm.d]# vim www.conf
listen = 127.0.0.1:9000 # 查看端口号是否监听在9000上
# 启动php-fpm
[root@localhost ~]# /etc/init.d/php-fpm
# 默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验证其是否已经监听在相应的套接字
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:80 *:*
[root@localhost ~]#
[root@localhost ~]# ps -ef | grep php
root 218073 1 0 21:44 ? 00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
nobody 218074 218073 0 21:44 ? 00:00:00 php-fpm: pool www
nobody 218075 218073 0 21:44 ? 00:00:00 php-fpm: pool www
nobody 218076 218073 0 21:44 ? 00:00:00 php-fpm: pool www
nobody 218077 218073 0 21:44 ? 00:00:00 php-fpm: pool www
nobody 218078 218073 0 21:44 ? 00:00:00 php-fpm: pool www
root 218081 1694 0 21:45 pts/0 00:00:00 grep --color=auto php
# 杀掉进程
[root@localhost ~]# pkill php-fpm
[root@localhost ~]# ps -ef | grep php
root 218085 1694 0 21:47 pts/0 00:00:00 grep --color=auto php
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:80 *:*
# 配置开机自启
在这个文件里面写启动
root@localhost ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Feb 11 23:37 /etc/rc.local -> rc.d/rc.local
# 没有执行权限,需要给执行权限
[root@localhost ~]# ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 474 Feb 11 23:37 /etc/rc.d/rc.local
# 给执行权限
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 474 Feb 11 23:37 /etc/rc.d/rc.local
[root@localhost ~]# vim /etc/rc.d/rc.local
[root@localhost ~]# head -2 /etc/rc.d/rc.local
#!/bin/bash
/etc/init.d/php-fpm # 添加这个为了能够开机自启,
## 不写service 文件的情况下就可以这样写,让其能够开机自启。
# 重启查看是否能够开机自启
[root@localhost ~]# reboot
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port
LISTEN 0 128 127.0.0.1:9000
LISTEN 0 128 0.0.0.0:22
LISTEN 0 80 *:3306
LISTEN 0 128 *:80
LISTEN 0 128 [::]:2在apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩展,因此,这两个模块都要加载,编辑httpd.conf文件,取消以下两行内容的注释:
# 启用httpd的相关模块
[root@localhost ~]# cd /usr/local/apache/conf/
[root@localhost conf]# vim httpd.conf #把下面两条代码的注释取消掉
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so在需要使用fcgi的虚拟主机中添加类似如下两行:
ProxyRequests Off # 关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
127.0.0.1 # 是本机所以可以写成127.0.0.1
如果是用三台虚拟机部署LAMP。一台部署APache、一台部署MySQL、一台部署PHP
这里的PHP的ip就需要写你本机ip地址
不懂就去看我另一篇文章,三台虚拟机部署LAMP架构例如:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/idfsoft.com/$1以上设置表示把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
注意:
这里写的/var/www/html/是yum源安装方式生成的网页存放目录,这里必须改成你编译安装指定的网页存放路径,禁止直接复制我这里的路径
这里的idfsoft.com是域名,你必须改成你所使用的域名,禁止直接复制此处的域名
这里的$1表示匹配所有以.php结尾的http请求
# 创建虚拟主机目录并生成php测试页面
[root@localhost ~]# cd /usr/local/apache/htdocs/
# 创建测试目录
[root@localhost htdocs]# mkdir test.com
[root@localhost htdocs]# vim test.com/index.php
<?php
phpinfo();
?>
[root@localhost ~]# chown -R apache.apache /usr/local/apache/htdocs/
[root@localhost ~]# ll /usr/local/apache/htdocs/ -d
drwxr-xr-x. 3 apache apache 40 Jul 4 22:11 /usr/local/apache/htdocs/
# 在配置文件的最后加入以下内容
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf
[root@localhost ~]# tail -11 /usr/local/apache/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/test.com"
ServerName test.example.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/test.com/$1
<Directory "/usr/local/apache/htdocs/test.com">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf
# 搜索AddType,添加以下内容
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php #添加此行
AddType application/x-httpd-php-source .phps #添加此行
# 搜索index.html,添加以下内容
<IfModule dir_module>
DirectoryIndex index.php index.html # 添加 index.php
</IfModule>
# 重启apache服务
[root@localhost ~]# systemctl stop php-fpm
[root@localhost ~]# systemctl start php-fpm
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:80 *:*1.修改/etc/hosts文件,添加域名与IP的映射

2.在浏览器上使用域名访问,若看到以下界面则表示lamp架构搭建成功,否则请检查你的操作
