lamp架构

目录

1. lamp简介

2. web服务器工作流程

2.1 cgi与fastcgi

2.2 httpd与php结合的方式

2.3 web工作流程

3. lamp平台构建

3.1 安装httpd

3.2 安装mysql

3.3 安装php


1. lamp简介

有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。

所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台。

2. web服务器工作流程

在说lamp架构平台的搭建前,我们先来了解下什么是CGI,什么是FastCGI,什么是......

web服务器的资源分为两种,静态资源和动态资源

  • 静态资源就是指静态内容,客户端从服务器获得的资源的表现形式与原文件相同。可以简单的理解为就是直接存储于文件系统中的资源
  • 动态资源则通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端

那么web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求

如上图所示

阶段①显示的是httpd服务器(即apache)和php服务器通过FastCGI协议进行通信,且php作为独立的服务进程运行

阶段②显示的是php程序和mysql数据库间通过mysql协议进行通信。php与mysql本没有什么联系,但是由Php语言写成的程序可以与mysql进行数据交互。同理perl和python写的程序也可以与mysql数据库进行交互

2.1 cgi与fastcgi

上图阶段①中提到了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上下文切换而导致耗时

2.2 httpd与php结合的方式

httpd与php结合的方式有以下三种:

  • modules:php将以httpd的扩展模块形式存在,需要加载动态资源时,httpd可以直接通过php模块来加工资源并返回给客户端
    • httpd prefork:libphp5.so(多进程模型的php)
    • httpd event or worker:libphp5-zts.so(线程模型的php)
  • CGI:httpd需要加载动态资源时,通过CGI与php解释器联系,获得php执行的结果,此时httpd负责与php连接的建立和断开等
  • FastCGI:利用php-fpm机制,启动为服务进程,php自行运行为一个服务,https通过socket与php通信

较于CGI方式,FastCGI更为常用,很少有人使用CGI方式来加载动态资源

2.3 web工作流程

通过上面的图说明一下web的工作流程:

  • 客户端通过http协议请求web服务器资源
  • web服务器收到请求后判断客户端请求的资源是静态资源或是动态资源
    • 若是静态资源则直接从本地文件系统取之返回给客户端。
    • 否则若为动态资源则通过FastCGI协议与php服务器联系,通过CGI程序的master进程调度worker进程来执行程序以获得客户端请求的动态资源,并将执行的结果通过FastCGI协议返回给httpd服务器,httpd服务器收到php的执行结果后将其封装为http响应报文响应给客户端。在执行程序获取动态资源时若需要获得数据库中的资源时,由Php服务器通过mysql协议与MySQL/MariaDB服务器交互,取之而后返回给httpd,httpd将从php服务器收到的执行结果封装成http响应报文响应给客户端。

3. lamp平台构建

环境说明:

系统平台IP需要安装的服务
centos8
 
192.168.182.128httpd-2.4
mysql-5.7
php
php-mysql

lamp平台软件安装次序:(请严格按照)

    httpd --> mysql --> php

注意:php要求httpd使用prefork MPM

3.1 安装httpd

