Google Cloud 谷歌云服务器配置 LNMP环境 PHP+Mysql+Nginx 安装详解

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

谷歌云服务器配置 在 Centos8 下安装 LNMP 环境 PHP+Mysql+Nginx 安装详解

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

本教程适用于:/ 8/ Stream 9/ Red Hat Enterprise (RHEL)

Google Cloud 谷歌云服务器配置 LNMP环境 PHP+Mysql+Nginx 安装详解-1

谷歌云服务器配置

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

由于CentOS 8 宣布21年底停止支持,升级至CentOS Stream, 将之前的 Centos8 系统更新为CentOS Stream 8和CentOS Stream 9系统,在操作方面没有太大改动。添加一下软件仓库源即可。

下面以CentOS Stream 8系统为例,进行

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

谷歌云服务器配置 在 Centos8 下安装 LNMP 环境

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

谷歌云服务器配置 修改服务器root密码

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

sudo -i
passwd

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

vi /etc/ssh/sshd_config
谷歌云服务器配置 在 Centos8 下安装 LNMP 环境

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

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

修改完毕后,使用:wq命令退出VI编辑。

以上是使用谷歌云服务器开启SSH登录的方法。更改ssh的端口后,需要关闭SElinux,否则无法登录。

永久关闭SElinux

服务器,首先需要永久关闭SElinux,虽然说SElinux是用来增强Linux安全的,但是设置起来非常麻烦。建议永久关闭。

vi /etc/selinux/config

找到SELINUX=enforcing,按i进入编辑模式,将参数修改为SELINUX=disabled

谷歌云服务器配置 在 Centos8 下安装 LNMP 环境

修改完成后,按下键盘Esc键,执行命令:wq,保存并退出文件。之后reboot重新启动服务器。SElinux已经成功关闭了,下一步就是修改SSH的端口号,网上自动扫描肉鸡的很多,一旦中招,后果不堪设想,谷歌云是按流量收费的,虽然送了300美元,如果被入侵,一天带宽跑个几千块没有问题。所以说还是先把SSH的远程端口更改一下!

注意:有些系统是默认开启的,需要查看一下防火墙状态

systemctl status firewalld

Google Cloud 谷歌云服务器配置 LNMP环境 PHP+Mysql+Nginx 安装详解-1

如果防火墙是开启状态,需要在root用户权限下,关闭firewalld

#首先需要停止防火墙
systemctl stop firewalld
#防火墙停止后,进行永久关闭
systemctl disable firewalld

后期进入到生产环境时,防火墙可以在谷歌云的平台上设置防火墙。

重新启动服务器!

 reboot

谷歌云服务器配置 CentOS 7 / CentOS Stream 8/9 安装软件源epel和remi

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

使用RPM方式安装软件源:

CentOS 7 安装软件仓库:

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

CentOS Stream 8 安装软件仓库:

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

CentOS Stream 9 安装软件仓库:

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

使用DNF方式安装软件源:

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

CentOS 7 安装软件仓库:

CentOS7需要先安装dnf命令。

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

CentOS Stream 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

CentOS Stream 9 安装软件仓库:

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

软件源安装完毕后,安装 dnf-utils

dnf-utils 在 DNF 之上作为 CLI 垫片实现的经典 YUM 实用程序。这些 shim 的主要目的是确保与 yum-3 的向后兼容性。

安装之后使用 dnf update 命令 更新系统内软件至最新版本。

dnf install dnf-utils
dnf update

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

dnf repolist all
谷歌云服务器配置 在 Centos8 下安装 LNMP 环境

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

dnf repolist

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

dnf repolist disabled

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

dnf makecache

安装启用DNF的自动更新:

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

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

dnf group install 'Development Tools' -y

使用DNF更新系统软件包:

 dnf -y update

谷歌云服务器配置SWAP虚拟内存

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。

创建一个8G的SWAP分区,如果想加大或缩小SWAP虚拟内存,请修改count=后面的数值。

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

服务器时间同步

安装服务器时间同步工具,服务端与客户端的时间同步非常重要。

查看当前时区,如果时区是UTC,需要修改服务器时区。

timedatectl status|grep 'Time zone'
#查看服务器硬件时间
hwclock
#通过hwclock -w 将操作系统时间同步到硬件时间
hwclock -w

修改服务器时区

timedatectl set-timezone Asia/Shanghai
timedatectl set-local-rtc 1
#使用date命令查看一下当前服务器时间。
date

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

在 CentOS 8 中默认不再支持 ntp 软件包,时间同步将由 chrony 来实现。

默认centos8安装系统后已经存在chrony的软件包了,可以通过 rpm -q chrony 确认是否存在,如果不存在使用dnf安装即可:dnf install chrony

vi /etc/chrony.conf
server ntp.aliyun.com iburst

将国内阿里云的时间同步服务器添加在第一行保存即可。

设置chrony开机运行

systemctl enable chronyd
systemctl start chronyd

新增用户和用户组

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

groupadd www
useradd -g www www

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

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

开启CentOS自带的TCP BBR加速

系统自带内核高于4.9 则默认已包含 BBR

1、使用 root 权限运行下面代码,内核版本高于 4.9 就行。

uname -r

2、开启BBR

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

3、生效更改

sysctl -p

4、执行下面命令,如果结果中带有bbr,则证明你的内核已开启bbr。

sysctl net.ipv4.tcp_available_congestion_control

注:也可以执行下面命令,如果结果中有bbr,也可以证明你的内核已开启bbr。

lsmod | grep bbr

 

谷歌云服务器配置 安装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包的内容进行
  • 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的欢迎页面。

