工欲善其事,必先利其器,磨刀不误砍柴功,先把服务器LNMP环境搭建好,再建立web网站,没有一个好的PHP环境,后面麻烦会更多。之前讲过手动安装部署php环境,今天说一下在谷歌云安装Centos8系统后,使用 dnf 命令安装PHP+Mysql+Nginx配置环境的方法。

配置谷歌云服务器

Centos8系统安装在Google的免费云服务器上,本文测试的机器类型是e2-medium(2 个 vCPU,4 GB 内存)。

Google Cloud谷歌云申请以及虚拟机配置方法请浏览:免费申请谷歌云
建立好VM服务器后,连接上SSH,下面开始操作。安装好Centos8系统后的第一件事情就是修改系统的root密码。

谷歌云修改服务器root密码

使用谷歌云平台上自带的网页SSH连接服务器,登陆后修改SSH连接方式。

修改服务器root密码

使用 sudo -i 或者 sudo su 命令切换到超级管理root用户,切换到root超级管理员模式后输入 passwd 命令修改密码。

sudo -i
passwd

输入你要修改的密码,然后二次确认密码,密码确认完毕后回车设置完成。使用 cd\ 命令切换到root目录下。
使用 VI 命令修改SSH的配置文件。

vi /etc/ssh/sshd_config
谷歌云安装PHP+Mysql+Nginx

如果你想修改SSH远程连接的端口,将 Port 前面的#号去掉,然后再后面修改你想修改的端口号。
在sshd_config中修改下面的内容:

  • PermitRootLogin 默认值为no,需要改为yes后才可以使用SSH远程访问。
  • PasswordAuthentication 默认值为no,改为yes开启密码登陆。
  • ClientAliveInterval 默认值420,修改为3600,这个是客户端连接超时的时间。
Port 10086
PermitRootLogin yes
PasswordAuthentication yes
ClientAliveInterval 3600

修改完毕后,使用:wq命令退出VI编辑,之后重新启动sshd服务!

service sshd restart

以上是使用谷歌云服务器修改服务器密码的方法。

安装软件源epel和remi

接下来需要进一步安装centos8系统所需要的软件,下面开始更新系统,以及安装系统软件包所需要的源。epel 和 remi 是centos8不可缺少的软件仓库。

使用RPM方式安装源:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-8.rpm

使用DNF方式安装源:

DNF是下一代的yum软件包管理器(Yum的派生)。dnf和yum的语法类似,有很多相似之处,默认情况下,DNF已安装在RHEL 8和CentOS 8系统上。

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf install yum-utils
dnf update

查看一下系统上启用的数据源,使用 dnf repolist all 命令可以查看全部的数据源,包括未启用的数据源。

dnf repolist all
安装centos8软件源epel和remi

使用 dnf repolist 命令,可以查看当前正在使用的软件源。

dnf repolist

使用 dnf repolist disabled 命令查看系统禁用的数据源。

dnf repolist disabled

软件源安装过后,需要设置优化一下安装的软件包源。安装 dnf-utils 和使用 makecache 命令生成源缓存。

dnf -y install dnf-utils
dnf makecache

安装启用DNF的自动更新:

dnf install dnf-automatic
systemctl start dnf-automatic.timer

安装“开发工具”软件包组:

dnf group install 'Development Tools' -y

使用DNF更新系统软件包:

dnf -y update

配置centos8的虚拟内存

Google云默认安装操作系统是没有分配swap空间的,需要手动添加。如果操作系统没有配置swapfile(分配swap空间)会导致内存负载后出错。下面教你如何添加centos8操作系统的swap空间!
使用 free -m 命令查看内存配置,如果Swap后面都是0的话则需要添加swap空间。

free -m

使用六步创建Swap虚拟内存:

  1. 创建一个预分配指定大小空间的文件;
  2. 以用ls命令检查文件大小;
  3. 更改swap文件的权限;
  4. 格式化swap文件;
  5. 启用swap交换文件;
  6. 修改fstab文件来实现重启后自动生效swap。
sudo dd if=/dev/zero of=/swapfile bs=1024 count=8388608
ls -lh /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo vi /etc/fstab

使用 VI 命令在 fstab 文件末尾加入下面内容:

/swapfile swap swap sw 0 0

如果你不想使用 VI 命令,也可以直接使用 echo 命令设置swap开机启动。

echo '/swapfile swap swap sw 0 0' | sudo tee -a /etc/fstab

修改服务器时区

sudo timedatectl set-timezone Asia/Shanghai

