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

一、准备情况:

Win10+16g内存(推荐8g以上)

VMware workstation15 Pro

Centos8 dvd版镜像:

由于官方下载过于慢,下面方便大家使用

百度云:https://pan.baidu.com/s/1xTJxyjnzwdLEPvfGiAcKJw 提取码:7xzz

磁力链接:http://mirrors.163.com/centos/8.0.1905/isos/x86_64/CentOS-8-x86_64-1905-dvd1.iso

下载完成:6.65G

二、虚拟机安装:

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

创建完虚拟机后安装系统

三、系统安装:

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

1、install Centos 78安装Centos8

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

3、Troubleshooting 修复故障

配置网络,选择时区,软件选择里面选择带GUI的服务器,

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

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

四、安装Nginx

1、用户权限切换:

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

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

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

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

2、安装GCC编译器

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

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

yum install -y gcc

yum install -y gcc-c++

3、PCRE库

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

yum install -y pcre pcre-devel

4、zlib库

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

yum install -y zlib zlib-devel

5、OpenSSL开发库

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

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

yum install -y openssl openssl-devel

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

6、安装Nginx

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

Nginx与Apache区别:

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

Apache重量级、不支持高并发

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

解压tar包

tar zxvf nginx-1.12.2.tar.gz

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

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

make命令进行编译和安装

发现make工具忘记装了,装上

yum install make

make && make install

发现报错,这里提示我们struct crypt_data’没有名为‘current_salt’的成员:cd.current_salt[0] = ~salt[0];

最好的办法是换一个版本,因为条件限制,我们就进到源码里把这行直接注释掉好了。

gedit src/os/unix/ngx_user.c

保存,退出

再次make & make install

仍有报错

解决方法:打开  gedit objs/Makefile  把 -Werror删掉   (-Werror,它要求GCC将所有的警告当成错误进行处理)

解决,重新编译安装

但是因为不是直接通过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

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

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

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

gedit /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 "Qiang1234"

8、安装PHP

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

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

通过yum安装php

yum install php

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

yum -y install php-fpm

随后为了让MariaDB与PHP相连接,需要安装php-mysqlnd,mysqlnd是一种效率更高的php和mysql的连接方式。

yum -y install php-mysqlnd    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

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

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

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

重新启动nginx 

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

重启nginx后访问后发现无法访问

查看nginx的error日志发现

[error] 53643#0: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.122.1, server: localhost, request: "GET /one.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.122.1"

是无法连接到php-fpm,打开php-fpm的配置文件www.conf,发现与nginx.conf里面的端口不匹配,一种是unix socket,一种是tcp端口,改成统一

gedit /etc/php-fpm.d/www.conf

改成

保存退出重新加载php-fmp

访问one.php

搞定

五、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

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

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

到这里再仔细看一下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发出,结果就显示在用户眼前了

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

参考资料:

http://nginx.org/download/

https://www.cnblogs.com/lixiuran/p/3590696.html

https://blog.csdn.net/qq_34981272/article/details/96738396

https://www.cnblogs.com/qichao123/p/11951373.html

https://blog.csdn.net/weixin_39805802/article/details/105802107

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值