//YUM源配置
[root@Gin yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

[root@Gin yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

[root@Gin yum.repos.d]# yum makecache 

[root@Gin ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

[root@Gin ~]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*

[root@Gin ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

[root@Gin yum.repos.d]# yum makecache

//安装开发工具包
[root@Gin ~]# yum groups mark install 'Development Tools'

//创建apache服务的用户和组
[root@Gin ~]# useradd -r -M -s /sbin/nologin apache

//安装依赖包
[root@localhost ~]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++

//下载和安装httpd和apr以及apr-util
[root@Gin ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
[root@Gin ~]# ls
anaconda-ks.cfg  apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz

//编译按照apr和apr-utill
[root@Gin ~]# tar xf apr-1.7.0.tar.gz 
[root@Gin ~]# tar xf apr-util-1.6.1.tar.gz 
[root@Gin ~]# ls
anaconda-ks.cfg  apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz
apr-1.7.0        apr-util-1.6.1    httpd-2.4.54.tar.gz
[root@Gin ~]# cd apr-1.7.0/
[root@Gin apr-1.7.0]# vim configure

    cfgfile=${ofile}T
    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
#    $RM "$cfgfile"            //删除或者注释这一行

[root@Gin apr-1.7.0]# ./configure --prefix=/usr/local/apr
配置过程略...
[root@Gin apr-1.7.0]# make
[root@Gin apr-1.7.0]# make install 
编译安装过程略...



[root@Gin ~]# cd apr-util-1.6.1/
[root@Gin apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
配置过程略...
[root@Gin apr-util-1.6.1]# make && make install
编译安装过程略...

//编译安装httpd
[root@Gin ~]# tar xf httpd-2.4.54.tar.gz 
[root@Gin ~]# cd httpd-2.4.54/
[root@Gin httpd-2.4.54]# ./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
配置过程略...

[root@Gin httpd-2.4.54]# make && make install
编译安装过程略...

//安装后配置
[root@Gin ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[root@Gin ~]# source /etc/profile.d/httpd.sh
[root@Gin ~]# which httpd
/usr/local/apache/bin/httpd

[root@Gin ~]# ln -s /usr/local/apache/include/ /usr/include/httpd
[root@Gin ~]# ls /usr/local/apache/
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  man  manual  modules
[root@Gin ~]# vim /etc/man_db.conf 
#MANDATORY_MANPATH 			/usr/src/pvm3/man
#
MANDATORY_MANPATH			/usr/man
MANDATORY_MANPATH			/usr/share/man
MANDATORY_MANPATH			/usr/local/share/man
MANDATORY_MANPATH           /usr/local/apache/man        //添加这一行



//配置启动apache
[root@Gin ~]# cd /usr/lib/systemd/system
[root@Gin system]# cp sshd.service httpd.service
[root@Gin system]# vim httpd.service 
[root@Gin system]# cat httpd.service 
[Unit]
Description=web server daemon
Documentation=man:httpd(5) 
After=network.target sshd-keygen.target

[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/local/apache/bin/apachectl stop

[Install]
WantedBy=multi-user.target
[root@Gin ~]# systemctl daemon-reload

//开启apache
[root@Gin ~]# apachectl start
[root@Gin ~]# ss -anlt
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                      *:80                    *:*                
LISTEN   0         128                   [::]:22                 [::]:*         

3.2 安装mysql

 
//下载二进制格式的mysql软件包
[root@localhost ~]# cd /usr/src
[root@localhost src]# ls
debug  kernels
[root@localhost src]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
[root@localhost src]# ls
debug  kernels  mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
[root@localhost src]# 
 
//创建用户和组
[root@localhost src]# useradd -M -s /sbin/nologin mysql
[root@localhost src]# id mysql
uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)
[root@localhost src]# 
 
//解压软件之/usr/local/
[root@localhost src]# tar xf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@localhost src]# ls /usr/local/
bin  etc  games  include  lib  lib64  libexec  
mysql-5.7.38-linux-glibc2.12-x86_64  sbin  share  src 
[root@localhost src]# cd /usr/local/
 
#生成的链接文件
[root@localhost local]# ln -sv mysql-5.7.38-linux-glibc2.12-x86_64/ mysql
'mysql' -> 'mysql-5.7.38-linux-glibc2.12-x86_64/'
[root@localhost local]# ll
total 0
drwxr-xr-x. 2 root root   6 May 19  2020 bin
drwxr-xr-x. 2 root root   6 May 19  2020 etc
drwxr-xr-x. 2 root root   6 May 19  2020 games
drwxr-xr-x. 2 root root   6 May 19  2020 include
drwxr-xr-x. 2 root root   6 May 19  2020 lib
drwxr-xr-x. 3 root root  17 Jul 19 10:06 lib64
drwxr-xr-x. 2 root root   6 May 19  2020 libexec
lrwxrwxrwx. 1 root root  36 Jul 27 18:05 mysql -> mysql-5.7.38-linux-glibc2.12-x86_64/
drwxr-xr-x. 9 root root 129 Jul 27 18:04 mysql-5.7.38-linux-glibc2.12-x86_64
drwxr-xr-x. 2 root root   6 May 19  2020 sbin
drwxr-xr-x. 5 root root  49 Jul 19 10:06 share
drwxr-xr-x. 2 root root   6 May 19  2020 src
[root@localhost local]# 
 
//修改目录/usr/local/mysql的属主属组
[root@localhost local]# chown -R mysql.mysql mysql*
[root@localhost local]# ll
total 0
drwxr-xr-x. 2 root  root    6 May 19  2020 bin
drwxr-xr-x. 2 root  root    6 May 19  2020 etc
drwxr-xr-x. 2 root  root    6 May 19  2020 games
drwxr-xr-x. 2 root  root    6 May 19  2020 include
drwxr-xr-x. 2 root  root    6 May 19  2020 lib
drwxr-xr-x. 3 root  root   17 Jul 19 10:06 lib64
drwxr-xr-x. 2 root  root    6 May 19  2020 libexec
lrwxrwxrwx. 1 mysql mysql  36 Jul 27 18:05 mysql -> mysql-5.7.38-linux-glibc2.12-x86_64/
drwxr-xr-x. 9 mysql mysql 129 Jul 27 18:04 mysql-5.7.38-linux-glibc2.12-x86_64
drwxr-xr-x. 2 root  root    6 May 19  2020 sbin
drwxr-xr-x. 5 root  root   49 Jul 19 10:06 share
drwxr-xr-x. 2 root  root    6 May 19  2020 src
[root@localhost local]# 
 
 
//添加环境变量
[root@localhost local]# ls mysql
bin  docs  include  lib  LICENSE  man  README  share  support-files
[root@localhost local]# cd bin
[root@localhost bin]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@localhost bin]# . /etc/profile.d/mysql.sh
[root@localhost bin]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost bin]# which mysql
/usr/local/mysql/bin/mysql    #环境变量配置完成
 
#创建头文件
[root@localhost bin]# cd ..
[root@localhost mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql
'/usr/include/mysql' -> '/usr/local/mysql/include/'
[root@localhost mysql]# vim /etc/ld.so.conf.d/mysql.conf
[root@localhost mysql]# cat /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib/
[root@localhost mysql]# ldconfig  #重新加载配置文件
[root@localhost mysql]# vim /etc/man_db.conf 
MANDATORY_MANPATH                       /usr/local/mysql/man #在此把share改为mysql
 
//建立数据存放目录
[root@localhost mysql]# mkdir /opt/data
[root@localhost mysql]# chown -R mysql.mysql /opt/data/
[root@localhost mysql]# ll /opt/
total 0
drwxr-xr-x. 2 mysql mysql 6 Jul 27 18:29 data
[root@localhost mysql]# 
 
//初始化数据库
[root@localhost ~]# mysqld --initialize --user mysql --datadir /opt/data/
2022-07-27T10:33:13.882952Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2022-07-27T10:33:14.405868Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-07-27T10:33:14.507268Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-07-27T10:33:14.520866Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 85410af7-0d97-11ed-8ee7-000c29aeb0ec.
2022-07-27T10:33:14.521683Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-07-27T10:33:14.615877Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-07-27T10:33:14.615901Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-07-27T10:33:14.616371Z 0 [Warning] CA certificate ca.pem is self signed.
2022-07-27T10:33:14.664503Z 1 [Note] A temporary password is generated for root@localhost: oaqsaysr?1hH
[root@localhost ~]# 
//请注意,这个命令的最后会生成一个临时密码,此处密码是 #iQAr?746Ln3q
//注意,这个密码是随机的每次密码生成的不一样
 
//生成配置文件
[root@localhost data]# vim /etc/my.cnf
[root@localhost data]# 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 ~]# 
 
 
//配置服务启动脚本
[root@localhost ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# vim /etc/init.d/mysqld 
······
# overwritten by settings in the MySQL configuration files.
 
basedir=/usr/local/mysql
datadir=/opt/data
 
# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
 
//启动mysql
[root@localhost ~]# service mysqld start 
Starting MySQL.Logging to '/opt/data/localhost.localdomain.err'.
. SUCCESS! 
[root@localhost ~]# ps -ef |grep mysql
root        1968       1  0 18:43 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/data --pid-file=/opt/data/mysql.pid
mysql       2168    1968  2 18:43 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        2200    1587  0 18:44 pts/0    00:00:00 grep --color=auto mysql
[root@localhost ~]# ss -anlt
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                80                                     *:3306                                *:*                              
LISTEN          0                128                                 [::]:22                               [::]:*                              
[root@localhost ~]# 
 
//修改密码
//使用临时密码登录
[root@localhost ~]# mysql -uroot -poaqsaysr?1hH
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
[root@localhost ~]# yum whatprovides libncurses.so.5
Last metadata expiration check: 8 days, 8:21:14 ago on Tue 19 Jul 2022 10:26:50 AM CST.
ncurses-compat-libs-6.1-9.20180224.el8.i686 : Ncurses compatibility libraries
Repo        : base
Matched from:
Provide    : libncurses.so.5
 
//下载依赖环境
[root@localhost ~]# dnf install -y ncurses-compat-libs
 
[root@localhost ~]# mysql -uroot -poaqsaysr?1hH
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.38
 
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> 
 
//设置新密码
mysql> set password = password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)

3.3 安装php

//下载php
[root@Gin ~]# wget https://www.php.net/distributions/php-7.4.30.tar.xz
下载过程略....

//安装依赖包
[root@Gin ~]# yum -y install libxml2 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 php-mysqlnd

//安装依赖包
[root@Gin ~]# yum -y install libsqlite3x-devel
[root@Gin ~]# 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
[root@Gin ~]# yum -y install libzip-devel
安装过程略....
 
//编译安装php
[root@Gin ~]# tar xf php-7.4.30.tar.xz 
[root@Gin ~]# cd php-7.4.30/
[root@Gin php-7.4.30]# ./configure --prefix=/usr/local/php7  \
--with-config-file-path=/etc \
--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

[root@Gin php-7.4.30]# make
编译过程略....
[root@Gin php-7.4.30]# make install
安装过程略....


//安装后配置
[root@Gin php-7.4.30]# echo 'export PATH=/usr/local/php7/bin:$PATH' > /etc/profile.d/php7.sh
[root@Gin php-7.4.30]# source /etc/profile.d/php7.sh
[root@Gin php-7.4.30]# which php
/usr/local/php7/bin/php
[root@Gin php-7.4.30]# php -v
PHP 7.4.30 (cli) (built: Aug  2 2022 22:21:41) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies


//配置php-fpm
[root@Gin php-7.4.30]# cp php.ini-production /etc/php.ini
cp: overwrite '/etc/php.ini'? yes
[root@Gin php-7.4.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@Gin php-7.4.30]# chmod +x /etc/rc.d/init.d/php-fpm
[root@Gin php-7.4.30]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@Gin php-7.4.30]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

//启动php-fpm
[root@Gin ~]# service php-fpm start
Starting php-fpm  done

//默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验证其是否已经监听在相应的套接字
[root@Gin ~]# 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                      *:80                    *:*                
LISTEN    0         128                   [::]:22                 [::]:*                
LISTEN    0         80                       *:3306                  *:*  

[root@Gin ~]#  ps -ef|grep php
root      205305       1  0 22:24 ?        00:00:00 php-fpm: master process (/usr/localphp7/etc/php-fpm.conf)
nobody    205306  205305  0 22:24 ?        00:00:00 php-fpm: pool www
nobody    205307  205305  0 22:24 ?        00:00:00 php-fpm: pool www
root      205344   70581  0 22:26 pts/0    00:00:00 grep --color=auto php

[root@Gin ~]# chkconfig --add php-fpm
[root@Gin ~]# chkconfig --add mysqld
[root@Gin ~]# chkconfig --list 

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
php-fpm        	0:off	1:off	2:on	3:on	4:on	5:on	6:off

3.4 配置apache

3.4.1 启用代理模块

在apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩展,因此,这两个模块都要加载,编辑httpd.conf文件,取消以下两行内容的注释:

  • LoadModule proxy_module modules/mod_proxy.so
  • LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
//启用httpd的相关模块
[root@Gin ~]# sed -i '/proxy_module/s/#//g' /usr/local/apache/conf/httpd.conf
[root@Gin ~]# sed -i '/proxy_fcgi_module/s/#//g' /usr/local/apache/conf/httpd.conf 

3.4.2 配置虚拟主机

在需要使用fcgi的虚拟主机中添加类似如下两行:

ProxyRequests Off       //关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

例如:

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/Gin/$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@Gin ~]# cd /usr/local/apache/conf/
[root@Gin conf]# vim httpd.conf 
[root@Gin conf]# sed -i '/proxy_module/s/#//g' /etc/httpd24/httpd.conf
sed: can't read /etc/httpd24/httpd.conf: No such file or directory
[root@Gin conf]# cd
[root@Gin ~]# sed -i '/proxy_fcgi_module/s/#//g' /etc/httpd24/httpd.conf
sed: can't read /etc/httpd24/httpd.conf: No such file or directory
[root@Gin ~]# mkdir /usr/local/apache/htdocs/Gin
[root@Gin ~]# cat > /usr/local/apache/htdocs/Gin/index.php <<EOF
> <?php
>     phpinfo();
> ?>
> EOF
[root@Gin ~]# chown -R apache.apache /usr/local/apache/htdocs/
[root@Gin ~]#  ll /usr/local/apache/htdocs/ -d
drwxr-xr-x. 3 apache apache 35 Aug  4 09:47 /usr/local/apache/htdocs/

/在配置文件的最后加入以下内容
[root@Gin ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/Gin"
    ServerName www.Gin.com
    ProxyRequests Off    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/Gin/$1
    <Directory "/usr/local/apache/htdocs/Gin">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

//搜索AddType,添加以下内容
[root@Gin ~]# vim /usr/local/apache/conf/httpd.conf 

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php        #添加此行
    AddType application/x-httpd-php-source .phps        #添加此行
    
[root@Gin conf]# sed -i '/    DirectoryIndex/s/index.html/index.php index.html/g' /usr/local/apache/conf/httpd.conf


//重启apache服务
[root@Gin ~]# apachectl stop
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a73f:cc51:13b2:bc43%ens33. Set the 'ServerName' directive globally to suppress this message
[root@Gin ~]# apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a73f:cc51:13b2:bc43%ens33. Set the 'ServerName' directive globally to suppress this message
[root@Gin ~]# ss -anlt
State    Recv-Q    Send-Q       Local Address:Port       Peer Address:Port   Process   
LISTEN   0         128              127.0.0.1:9000            0.0.0.0:*                
LISTEN   0         128                0.0.0.0:22              0.0.0.0:*                
LISTEN   0         80                       *:3306                  *:*                
LISTEN   0         128                      *:80                    *:*                
LISTEN   0         128                   [::]:22                 [::]:*      

 4.安装phpmyadmin

 //下载phpmyadmin包
[root@Gin ~]# wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
//把该解压在网站的根目录
[root@Gin ~]# mv phpMyAdmin-5.2.0-all-languages.zip /usr/local/apache/htdocs/yf/
[root@Gin ~]# cd /usr/local/apache/htdocs/yf/
[root@Gin Gin]# unzip phpMyAdmin-5.2.0-all-languages.zip

//把目录的名字改为phpmyadmin
[root@Gin Gin]# mv phpMyAdmin-5.2.0-all-languages phpmyadmin
[root@Gin Gin]# cd phpmyadmin/

//复制样本配置文件到config.inc.php文件
[root@Gin phpmyadmin]# cp config.sample.inc.php config.inc.html
[root@Gin phpmyadmin]# apachectl stop
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a73f:cc51:13b2:bc43%ens33. Set the 'ServerName' directive globally to suppress this message
[root@Gin phpmyadmin]# apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a73f:cc51:13b2:bc43%ens33. Set the 'ServerName' directive globally to suppress this message

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值