将服务器时区修改为Asia/Shanghai,之后可以使用 timedatectl 命令查询时区。

新增用户和用户组

在配置Centos8之前,需要新增用户组和用户,用于web服务访问相关的权限使用。

groupadd www
useradd -g www www

用户和用户组配置完毕后,Centos8的基本环境已经配置的差不多了,下面开始安装web相关服务。

Centos8配置完毕后,+PHP8+Mysql,安装的顺序一定不要搞错,先安装Nginx,之后再安装PHP8和Mysql。Nginx安装完毕后,无需配置,安装好PHP8后再配置Nginx。

安装nginx相对简单的多,安装后查看一下版本,是1.14.1,使用DNF的软件包相对来说都是比较稳定的包。有时候版本会略低一点,对于centos官方源来说,这个很正常。

在安装Nginx之前,先安装Nginx所需的依赖包。

dnf -y install zlib zlib-devel pcre pcre-devel openssl openssl-devel gd-devel make gcc gcc-c++
  • gcc linux编译器
  • pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式
  • zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip
  • openssl是web安全通信的基石,也就是https相关的依赖

安装nginx:
Nginx所需的依赖包安装好之后,输入下面命令,安装nginx。

dnf install nginx
nginx -v

安装后设置开机启动:

systemctl enable nginx

启动Nginx,启动之后查看以下Nginx的当前状态:

systemctl start nginx
systemctl status nginx

查看当前80端口状态:

netstat -na | grep 80

检查及设置nginx默认端口是否开启:

firewall-cmd --query-port=80/tcp

如果返回值是no,则80端口未开放,需要设置防火墙,放行80端口

开启80端口:

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

在浏览器输入服务器的IP地址,查看一下是否能访问nginx的欢迎页面。

谷歌云安装PHP+Mysql+Nginx

Nginx的安装已经成功了,接下来查看一下安装目录。手动安装Nginx目录一般都是/usr/local/nginx,但使用yum/dnf安装的目录跟手动安装的不太一样,下面是使用yum/dnf安装nginx的一些对应目录:

  • Nginx主配置文件:/etc/nginx/nginx.conf
  • Nginx执行文件目录:/usr/sbin/nginx
  • Nginx首页html网页路劲:/usr/share/nginx/html
  • 代理目录:/var/cache/nginx/proxy_temp
  • Nginx的缓存目录:/var/cache/nginx/fastcgi_temp
  • scgi目录:/var/cache/nginx/scgi_temp
  • uwsgi目录:/var/cache/nginx/uwsgi_temp
  • Nginx的日志目录:/var/log/nginx
谷歌云安装PHP+Mysql+Nginx

安装完毕后使用 nginx -t 命令测试安装是否正确。正确会返回下面的内容。

CentOS8的默认软件仓库中内置的nginx版本是1.14.1,最近漏扫提示需要升级至1.17.7以上版本。如果你想安装更高的nginx版本,请查看:Centos8如何安装最新版本的Nginx

安装PHP8

如果使用 dnf -y install php 命令默认安装php的话,默认安装的版本很低,目前PHP版本是PHP8.1,下面看一下如何安装PHP8.1

首先查询一下系统中,安装PHP8.1的软件源:

dnf list php

谷歌云安装PHP+Mysql+Nginx

Centos8默认仓库里的php版本是7.2.24,这个版本太低了,下一步切换到remi源,查找php8.1版本。

获取可用的PHP列表:

dnf module list php

谷歌云安装PHP+Mysql+Nginx

下一步需要启用,remi仓库的PHP模块,先重置一下PHP模块。

重置PHP数据源模块:

dnf module reset php

谷歌云安装PHP+Mysql+Nginx

接下来,设置启用新的PHP数据源模块,我们需要安装php8.1,就启用remi-8.1。

dnf module enable php:remi-8.1

谷歌云安装PHP+Mysql+Nginx

remi-8.1模块已经启用完毕了,下面进行安装php8.1

输入安装命令进行安装:

dnf install php

谷歌云安装PHP+Mysql+Nginx

php安装成功后,额外安装一些常用的php扩展软件包:

dnf install -y php-{mysqlnd,xml,xmlrpc,curl,gd,imagick,mbstring,opcache,soap,zip}

使用 dnf search 命令查询一下PHP8.1都有哪些扩展软件包:

dnf search php81*

查询之后,我们发现php81相关的软件包太多了,这些都是干什么用的?哪些应该装哪些不应该装呢?下面是php8.1扩展安装包的详细介绍。

