一、准备情况:
虚拟机:
搭建环境: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
二、虚拟机安装:
选择文件-新建-下一步-一直下一步
安装系统:虚拟机安装完成以后,现在是安装系统。
三、安装系统
开启虚拟机后会出现以下界面,选择第二个进行测试并安装。
1、install Centos 7 安装Centos7
2、Test this media & install Centos7 测试安装文件并安装Centos7
3、Troubleshooting 修复故障
设置日期和时间-选择当前时间
软件选择里面选择带GUI的服务器,带桌面操作界面的服务器。
选择安装位置
选择网络-有上角选择打开看是否获取到IP地址
设置用户名密码-创建以后就会重启,最好是最后一步进行操作
重启安装完成就会进入桌面到此centos7系统安装完成
四、安装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.11.9.tar.gz
解压tar包
tar zxvf nginx-1.11.9.tar.gz
进入解压好的nginx-1.11.9文件夹
sudo ./configure --with-http_ssl_module 添加SSL支持模块,HTTPS必须的
make命令进行编译和安装
make && make install
完成Nginx的安装
但是因为不是直接通过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脚本文件中
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
在相应的目录下找到nginx.conf配置文件,这里是在默认目录下,开启Nginx支撑PHP的模块,下面是修改内容
保存完修改后的配置,重启一下nginx,让配置生效,我们就可以通过nginx来处理PHP请求了。
可以自己在nginx的网页根目录写一个php文件要验证Nginx是否已经可以处理PHP请求了,这里在/use/local/nginx/html(Nginx默认位置)中创建ayu.php文件,然后写上简单的数字。
重新启动nginx
创建一个 ayu.php文件,随意输入字符,然后通过相应的URL访问该php文件,如果Nginx不支持PHP请求,浏览器就会弹出下载ayu.php文件提示框,若Nginx支持PHP请求,就会相应相应的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发出,结果就显示在用户眼前了
到这里CentOS7配置Nginx+PHP+MySQL就完成了
参考资料:
https://blog.csdn.net/babyxue/article/details/80970526
https://www.jianshu.com/p/495a02eb2672
https://jingyan.baidu.com/article/b7001fe1d1d8380e7382dd72.html
https://www.cnblogs.com/followyou/p/9460058.html