(1)LNMP平台是Linux、Nginx、MySQL、PHP组合的简称。
(2)在这个组合平台上,各成员主要发挥以下作用:
Nginx是一款使用C语言开发的高性能的http 服务器/ 反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev 所开发,官方测试nginx能够支支撑5万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。
(1)http服务器。Nginx是一个http 服务可以独立提供http服务。可以做网页静态服务器。
(2)虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
(3)反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
Nginx与Apache相比,具有如下优点:
注意,在安装好Linux操作系统后,需要先让CentOS7虚拟机上网,即需要桥接到真实网络中,并配好IP、子网掩码和指定网关和子网掩码等。具体操作可参考《第13节 CentOS系统中采用Apache发布网站以及访问控制配置详解》中的1.2节。
参考本专栏 《第1节 CentOS7虚拟机安装》内容。
以root管理员身份登录系统并打开终端,若以其他用户登录的系统,则并使用命令sudo-i
切换至root用户。在centos中安装Nginx,需要首先安装相应的依赖环境。
(1)安装依赖环境:gcc-c++。nginx编译依赖gcc环境,gcc环境的安装步骤如下:
rpm -qa | grep gcc
或yum list installed | grep gcc
查询系统是否已安装过过gcc环境。如下图所示,可看到系统已安装过gcc环境,可不用再安装。若没有安装,则可使用命令yum install gcc-c++
进行安装。
(2)安装开发环境软件包pcre-devel。pcre:(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用 pcre来解析正则表达式。安装步骤如下:
rpm -qa | grep pcre-devel
和yum list installed | grep pcre-devel
查询系统是否已安装过pcre-devel开发环境。检查到系统中没有安装pcre-devel开发环境。注意,凡是后缀为devel的均为开发包。yum install -y pcre-devel
采用yum的方式安装pcre-devel开发环境。pcre-config --version
查看pcre版本,为8.32。(3)安装zlib-devel开发环境。该库提供了很多种压缩和解压缩的方式,nginx使用zlib对 http包的内容进行gzip。安装步骤如下:
rpm -qa | grep zlib-devel
和yum list installed | grep zlib-devel
查询系统是否已安装过zlib-devel开发环境。检查到系统中没有安装zlib-devel开发环境。yum install -y zlib-devel
采用yum的方式安装zlib-devel开发环境。
(4)安装openssl开发环境。openssl是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http 协议,还支持https(即在ssl协议上传输 http).。
1)查询系统是否已安装过openssl开发环境。输入命令rpm -qa | grep openssl-devel
和yum list installed | grep openssl-devel
查询系统是否已安装过openssl。检查到系统中没有安装openssl。
2)安装openssl开发环境。输入命令yum install -y openssl-devel
采用yum的方式安装openssl。
(1)以root管理员身份登录系统并打开终端,若以其他用户登录的系统,则并使用命令sudo-i
切换至root用户。
(2)查询系统是否已安装过Nginx。因为在Linux系统中,不同方式安装的软件其查询命令不一致,建议使用以下命名查询系统中是否已安装过Nginx。
rpm -qa | grep nginx
yum list installed | grep nginx
(1)输入yum install nginx
用这个命令来安装nginx。发现没有nginx可用的安装包。
(2)打开网站http://nginx.org/packages/根据自己系统类型和版本,查找到适合自己的安装包。本系统为CentOS7.2009x86_64版本,因此在对应目录下找到最新的安装包为:http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm。
(3)在终端输入命令wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm
下载最新版Nginx。该rpm软件包下载在当前目录中。
(4)使用命令rpm -ivh nginx-1.20.2-1.el7.ngx.x86_64.rpm
进行安装。由于软件就在当前目录下,因此使用的是相对路径。
(5)使用命令man nginx
可以查看nginx命令的帮助手册。
(6)使用命令nginx -v
查询软件版本号,能成功查询到版本号,说明软件安装完成。
(7)输入命令rpm -qpl nginx-1.20.2-1.el7.ngx.x86_64.rpm
可查询nginx的启动命令。
(8)启动nginx服务。输入命令nginx
启动nginx服务。
(9)查看nginx服务是否启动成功。使用命令:ss -antpl | grep 80
,查询80端口号是否开启成功。可以看到,80端口成功开启。
(10)查看nginx服务是否启动成功。打开浏览器并输入IP(此centos系统的IP为192.168.1.5)尝试访问,弹出以下窗口说明服务正常工作。
(11)若想要停止使用命令nginx -s stop
,查询nginx 命令的具体使用可以使用命令man nginx
。
输入命令rpm -qpl nginx-1.20.2-1.el7.ngx.x86_64.rpm
可查看软件安装后的安装路径及相关文件路径。从中可以得到我们比较关心的信息:
(1) nginx服务器默认主页的存放路径为/usr/share/nginx/html
,默认主页名称为index.html。
(2)主配置文件目录为/etc/nginx/nginx.conf
。在主配置文件中包含了三大部分,使用命令vim /etc/nginx/nginx.conf
可查看。
user nginx; #运行用户
worker_processes auto; #工作进程数(根据cpu核心设定)
error_log /var/log/nginx/error.log notice; #错误日志的文件位置
pid /var/run/nginx.pid; #pid文件位置
events {
worker_connections 1024; #每个进程处理1024连接
}
/etc/nginx/conf.d/
下,其中默认的server配置文件名为default.conf。 http {
include /etc/nginx/mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; #支持文件发送(下载)
#tcp_nopush on;
keepalive_timeout 65; #连接保持超时时间,单位是秒
#gzip on;
include /etc/nginx/conf.d/*.conf; #子配置文件目录
}
(3)子配置文件为/etc/nginx/conf.d/*.conf,其中定义了对server的规定,包含以下信息如端口号和默认网站目录等,使用命令vim /etc/nginx/conf.d/default.conf
查看。
server {
listen 80; #监听端口号
server_name localhost; #网站名称
#access_log /var/log/nginx/host.access.log main;
location / { #定义安装目录为软件根目录
root /usr/share/nginx/html; #网页存放目录
index index.html index.htm; #默认引索页
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #内部错误反抗页面
location = /50x.html { #错误页面配置
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
相关安装与操作见《第14节 CentOS7系统手动搭建LAMP平台》2.3节。
尝试过采用yum方式安装php,但是Nginx无法支持PHP解析,可能是有些功能需要自己指定。因此此处按照视频采用源码包安装。
首先需要安装php依赖的开发环境
yum -y install libxml2
yum -y install libxml2-devel
yum -y install curl
yum -y install curl-devel
yum -y install libjpeg
yum -y install libjpeg-devel
yum -y install libpng
yum -y install libpng-devel
yum -y install freetype
yum -y install freetype-devel
yum -y install libxslt
yum -y install libxslt-devel
yum -y install bzip2
yum -y install bzip2-devel
yum -y install sqlite-devel
(1)下载安装包。当使用命令wget https://www.php.net/distributions/php-8.1.3.tar.gz
联网下载安装包时速度特别慢,而且时不时下载中断。利用虚拟机CentOS7自带的浏览器下载php-8.1.3.tar.gz安装包,然后再将该安装包复制到虚拟机CentOS7的root家目录下。
(2)打开终端,解包:tar -zxf php-8.1.3.tar.gz
(3)进入php-8.1.3软件包目录。输入命令cd php-8.1.3
进入软件包目录,可以看到目录下文件如图所示。
(4)使用该命令进行配置:./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip
需要注意一个地方就是php.ini配置文件的位置可以在编译前配置参数中设置,编译参数可以写成:–with-config-file-path=/usr/local/php 这样的话php就回去指定的目录下读取php.ini配置文件,如果不加这个参数默认位置就是php安装目录下的lib目录,具体也可以在phpinfo()输出界面查看,如果php.ini放到其他位置,php读取不到,那么所有的配置修改后都是不生效的。
(5)配置过程出现:No package ‘oniguruma’ found 的错误提示。
(6)在网站http://rpms.remirepo.net/enterprise/7上根据自己的系统找到对应的版本,此处使用以下命令安装相应支持库。
yum -y install http://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-6.9.7.1-1.el7.remi.x86_64.rpm
yum -y install http://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-devel.x86_64 0:6.9.7.1-1.el7.remi
(6)重新使用该命令进行配置:./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip
.不断解决缺少支持库的问题后,终于迎来配置安装。
(7)执行编译并安装,使用命令:make && make install
。接下来是漫长的等待……直至完成
(8)安装完成后可以进入到安装目录,查看目录中有哪些文件;还可以进入命令字目录,查看php的命令字。
(9)安装完成后还可以输入命令./php -v
查看php版本。注意,该命令需要在进入到/usr/local/php/bin目录下才能使用。
(1)优化命令路径。
采用源码包安装后,当运行php命令时,提示未找到命令或文件。那是由于php的命令并没有链接到系统默认的命令存放路径中。
只有当进入php安装目录里的bin路径里,才能使用php命令。
为了方便以后对php操作,可以对命令路径进行优化,将安装目录下的bin和sbin目录映射到系统默认目录上,分别输入命令如下:
ln -s /usr/local/php/bin/* /usr/bin/
ln -s /usr/local/php/sbin/* /usr/sbin/
(2)修改主配置文件php.ini。
cp php.ini-development /usr/local/php/php.ini
2)修改配置文件配置php.ini。使用:vim /usr/local/php/php.ini
打开php配置文件,并修改配置项如下:
①开启短文本标记功能。将该文本内的短文本标记功能开启。其中,vim编辑器的具体使用可参考《第7节 Linux系统vim编辑器简单应用》。
②修改cgi.fix_pathinfo配置项。找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击,所以此项应该去掉注释并设置为0。保存并退出。
(3)修改php-fpm的配置文件。
1)进入php-fpm的配置文件的目录。输入命令cd /usr/local/php/etc/
进入,可以看到php-fpm的配置文件php-fpm.conf.default。
2)将php-fpm.conf.default改名为php-fpm.conf,或者拷贝一份并命名为php-fpm.conf。输入命令mv php-fpm.conf.default php-fpm.conf
。
3)查看配置文件php-fpm.conf。使用:vim /usr/local/php/etc/php-fpm.conf
打开php-fpm配置文件,可以看到该主配置文件中包含子配置文件,子配置文件的路径为 /usr/local/php/etc/php-fpm.d/*.conf。
4)修改子配置文件名称。输入命令cd /usr/local/php/etc/php-fpm.d
进入子配置文件的目录,查看子配置文件。可以看到此子配置文件与上一步中的主配置文件名称不一致。可以将子配置文件重命名为www.conf,或修改主配置文件,使其一致。此处将子配置文件重命名为www.conf,输入命令mv www.conf.default www.conf
.
(4)启动php-fpm进程并验证。输入命令:php-fpm
启动php-fpm进程(php-fpm进程的端口号为9000),启动后输入命令ss -antpl | grep 9000
查看是否开启了端口,为Nginx提供PHP语言解析服务。
至此,php-fpm配置完成并能正常启动。
Nginx配置文件中默认情况下php配置块是被注释的,要让Nginx支持php,还要在Nginx配置文件中告诉Nginx说php解析去找谁。
(1)使用vim编辑器打开Nginx主页配置文件:vim /etc/nginx/conf.d/default.conf
,此时去掉php模块的注释并按如下修改内容,并保存退出。(此修改有问题,仅为了记录视频中的这种修改有问题)
(2)结束php-fpm进程以及关闭nginx。可以使用命令来杀死进程:killall php-fpm;使用命令nginx -s stop
关闭nginx,在关闭nginx时出现如下警告。
(3)重新使用命令vim /etc/nginx/conf.d/default.conf
打开Nginx主页配置文件并修改,将php模块的内容全部去掉注释,并做如下修改。主要修改的就是将fastcgi_param中的/scripts改为$document_root。
(4)重新结束php-fpm进程以及关闭nginx。可以使用命令来杀死进程:killall php-fpm;使用命令nginx -s stop
关闭nginx,在关闭nginx时出现以下错误,那是由于nginx还未启动。
(5)启动php-fpm进程以及启动nginx。输入命令php-fpm启动php-fpm进程;再使用命令nginx开启,并使用ss -antpl | grep 80确定其已开启。
(1)新建一个index.php文件。输入命令vim /usr/share/nginx/html/index.php
在默认网站目录下新建一个index.php文件。
(2)编辑index.php网页。切换到输入模式下,按下图输入命令,注意有分号,保存并退出。
(3)验证Nginx是否支持php解析。在浏览器中输入192.168.1.5/index.php
测试Nginx能否成功解析PHP,(此CentOS的静态IP地址为192.168.1.5),出现files not found的错误提示。
(4)在文章《Nginx访问PHP文件的File not found错误处理,两种情况》中总结了两种错误的可能原因,其一是路径解析出错、其二是文件权限出错。与本文2.5小节的步骤(3)一样,打开nginx配置文件,将root下的路径改为网页默认存放路径的绝对路径(本文为/usr/share/nginx/html)。
(5)重新测试。在浏览器中输入192.168.1.5/index.php
测试Nginx能否成功解析PHP,(此CentOS的静态IP地址为192.168.1.5)。可以看到正常解析,说明配置成功。
(1)了解LNMP平台上各个组成承担的功能;
(2)理解LNMP平台上各个组成之间如何通过配置文件联系起来;
(3)掌握手动配置LNMP平台的方法。
[1]《Linux下安装php环境并且配置Nginx支持php-fpm模块》好文章重点看。
[2]《Nginx访问PHP文件的File not found错误处理,两种情况》
[3] 《CentOS系统手动部署LNMP平台》
[4] 《Linux CentOS 7或8,本地安装Nginx,无需yum》
[5] 视频传输门