php81.x86_64 :安装 PHP 8.1 的包
php81-build.x86_64 :包运送基本构建配置
php81-libzip.x86_64 :用于读取、创建和修改 zip 存档的 C 库
php81-php.x86_64 : 用于创建动态网站的 PHP 脚本语言
php81-php-ast.x86_64 :抽象语法树
php81-php-bcmath.x86_64 :用于使用 bcmath 库的 PHP 应用程序模块
php81-php-brotli.x86_64:PHP 的 Brotli 扩展
php81-php-cli.x86_64 : PHP 的命令行界面
php81-php-common.x86_64 : PHP 常用文件
php81-php-dba.x86_64 : PHP 应用程序的数据库抽象层模块
php81-php-dbg.x86_64 :交互式 PHP 调试器
php81-php-devel.x86_64 : 构建 PHP 扩展所需的文件
php81-php-embedded.x86_64 :用于嵌入应用程序的 PHP 库
php81-php-enchant.x86_64 :PHP 应用程序的附魔拼写扩展
php81-php-ffi.x86_64 : 外部函数接口
php81-php-fpm.x86_64 : PHP FastCGI 进程管理器
php81-php-gd.x86_64 : 用于使用 gd 图形库的 PHP 应用程序模块
php81-php-geos.x86_64 : GEOS 的 PHP 模块
php81-php-gmp.x86_64 :用于使用 GNU MP 库的 PHP 应用程序模块
php81-php-horde-horde-lz4.x86_64:Horde LZ4 压缩扩展
php81-php-imap.x86_64 :用于使用 IMAP 的 PHP 应用程序的模块
php81-php-intl.x86_64 : PHP 应用程序的国际化扩展
php81-php-ldap.x86_64 :用于使用 LDAP 的 PHP 应用程序的模块
php81-php-libvirt.x86_64 : Libvirt 的 PHP 语言绑定
php81-php-libvirt-doc.noarch : php-libvirt 文档
php81-php-litespeed.x86_64 : LiteSpeed Web 服务器 PHP 支持
php81-php-lz4.x86_64 : PHP 的 LZ4 扩展
php81-php-maxminddb.x86_64 : MaxMind DB Reader 扩展
php81-php-mbstring.x86_64 :需要多字节字符串处理的 PHP 应用程序模块
php81-php-mysqlnd.x86_64 :使用 MySQL 数据库的 PHP 应用程序模块
php81-php-oci8.x86_64 :用于使用 OCI8 数据库的 PHP 应用程序的模块
php81-php-odbc.x86_64 :用于使用 ODBC 数据库的 PHP 应用程序的模块
php81-php-opcache.x86_64:Zend OPcache
php81-php-pdo.x86_64 :PHP 应用程序的数据库访问抽象模块
php81-php-pdo-dblib.x86_64:Microsoft SQL Server 和 Sybase 数据库的 PDO 驱动程序
php81-php-pdo-firebird.x86_64:Interbase/Firebird 数据库的 PDO 驱动程序
php81-php-pear.noarch :PHP 扩展和应用程序存储库框架
php81-php-pecl-ahocorasick.x86_64 : 有效的 Aho-Corasick 字符串模式匹配算法
php81-php-pecl-amqp.x86_64 :与任何 AMQP 兼容的服务器通信
php81-php-pecl-apcu.x86_64 : APC 用户缓存
php81-php-pecl-apcu-devel.x86_64 :APCu 开发者文件(头文件)
php81-php-pecl-apfd.x86_64:始终填充表单数据
php81-php-pecl-awscrt.x86_64:AWS 通用运行时 PHP 绑定
php81-php-pecl-base58.x86_64 : 使用 base58 编码和解码数据
php81-php-pecl-bitset.x86_64 : BITSET 库
php81-php-pecl-couchbase3.x86_64:Couchbase 服务器 PHP 扩展
php81-php-pecl-crypto.x86_64:OpenSSL 加密库的包装器
php81-php-pecl-csv.x86_64 : CSV PHP 扩展
php81-php-pecl-datadog-trace.x86_64:PHP 的 APM 和分布式跟踪
php81-php-pecl-dbase.x86_64 : dBase 数据库文件访问函数
php81-php-pecl-decimal.x86_64 : 任意精度浮点十进制
php81-php-pecl-dio.x86_64 : 直接 I/O 函数
php81-php-pecl-ds.x86_64:PHP 数据结构
php81-php-pecl-eio.x86_64 : 提供 libeio 库的接口
php81-php-pecl-env.x86_64 : 加载环境变量
php81-php-pecl-ev.x86_64 : 提供 libev 库的接口
php81-php-pecl-event.x86_64 : 提供 libevent 库的接口
php81-php-pecl-eximer.x86_64:中断定时器和低开销采样分析器
php81-php-pecl-fann.x86_64:FANN 库的包装器
php81-php-pecl-gearman.x86_64 : 到 libgearman 的 PHP 包装器
php81-php-pecl-geoip.x86_64 : 将 IP 地址映射到地理位置的扩展
php81-php-pecl-geospatial.x86_64 :处理常见地理空间功能的 PHP 扩展
php81-php-pecl-gmagick.x86_64 :为 GraphicsMagick 库提供包装器
php81-php-pecl-gnupg.x86_64 : gpgme 库的包装器
php81-php-pecl-grpc.x86_64:通用RPC框架
php81-php-pecl-hdr-histogram.x86_64:C hdrhistogram API 的 PHP 扩展包装器
php81-php-pecl-http.x86_64 :扩展的 HTTP 支持
php81-php-pecl-http-devel.x86_64 :扩展的 HTTP 支持开发者文件(头文件)
php81-php-pecl-http-message.x86_64 : PSR-7 HTTP 消息实现
php81-php-pecl-igbinary.x86_64 :替换标准 PHP 序列化程序
php81-php-pecl-igbinary-devel.x86_64 : Igbinary 开发者文件(头文件)
php81-php-pecl-imagick.x86_64 : 使用 ImageMagick 创建和修改图像的扩展
php81-php-pecl-imagick-devel.x86_64:imagick 扩展开发者文件(头文件)
php81-php-pecl-imagick-im6.x86_64 : 使用 ImageMagick 6 创建和修改图像的扩展
php81-php-pecl-imagick-im6-devel.x86_64:imagick 扩展开发者文件(头文件)
php81-php-pecl-imagick-im7.x86_64 : 使用 ImageMagick 7 创建和修改图像的扩展
php81-php-pecl-imagick-im7-devel.x86_64:imagick 扩展开发者文件(头文件)
php81-php-pecl-inotify.x86_64 : Inotify
php81-php-pecl-ip2location.x86_64 : 获取IP地址的地理位置信息
php81-php-pecl-ip2proxy.x86_64 : 获取IP地址的代理信息
php81-php-pecl-json-post.x86_64 : JSON POST 处理程序
php81-php-pecl-jsonpath.x86_64 :使用 JSONPath 表示法提取数据
php81-php-pecl-krb5.x86_64:Kerberos 身份验证扩展
php81-php-pecl-krb5-devel.x86_64:Kerberos 扩展开发者文件(头文件)
php81-php-pecl-leveldb.x86_64 : LevelDB PHP 绑定
php81-php-pecl-luasandbox.x86_64 :具有限制和安全环境的 Lua 解释器
php81-php-pecl-lzf.x86_64 : 处理 LZF 解压的扩展
php81-php-pecl-mailparse.x86_64 :用于解析和处理电子邮件的 PHP PECL 包
php81-php-pecl-mcrypt.x86_64 : libmcrypt 库的绑定
php81-php-pecl-memcache.x86_64 : 与 Memcached 缓存守护进程一起使用的扩展
php81-php-pecl-memcached.x86_64 : 与 Memcached 缓存守护进程一起使用的扩展
php81-php-pecl-memprof.x86_64:内存使用分析器
php81-php-pecl-mongodb.x86_64:用于 PHP 的 MongoDB 驱动程序
php81-php-pecl-msgpack.x86_64 :用于与 MessagePack 序列化通信的 API
php81-php-pecl-msgpack-devel.x86_64 :MessagePack 开发者文件(头文件)
php81-php-pecl-mustache.x86_64:Mustache 模板语言
php81-php-pecl-mysql.x86_64 : MySQL 数据库访问函数
php81-php-pecl-nsq.x86_64 : NSQ 客户端的 PHP 扩展
php81-php-pecl-oauth.x86_64 : PHP OAuth 消费者扩展
php81-php-pecl-opencensus.x86_64:一个统计信息收集和分布式跟踪框架
php81-php-pecl-openswoole.x86_64 : PHP 的异步并发分布式网络框架
php81-php-pecl-pam.x86_64:PAM 集成
php81-php-pecl-parle.x86_64:解析和词法分析
php81-php-pecl-pcov.x86_64:代码覆盖驱动
php81-php-pecl-pcsc.x86_64 : 使用 winscard PC/SC API 的 PHP 扩展
php81-php-pecl-pkcs11.x86_64:PKCS11 模块的 PHP 绑定
php81-php-pecl-pq.x86_64 : PostgreSQL 客户端库 (libpq) 绑定
php81-php-pecl-protobuf.x86_64 : 序列化结构化数据的机制
php81-php-pecl-ps.x86_64 : 创建 PostScript 文件的扩展
php81-php-pecl-psr.x86_64 : PSR 接口
php81-php-pecl-raphf.x86_64:资源和持久句柄工厂
php81-php-pecl-rar.x86_64 : 用于读取 RAR 档案的 PHP 扩展
php81-php-pecl-rdkafka5.x86_64 : 基于 librdkafka 的 Kafka 客户端
php81-php-pecl-redis5.x86_64 :用于与 Redis 键值存储通信的扩展
php81-php-pecl-rpminfo.x86_64 : RPM 信息
php81-php-pecl-rrd.x86_64 : rrdtool 的 PHP 绑定
php81-php-pecl-runkit7.x86_64 :对于所有这些你......无论如何都不应该做的事情......但肯定会做!
php81-php-pecl-scrypt.x86_64 : Scrypt 散列函数
php81-php-pecl-sdl.x86_64:PHP 的简单 DirectMedia 层
php81-php-pecl-seaslog.x86_64 :一个有效、快速、稳定的 PHP 日志扩展
php81-php-pecl-seassnowflake.x86_64:分布式唯一ID生成器的PHP扩展
php81-php-pecl-selinux.x86_64 : PHP 脚本语言的 SELinux 绑定
php81-php-pecl-simple-kafka-client.x86_64 : 基于 librdkafka 的 Kafka 客户端
php81-php-pecl-ssdeep.x86_64:libfuzzy 库的包装器
php81-php-pecl-ssh2.x86_64 : libssh2 库的绑定
php81-php-pecl-stats.x86_64:统计计算的例程
php81-php-pecl-stomp.x86_64 : Stomp 客户端扩展
php81-php-pecl-swoole4.x86_64 : PHP 的异步并发分布式网络框架
php81-php-pecl-sync.x86_64 : 命名和未命名的同步对象
php81-php-pecl-teds.x86_64:暂定的额外数据结构
php81-php-pecl-trader.x86_64:交易者​​技术分析
php81-php-pecl-translit.x86_64 :将非拉丁字符集音译为拉丁字符
php81-php-pecl-uopz.x86_64 : Zend 的用户操作
php81-php-pecl-uploadprogress.x86_64 :跟踪文件上传进度的扩展
php81-php-pecl-uuid.x86_64:PHP 的通用唯一标识符扩展
php81-php-pecl-var-representation.x86_64 : var_representation 扩展
php81-php-pecl-varnish.x86_64:清漆缓存绑定
php81-php-pecl-vips.x86_64 :用于与 libvips 交互的 PHP 扩展
php81-php-pecl-vld.x86_64 : 转储 PHP 脚本的内部表示
php81-php-pecl-wddx.x86_64:网络分布式数据交换
php81-php-pecl-xattr.x86_64 : 扩展属性
php81-php-pecl-xdebug3.x86_64 :提供函数跟踪和分析的函数
php81-php-pecl-xdiff.x86_64 :文件差异/补丁
php81-php-pecl-xhprof.x86_64 : XHProf 的 PHP 扩展,一个层次分析器
php81-php-pecl-xlswriter.x86_64 :高效快速的 xlsx 文件扩展名
php81-php-pecl-xmldiff.x86_64 : XML 差异和合并
php81-php-pecl-xmlrpc.x86_64 : 编写 XML-RPC 服务器和客户端的函数
php81-php-pecl-xxtea.x86_64 : PHP 的 XXTEA 加密算法扩展
php81-php-pecl-yac.x86_64:无锁用户数据缓存
php81-php-pecl-yaconf.x86_64:又一个配置容器
php81-php-pecl-yaf.x86_64:又一个框架
php81-php-pecl-yaml.x86_64 : yaml 的 PHP 绑定
php81-php-pecl-zip.x86_64 : ZIP 档案管理扩展
php81-php-pecl-zmq.x86_64:ZeroMQ 消息传递
php81-php-pgsql.x86_64 : PHP 的 PostgreSQL 数据库模块
php81-php-phpiredis.x86_64 : Redis 的客户端扩展
php81-php-process.x86_64 : 使用系统进程接口的 PHP 脚本模块
php81-php-pspell.x86_64 : 用于使用 pspell 接口的 PHP 应用程序模块
php81-php-realpath-turbo.x86_64 :尽管 open_basedir 限制使用 realpath 缓存
php81-php-smbclient.x86_64 :libsmbclient 的 PHP 包装器
php81-php-snmp.x86_64 :查询 SNMP 管理设备的 PHP 应用程序模块
php81-php-soap.x86_64 :使用 SOAP 协议的 PHP 应用程序模块
php81-php-sodium.x86_64 : 钠密码库的包装器
php81-php-sqlsrv.x86_64 :用于 SQL Server 的 Microsoft PHP 驱动程序
php81-php-tidy.x86_64 : 标准 PHP 模块提供 tidy 库支持
php81-php-xml.x86_64 :使用 XML 的 PHP 应用程序模块
php81-php-xz.x86_64 : XZ (LZMA2) 压缩/解压
php81-php-zephir-parser.x86_64 : Zephir 代码解析器
php81-php-zstd.x86_64 : Zstandard 扩展
php81-runtime.x86_64 :处理 php81 软件集合的包。
php81-scldevel.x86_64 : php81 的打包开发文件
php81-unit-php.x86_64 :NGINX 单元的 PHP 模块
php81-xhprof.noarch:PHP 的分层分析器 - Web 界面

