Centos7+Nginx+php-fpm+mysql环境搭建

一、准备情况:

Centos7+Nginx+php-fpm+mysql环境搭建_第1张图片

虚拟机:

Centos7+Nginx+php-fpm+mysql环境搭建_第2张图片

搭建环境:linux+nginx+php-fpm+mysql

版本选择:我选择的是centos7-64位DVD版。

DVD版:常用版本,就是普通安装版。里面包含大量的常用软件,大部分情况下安装时无需再在线下载,体积为4G。
Everything版:包含了所有软件组件,我看了下那个链接里面是10G。
LiveCD版:是一个光盘CentOS系统,可通过光盘启动电脑.
Minimal版:精简版本,包含核心组件,体积才600多MB。
NetInstall版:顾名思义,网络安装版本,一般不用这个版本。

文件中包含了“x86_64”的就是64位版本,否则为32位。

下载镜像:https://blog.51cto.com/13178102/2115459

下载完成:4.4G

Centos7+Nginx+php-fpm+mysql环境搭建_第3张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第4张图片

二、虚拟机安装:

选择文件-新建-下一步-一直下一步

Centos7+Nginx+php-fpm+mysql环境搭建_第5张图片

 

Centos7+Nginx+php-fpm+mysql环境搭建_第6张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第7张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第8张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第9张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第10张图片

安装系统:虚拟机安装完成以后,现在是安装系统。

Centos7+Nginx+php-fpm+mysql环境搭建_第11张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第12张图片

 

三、安装系统

开启虚拟机后会出现以下界面,选择第二个进行测试并安装。

1、install Centos 7 安装Centos7

2、Test this media & install Centos7 测试安装文件并安装Centos7

3、Troubleshooting 修复故障

Centos7+Nginx+php-fpm+mysql环境搭建_第13张图片

设置日期和时间-选择当前时间

Centos7+Nginx+php-fpm+mysql环境搭建_第14张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第15张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第16张图片

软件选择里面选择带GUI的服务器,带桌面操作界面的服务器。

Centos7+Nginx+php-fpm+mysql环境搭建_第17张图片

选择安装位置

Centos7+Nginx+php-fpm+mysql环境搭建_第18张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第19张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第20张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第21张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第22张图片

选择网络-有上角选择打开看是否获取到IP地址

Centos7+Nginx+php-fpm+mysql环境搭建_第23张图片

设置用户名密码-创建以后就会重启,最好是最后一步进行操作

Centos7+Nginx+php-fpm+mysql环境搭建_第24张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第25张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第26张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第27张图片

重启安装完成就会进入桌面到此centos7系统安装完成

Centos7+Nginx+php-fpm+mysql环境搭建_第28张图片

四、安装Nginx

1、用户权限切换:

1.打开终端,提示符为“$”,表明该用户为普通用户,此时,直接输su,回车,输入root密码,回车,就可以切换到root用户下,此时的提示符变为“#”。

 注意,输入密码时终端是不显示的,而且每次切换为root用户都要经过这个过程。

2.切换回普通用户,只要输入 “su 用户名”就OK了

Centos7+Nginx+php-fpm+mysql环境搭建_第29张图片

为了保证正常安装Nginx和安装后Nginx的正常使用,在安装前,需要安装如下软件

2、安装GCC编译器

GCC可用于编译C/C++语言程序,我们下载的Nginx不是可以直接在Linux中可以运行的二进制程序,这里使用将源码编译成二进制程序进行使用,Nginx是完全由C编写的,所以需要安装GCC对源码进行编写。

通过下面两句命令来安装GCC编译器

yum install -y gcc

yum install -y gcc-c++

Centos7+Nginx+php-fpm+mysql环境搭建_第30张图片

3、PCRE库

PCRE是一个用C语言编写的正则表达式库。如果我们在配置文件nginx.conf中使用了正则表达式,就必须装上PCRE库,因为Nginx的HTTP模块需要靠PCRE库来解析正则表达式。

yum install -y pcre pcre-devel

Centos7+Nginx+php-fpm+mysql环境搭建_第31张图片

4、zlib库

zlib是提供数据压缩用的函式库,用于对HTTP包的内容做gzip格式的压缩,当我们在nginx.conf中配置了gzip on,并指定了某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,就必须在编译时将zlib库编译进Nginx

yum install -y zlib zlib-devel

Centos7+Nginx+php-fpm+mysql环境搭建_第32张图片

5、OpenSSL开发库

OpenSSL主要作用是让应用程序进行安全通信,避免窃听,同时确认另一端连接者的身份。

如果想让Nginx在SSL协议上传送HTTP,也就是所谓的HTTPS,就需要装上OpenSSL,此外,如果我们还想使用MD5、SHA1等散列函数,那也必须安装上这个开发库