配置谷歌云服务器 在 Centos8 下安装 LNMP 环境

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

  • Nginx主配置文件:/etc/nginx/
  • 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}

php8.0的扩展安装

dnf install -y php-{mysqlnd,pecl-imagick,pecl-imagick-devel,gd,intl,cli,mbstring,curl,php-pecl-zip}

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

dnf search php81*

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

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
服务器启动完毕后,看一下PHP8.1的运行状态。
systemctl status php-fpm

谷歌云安装PHP+Mysql+Nginx

状态灯是绿色的,就表示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文件。

修改 http://www.conf 文件

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

修改用户组和用户名称,设置 http://www.conf 文件的用户组权限。将 http://www.conf 的访问权限设置 -R,用户与用户组设置成 nginx

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

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

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

http://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 文件修改完毕。

修改 session 权限

例如修改 /var/lib/php/session 的用户组以及权限。

cd /var/lib/php
chown nginx:nginx ./session
chmod -R 777 ./session
systemctl reload php-fpm

到这里php已经安装配置完毕了,重新启动php服务,或者 reboot 重新启动服务器。

注意:如果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;                                              #配置用户或者组,默认为nobody nobody。
worker_processes auto;                                   #允许生成的进程数,默认为1
pid /run/nginx.pid;                                      #指定nginx进程运行文件存放地址
error_log /var/log/nginx/error.log error;       #制定错误日志路径,级别。这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg,级别越高,记录越少,一般设置error

#加载动态模块。

include /usr/share/nginx/modules/*.conf;

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

events {
   accept_mutex on;                   #设置网路连接序列化,防止惊群现象发生,默认为on
   multi_accept on;                   #设置一个进程是否同时接受多个网络连接,默认为off
   #use epoll;                        #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
   worker_connections 4096;           #单个work进程允许的最大连接数,默认为512
}

#http服务器配置文件块

http {
   log_format myFormat '$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  myFormat;          #设置访问日志路径和格式。combined为日志格式的默认值。
   rewrite_log on;
   #access_log off;                                          #取消服务访问日志
   sendfile on;                                              #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
   sendfile_max_chunk 0;                                     #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
   keepalive_timeout 1000;                                   #连接超时时间,默认为75s,可以在http,server,location块。
   client_max_body_size 1024m;
   types_hash_max_size 4096;
   tcp_nodelay on;
   tcp_nopush on;
   default_type application/octet-stream;           #默认文件类型,默认为text/plain

   fastcgi_connect_timeout 3000;              #fastcgi连接超时时间,默认60秒
   fastcgi_send_timeout 3000;                 #nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认值60秒
   fastcgi_read_timeout 3000;                 #fastcgi 进程向 nginx 进程发送输出过程的超时时间,默认值60秒


   gzip on;                                                   #gzip压缩开关,on开启Gzip压缩,默认 off 关闭
   gzip_min_length 1k;                                        # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
   gzip_comp_level 9;                                         # gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
   gzip_buffers 4 16k;                                        # 设置压缩所需要的缓冲区大小
   gzip_http_version 1.1;                                     # 设置gzip压缩针对的HTTP协议版本,没做负载的可以不用
   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;      # 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
   gzip_vary on;                                          # 是否在http header中添加Vary: Accept-Encoding,建议开启
   gzip_disable "MSIE [1-6]\.";                           # 禁用IE 6 gzip
   gzip_proxied off;

   ssl_session_cache shared:le_nginx_SSL:10m;
   ssl_session_timeout 1440m;
   ssl_session_tickets off;
   ssl_protocols TLSv1.2 TLSv1.3;
   ssl_prefer_server_ciphers off;
   ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";

   include /etc/nginx/mime.types;                       #文件扩展名与文件类型映射表。设定mime类型(邮件支持类型),类型由mime.types文件定义。
   include /etc/nginx/conf.d/*.conf;                    # 从 /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|phar)(/.*)?$ {
    fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;

    fastcgi_intercept_errors on;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
    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 443 ssl http2;
       listen [::]:443 ssl http2;
       server_name  XXX.com;
       root /home/www;
       index index.php index.html index.htm;

       ssl_certificate "/etc/letsencrypt/live/***/fullchain.pem";         # ssl证书地址
       ssl_certificate_key "/etc/letsencrypt/live***/privkey.pem";    # ssl证书地址
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;                                                                   #缓存有效期
       ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #加密算法
       ssl_protocols  TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;                                  #安全链接可选的加密协议
       ssl_prefer_server_ciphers   on;                                                           #使用服务器端的首选算法

       # Config for 0-RTT in TLSv1.3
       ssl_early_data on;
       ssl_stapling on;
       ssl_stapling_verify on;
       add_header Strict-Transport-Security "max-age=31536000";
       include /etc/nginx/default.d/*.conf;                 # 从 /etc/nginx/default.d 加载默认服务器块的配置文件。

       #伪静态页
       location / {
       try_files $uri $uri/ /index.php?$args ;
                  }
       #反向代理

       location /update32/
        {
       proxy_redirect off;
       proxy_read_timeout 1200s;
       proxy_pass http://127.0.0.1:20892;
       proxy_http_version 1.1;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_set_header Host $http_host;

       # Config for 0-RTT in TLSv1.3
       proxy_set_header Early-Data $ssl_early_data;
        }
       }

添加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

安装MySQL8.0

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

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
禁用开机启动:systemctl disable mysqld
查看服务状态:systemctl status mysqld

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

评分

一条评论

  1. 强烈推荐: 谷歌云服务器 是目前已知的真正的功能强大的 免费云服务器 可以满足大多网站的实际需求!

    Unknown Unknown Unknown Unknown

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注