PHP8.1已经好了,接下来查看一下都安装了哪些扩展软件包。

rpm -qa|grep php

谷歌云安装PHP+Mysql+Nginx

也可以使用 php --modules 命令来查询已经安装的PHP扩展。

php --modules

如果还需要安装PHP扩展,只需要使用 dnf -y install 命令加上你需要安装的扩展名称。

例如安装PHP的mysqlnd扩展:

dnf install -y php-mysqlnd

谷歌云安装PHP+Mysql+Nginx

以上都安装完毕后,接下来,设置php的开机启动。

systemctl enable php-fpm

使用 systemctl 命令来管理方便快捷。如果有新的PHP软件包更新,可以使用下面命令,升级最新的可用版本
dnf upgrade

好了,到这里PHP8.1的安装就正式完成了,启动PHP服务,让PHP开始工作。

systemctl enable php-fpm --now

谷歌云安装PHP+Mysql+Nginx

服务器启动完毕后,看一下PHP8.1的运行状态。

systemctl status php-fpm

状态灯是绿色的,就表示PHP已经正常工作了,下面有一些PHP的配置文件需要修改。

PHP8配置

修改php.ini文件

php.ini文件,是php的核心配置文件,谨慎修改!

查找php.ini文件位置

谷歌云安装PHP+Mysql+Nginx