yum install -y openssl openssl-devel

Centos7+Nginx+php-fpm+mysql环境搭建_第33张图片

上面的4个库只是Nginx实现Web服务器最基本功能所需要的库。

6、安装Nginx

简介:Nginx是轻量级高性能的web服务器、反向代理服务器及电子邮件代理服务器,Nginx代码完全用C语言从头写成。

Nginx与Apache区别:

Nginx轻量级高性能的web服务器、支持高并发

Apache重量级、不支持高并发

获得Nginx对应的tar包   wget http://nginx.org/download/nginx-1.11.9.tar.gz

Centos7+Nginx+php-fpm+mysql环境搭建_第34张图片

解压tar包

tar zxvf nginx-1.11.9.tar.gz

进入解压好的nginx-1.11.9文件夹

sudo ./configure --with-http_ssl_module   添加SSL支持模块,HTTPS必须的

Centos7+Nginx+php-fpm+mysql环境搭建_第35张图片

make命令进行编译和安装

make && make install

完成Nginx的安装

Centos7+Nginx+php-fpm+mysql环境搭建_第36张图片

但是因为不是直接通过yum命令安装的(yum源中没有Nginx),所以启动Nginx的命令比较麻烦,要进入到对应的文件夹中其中Nginx,这里Nginx安装了默认的路径中,如果你不知自己装在哪个路径中,可以看一下刚通过make install函数安装时命令行中的内容,在最后安装成功后,会显示Nginx安装的具体路径

cd /usr/local/nginx/sbin

./nginx启动nginx

其他命令:

./nginx -s reload重新载入配置

./nginx -s reopen重新启动Nginx

./nginx -s stop停止Nginx

 

Centos7+Nginx+php-fpm+mysql环境搭建_第37张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第38张图片

访问你的IP出现下面这个页面说明nginx配置成功

Centos7+Nginx+php-fpm+mysql环境搭建_第39张图片

Centos7+Nginx+php-fpm+mysql环境搭建_第40张图片

但是每次要进行到相应的路径来启动Nginx太麻烦了,这里可以在etc/init.d目录下创建一个启动脚本,通过这个脚本来启动Nginx,这样启动Nginx会方便很多

在etc/init.d目录下创建nginx脚本,然后将下面内容复制并保存到这个nginx脚本文件中

vim /etc/init.d/nginx

接着为这个脚本添加执行权限
chmod +x /etc/init.d/nginx

并将Nginx添加到系统自启动组中
chkconfig --add /etc/init.d/nginx

最后将开启自启动

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemin

#

# chkconfig:  - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#              proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /usr/local/nginx/conf/nginx.conf

# pidfile:    /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

configtest || return $?

stop

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

上面的配置完成以后,可以通过下面的命令来操作nginx了

service nginx reload 重新加载配置

service nginx start 启动nginx

 

7、安装MariaDB(MySQL)

mariaDB是MySQL的一个分支,MariaDB是同一MySQL版本的二进制替代品,这意味着对于大多数情况下,您可以卸载MySQL和安装MariaDB,所以以后看见要求安装MySQL作为环境要求的,其实可以安装mariaDB,一般不会出现错误。

 

通过下面命令来安装mariaDB

yum -y install mariadb*

通过下面命令来启动mariadb服务

systemctl start mariadb.service

systemctl enable mariadb.service

初次安装mariaDB和MySQL情况是一样的,root用户没有密码(MySQL与mariaDB命令配置几乎没有差别)

所以可以通过下面命令为root用户配置密码

mysqladmin -u root password "Toor1234"

 

8、安装PHP

PHP是超文本预处理器,是一种开源在服务器端执行的脚本语言。

yum是一个在centos中的shell前端软件包管理器,基于PRM包管理,能够从指定的服务器自动下周RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

通过yum安装php

为了让Nginx可以操作PHP请求,需要安装php-fpm ,yum -y install php-fpm  php与nginx连接软件

随后为了让MariaDB与PHP相连接,需要安装php-mysql,php-mysql还可以让MySQL与PHP相连接

yum -y install php-mysql    php与mysql连接软件

yum -y install php-mbstring 为了使PHP不出现中文乱码,再安装上php-mbstring  php的中文编码库

yum install php-xml ,php与xml连接软件,使得PHP可以解析XML

启动php-fpm,并设置php-fpm开机自启

service php-fpm start

chkconfig php-fpm on

Centos7+Nginx+php-fpm+mysql环境搭建_第41张图片

在相应的目录下找到nginx.conf配置文件,这里是在默认目录下,开启Nginx支撑PHP的模块,下面是修改内容

Centos7+Nginx+php-fpm+mysql环境搭建_第42张图片

 

Centos7+Nginx+php-fpm+mysql环境搭建_第43张图片