php -info | grep php.ini

编辑 php.ini 文件

使用 VI 命令编辑 php.ini 文件,或者使用SFTP登陆服务器,使用记事本编辑修改 php.ini 文件。SFTP客户端推荐使用Xftp。

vi /etc/php.ini

将文件内的变量修改成下面的数值。

#打印PHP错误:
display_errors = on
#将内存使用增加到256M:
memory_limit = 256M
#文件上传大小,默认值太小,建议修改1G大小,也就是1024M:
upload_max_filesize = 1024M
#表单最大值,建议48M:
post_max_size = 48M
#每个脚本的最大执行时间,以秒为单位:
max_execution_time=600
#可以接受多少个 GET/POST/COOKIE 输入变量:
max_input_vars = 3000
#每个脚本花在解析请求数据上的最长时间:
max_input_time = 1000


修改完毕后,保存退出,接下来修改php的www.conf文件。

修改www.conf文件

www.conf是php-fpm的进程服务的配置文件。

修改用户组和用户名称

设置 www.conf 文件的用户组权限。将 www.conf 的访问权限设置 -R,用户与用户组设置成 nginx

chown nginx:nginx -R /etc/php-fpm.d/www.conf

编辑 www.conf 文件,修改用户与用户组变量。

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

将www.conf文件内的变量 usergroup 都修改成 nginx