保存完修改后的配置,重启一下nginx,让配置生效,我们就可以通过nginx来处理PHP请求了。

可以自己在nginx的网页根目录写一个php文件要验证Nginx是否已经可以处理PHP请求了,这里在/use/local/nginx/html(Nginx默认位置)中创建ayu.php文件,然后写上简单的数字。

重新启动nginx 

Centos7+Nginx+php-fpm+mysql环境搭建_第44张图片

创建一个 ayu.php文件,随意输入字符,然后通过相应的URL访问该php文件,如果Nginx不支持PHP请求,浏览器就会弹出下载ayu.php文件提示框,若Nginx支持PHP请求,就会相应相应的PHP界面。

Centos7+Nginx+php-fpm+mysql环境搭建_第45张图片

五、php-fpm与Nginx的关系

从上面的配置中,我们知道了Nginx需要安装php-fpm后就可以响应PHP请求,但是其中Nginx与PHP是如何通过php-fpm进行协同工作的呢?

要弄明白上面的问题,首先就要知道CGI (Common Gateway Interface) 和 FastCGI 这两个协议

CGI是Web Server与后台语言交互的协议,通过这个协议,开发者可以使用任何语言来处理Web Server发来的请求,动态生成相应的内容,但是CGI对每个请求都需要生成出一个全新的进程来处理,处理完后又会将对应的进程关闭,随着Web的发展,高并发的情景越来常见,CGI这种方式已经不能满足这样的需求了,所以FastCGI就诞生了,看名字就知道,就是快速的CGI,它可以在一个进程内处理多个请求,而不会在请求处理完后结束进程,这样在性能上有很大的提高

而PHP-fpm是FastCGI协议PHP的实现,也就是说,任何实现了FastCGI协议的Web Server都可以与之通信(Nginx就实现了FastCGI),PHP-fpm对应标准的FastCGI还提供了一些增强功能

PHP-fpm是一个PHP进程管理器,它包含master进程(主进程)和worker进程(工作进程),其中master进程负责监听端口,默认配置是监听9000端口,接收来自Web Server的请求,而worker进程一般有多个,具体要多少个,可以对配置文件进行配置,默认是6个,每个worker进程中都内嵌了一个PHP解释器,是PHP代码真正执行的地方

php-fpm就是来管理启动一个master进行和多个worker进程的程序

php-fastcgi 只是一个cgi程序,只会解析php请求,并且返回结果,不会管理

php-cgi执行效率低下,因此被php-fastcgi取代。

 

可以通过下面命令查看系统中php-fpm的情况

ps -ef | grep fpm

Centos7+Nginx+php-fpm+mysql环境搭建_第46张图片

从Nginx角度来讲,Nginx处理可以进行HTTP请求的代理还可以进行其他许多协议请求的代理,其中就有与php-fpm相关的FastCGI协议,为了能够让Nginx理解FastCGI协议,Nginx通过FastCGI模块来将HTTP请求映射为对应的FastCGI请求

Nginx的FastCGI模块提供了fastcgi_param指令来处理相应的映射关系,可以看一下Nginx中FastCGI的配置文件,就发现该模块的主要工作就是将Nginx中的变量映射为PHP中能理解的变量

Centos7+Nginx+php-fpm+mysql环境搭建_第47张图片

到这里再仔细看一下nginx.conf这个配置文件

可以看出,Nginx新建了一个虚拟主机,监听80端口的请求,根目录为html(/usr/local/nging/html),默认主页为index.html或index.htm

接着就看到开启PHP支持的配置,可以看出将所有以.php结尾的请求都交给FastCGI模块处理,其监听端口为9000,而就像上面讲的,FastCGI模块将变量映射成PHP变量,将请求交给了PHP—fpm来处理,当用户对Nginx发起PHP请求时,Nginx首先从80端口接收到PHP请求,然后将该请求发送给9000端口,经FastCGI模块处理交给了在监听9000端口的PHP-fpm,PHP-fpm的master进程将PHP执行任务交个下面的worker进程,worker进程使用内嵌的php解释器来执行PHP并将获得的结果层层返回,最终通过Nginx发出,结果就显示在用户眼前了

到这里CentOS7配置Nginx+PHP+MySQL就完成了

Centos7+Nginx+php-fpm+mysql环境搭建_第48张图片

 

Centos7+Nginx+php-fpm+mysql环境搭建_第49张图片

 

参考资料:

https://blog.csdn.net/babyxue/article/details/80970526

https://www.jianshu.com/p/495a02eb2672

http://nginx.org/download/

https://jingyan.baidu.com/article/b7001fe1d1d8380e7382dd72.html

https://www.cnblogs.com/followyou/p/9460058.html

 

你可能感兴趣的:(环境搭建)