修改完毕后,查看 listen 变量:

注意:变量 listen,默认的是 listen = /run/php-fpm/www.sock 如果你想在Nginx中使用 127.0.0.1:9000 访问PHP的话,那么需要将 listen 变量改成 listen = 127.0.0.1:9000 否则在Nginx中使用 127.0.0.1:9000 无法访问PHP。

修改请求超时时间数值

修改单个请求的超时时间,去掉前面的分号,将数值改成600。
request_terminate_timeout = 600

修改完毕后,:wq 保存文件退出,www.conf 文件修改完毕。到这里php已经安装配置完毕了,重新启动php服务,或者 reboot 重新启动服务器。

systemctl reload php-fpm

注意:如果Nginx不支持PHP访问,检查一下listen的变量是否与Nginx设置一致,如果使用127.0.0.1:9000 方式访问,查看防火墙中9000端口是否打开。

netstat -lntp

PHP操作台命令

启动PHP:

systemctl start php-fpm

停止:

systemctl stop php-fpm

重启:

systemctl restart php-fpm

重启使修改的配置生效:

systemctl reload php-fpm

设置开机启动:

systemctl enable php-fpm

PHP当前状态:

systemctl status php-fpm

卸载PHP

如果想卸载使用dnf安装的php服务,可以执行卸载命令:

注意:如果你是手工编译安装的php,remove 卸载命令无效,先卸载php主程序,然后再移除系统自带的php-common。

dnf remove php
dnf remove -y php-common

禁用SELinux

在CentOS 8上永久禁用SELinux

vi /etc/selinux/config

将SELinux属性设置为Disabled后重新启动服务器。

配置Nginx

下面以nginx1.20.1版本为例:

编辑nginx.conf

如果想让web网站正常访问,需要编辑修改 Nginx 的配置文件 nginx.conf,nginx.conf 是 Nginx 的核心配置文件。使用 VI 命令编辑 /etc/nginx/nginx.conf。

vi /etc/nginx/nginx.conf

下面是一个简单的nginx.conf文件的实例,仅供参考:

#配置用户或者组
user nginx;

#允许生成的进程数,默认为1
worker_processes auto;

#制定错误日志路径,级别。这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg,级别越高,记录越少,一般设置error
error_log /var/log/nginx/error.log error;

#指定nginx进程运行文件存放地址
pid /var/run/nginx.pid;

#加载动态模块。
include /usr/share/nginx/modules/*.conf;

#工作模式及连接数上限-events全局设置
events {

#单个work进程允许的最大连接数,默认为512
worker_connections 2048;
}

#http服务器配置文件块
http {
#文件扩展名与文件类型映射表。设定mime类型(邮件支持类型),类型由mime.types文件定义。
include /etc/nginx/mime.types;

#默认文件类型,默认为text/plain
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"';

#设置访问日志路径和格式。combined为日志格式的默认值。
access_log /var/log/nginx/access.log main;

#允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile on;

#tcp_nopush on;
#连接超时时间,默认为75s,可以在http,server,location块。
keepalive_timeout 65;

#gzip压缩开关,on开启Gzip压缩,默认 off 关闭
gzip on;
#启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 10k;
#gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 6;
#设置压缩所需要的缓冲区大小
gzip_buffers 32 4k;
# 设置gzip压缩针对的HTTP协议版本,没做负载的可以不用
gzip_http_version 1.1;
#进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
#是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
#禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";

#从 /etc/nginx/conf.d 目录加载模块化配置文件。
include /etc/nginx/conf.d/*.conf;

}

上面是nginx.conf的基本配置,Server网站配置在 /etc/nginx/conf.d/ 目录下设置。

连接FastCGI

如果你想使用PHP脚本来搭建web网站,还需要设置Nginx支持PHP。

下面介绍PHP服务连接模块,进入 /etc/nginx/default.d 目录,查看 php.conf 文件。此文件是安装PHP时候自动生成的文件无需改动,用于将 PHP 脚本传递给 FastCGI 服务器。

# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_intercept_errors on;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_pass   php-fpm;
}

进入 /etc/nginx/conf.d 目录,目录中的 php-fpm.conf 文件无需更改, php-fpm.conf 是安装PHP8.1时自动生成,是php.conf的一部分,用于将 PHP 脚本传递给 FastCGI 服务器。

# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

编辑 /etc/nginx/conf.d 目录中的 default.conf 文件,或者新建一个自定义的.conf文件。server{}内是网站配置内容。

这只是一个测试用的例子,生产环境下的server配置要复杂的多。

server {
listen 80;
server_name localhost;

root /home/www;
index index.html index.htm index.php;

include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.php?$args ;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

}

添加web存放目录的访问权限:

chown nginx:nginx -R /home/www

配置完成之后,在/home/www 目录下,新建index.php文件,粘贴下面代码:

<?php
phpinfo();
?>

这是一个PHP的探针代码,将代码粘贴到index.php后,保存文件,然后root重新启动服务器。

访问Nginx官方PHP FastCGI 示例

Nginx中遇到的问题

出现“nginx: [emerg] unknown directive " " in /etc/nginx/conf.d/”错误,是Windows中使用SFTP上传时的空格转换问题,在Linux下使用VI编辑,不会产生此问题。

卸载Nginx

如果想卸载所有使用dnf安装的nginx,可以执行卸载命令:

dnf remove nginx

Nginx操作台命令

启动:

systemctl start nginx

停止:

systemctl stop nginx

重启(不停止nginx,使修改配置生效):

systemctl reload nginx

重启:

systemctl restart nginx

设置开机启动:

systemctl enable nginx

禁用开机启动:

systemctl disable nginx

查看服务状态:

systemctl status nginx

到这里Nginx的安装就告一段落了,下面开始安装MYSQL数据库服务。

安装MySQL

Centos8使用dnf安装mysql,首先检查一下系统里有没有安装过mysql。

rpm -qa |grep -i mysql

如果服务器上之前没有安装MySQL,那么现在就开始安装。如果之前安装过MySQL,请使用remove命令卸载!

先查找一下数据源里面都有什么版本。

dnf list mysql*
谷歌云安装PHP+Mysql+Nginx
安装MySQL

Centos官方的软件源中只找了8.0.26版本的,如果想安装更高的版本,需要使用其它的数据源。

安装MySQL8.0

dnf -y install mysql-server
谷歌云安装PHP+Mysql+Nginx
安装MySQL

安装成功之后,启动 MySQL,然后设置开机启动 MySQL。

#启动MySQL
systemctl start mysqld
#设置开机启动
systemctl enable mysqld
#查看MySQL安装版本
mysqladmin --version

最后查看一下已经安装的 MySQL8.0 状态。

systemctl status mysqld
谷歌云安装PHP+Mysql+Nginx

OK,绿灯亮,一切正常!接下来配置 MySQL 服务器。

配置MySQL

运行 mysql_secure_installation 脚本,该脚本会执行一些与安全性相关的操作并设置MySQL根密码:

sudo mysql_secure_installation
谷歌云安装PHP+Mysql+Nginx

VALIDATE PASSWORD COMPONENT 可用于测试密码并提高安全性。 它检查密码的强度并允许用户只设置那些密码
足够安全。 您想设置 VALIDATE PASSWORD 组件吗?

输入:Y ,回车进入该配置。

谷歌云安装PHP+Mysql+Nginx

选择密码验证策略等级, 输入: 0 (low)

输入一个新的密码,密码要求大于8位,包含大写字母,小写字母数字以及特殊符号,之后再确认输入设置的密码。

谷歌云安装PHP+Mysql+Nginx

确认是否继续使用提供的密码,输入:Y

谷歌云安装PHP+Mysql+Nginx

默认情况下,MySQL 安装有一个匿名用户,允许任何人无需登录就可以登录 MySQL为他们创建的用户帐户。 这仅用于测试,并使安装更顺畅。你应该在进入生产之前删除它们环境。

是否移除匿名用户? 输入: Y

谷歌云安装PHP+Mysql+Nginx
通常,只允许 root 连接'本地主机'。 这确保了有人无法猜测来自网络的root密码。

禁止使用root远程登陆MySQL 输入: N

谷歌云安装PHP+Mysql+Nginx

默认情况下,MySQL 带有一个名为“test”的数据库,任何人都可以访问。 这也仅用于测试,并且应该在进入生产之前被移除环境。

移除MySQL自带的test测试数据库 输入:Y

谷歌云安装PHP+Mysql+Nginx

重新加载权限表,将确保所有更改到目前为止所做的将立即生效。

重新载入权限表, 输入:Y 

MySQL8.0默认已经是utf8mb4字符集,所以字符集不再修改。MySQL到这一步已经配置成功了!

配置mysql远程登陆

如果需要设置root账户远程登陆,重复上一步骤中,再允许root远程登陆这一步,设置为Y。

接下来使用 mysql -u root -p 命令登录MySQL,将root用户的host字段设为'%',意为接受root所有IP地址的登录请求。

UPDATE USER SET host='%' WHERE user='root';

设置之后重启mysql服务:

systemctl restart mysqld

MySQL操作台命令

启动:

systemctl start mysqld

停止:

systemctl stop mysqld

重启:

systemctl restart mysqld

设置开机启动:

systemctl enable mysqld

查看MySQL Server状态:

systemctl status mysqld

到这里,就全部安装完毕!php+mysql+nginx 的Linux环境已经搭建成功了。

订阅
提醒
guest
0 评论
内联反馈
查看所有评论