摘要訊息 : 教你如何在 CentOS 7 下配置 Nginx + PHP 7.1 和 MySQL 5.7 環境.

0. 前言

在搭建路上, 博主一路摸爬滚打, 从原来的什么都不会, 到现在基本一次成功. 走过很多弯路, 百度上面很多类似的教程, 但是都不是很合适, 总有一些莫名其妙的问题. 今天把搭建的方法总结在这里, 方便新手学习.

首先, 要有一台 CentOS 7 的服务器, 博主选用的服务器是 Vultr 的服务器 (自行申请). 如果你什么都不会, 直接跟着教程走, 复制命令就可以了!

虽然本文已经有接近五年历史,考虑到 CentOS 7, PHP 7 和 MySQL 5.7 的使用者数量仍然有很多, 因此暂时不考虑对本文进行归档. 请阁下仔细甄别文章中可能过时的部分, 有问题需要修正可以留下评论.

更新纪录 :

  • 2022 年 1 月 20 日进行第一次更新和修正.

1. Nginx

首先, 就是 Nginx 的安装. 一般服务器自带的 Nginx 版本都不是最新的 Nginx 版本, 要想使用到最新的 Nginx 版本, 首先要进入 : http://nginx.org/packages/centos/7/noarch/RPMS/. 然后找到对应的 yum repo, 然后更新 repo 的 rpm :
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
这个是到目前为止最新的 rpm. 中国大陆的服务器下载速度可能有些慢, 稍微等待一下. 更新完成之后便有 :

Figure 1. 更新 rpm 之后的效果

接下来可以进行 Nginx 的安装, 执行指令 yum install -y nginx, 安装完成会提示 :

Figure 2. 完成安装 Nginx 之后的效果

然后就可以测试 Nginx 是否真的安装成功了. 首先, 要开启 Nginx 并且设置开机启动 : systemctl enable --now nginx (或者你可以使用两条指令 : systemctl start nginxsystemctl enable nginx). 第一条指令是启动 Nginx, 第二条指令是设定开机启动. 成功之后会显示 :

Figure 3. 设定 Nginx 开启启动之后的效果

很多服务商提供的服务器默认是开启防火墙的, 所以要想测试 Nginx 是否启动成功, 还要修改防火墙的配置 :

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

每一句命令输入之后都会有 success 返回. 之后直接访问服务器 IP 如果可以看到如下页面, 就代表 Nginx 安装成功 :

Figure 4. Nginx 正常运作

如果看到的一片空白或者浏览器的错误信息, 那么请检查是否开启了 SELinux 以及伺服器提供商是否自建了防火墙.

2. MySQL

访问 MySQL 官方网站 https://dev.mysql.com/downloads/repo/yum/ 寻找合适的 yum repo, 现在最新的命令是 rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm. 成功之后会提示 :

Figure 5. MySQL RPM 包汇入之后的结果

然后我们使用指令 yum install -y mysql-community-server mysql-community-devel 安装 MySQL, 安装成功之后会提示 :

Figure 6. MySQL 安装完成的提示

接下来对 MySQL 进行设置. 首先, 需要使用指令 systemctl start mysqld 开启 MySQL. 由于 MySQL 安装完之后自己设置了自启动, 那么这里可以省去设置开机启动的命令. MyQSL 5.7 和之前的版本 (MySQL 5.6 及其更旧的版本) 有所不同, MySQL 5.7 在安装的时候已经设置好了初始密码, 以前的版本密码为空. 我们可以通过命令 grep 'temporary password' /var/log/mysqld.log 来获得初始密码 :

Figure 7. 获取初始密码

第二行冒号之后的 mEt4i9ly/N_Y 便是我的初始密码, 每个人的都可能不一样. 对于 MySQL 5.7 给出的初始密码, 其实已经很安全了, 唯一的缺点就是不好记, 这时候可以搭配 1Password 等软件. 如果要修改密码的, 可以执行下面的命令 : 首先使用指令 mysql -uroot -p 进入 MySQL, 会提示你输入密码, 输入刚刚给出的初始密码即可; 然后直接输入 ALTER USER 'root'@'localhost' IDENTIFIED BY '你要修改的新密码'; 将中文字替换成你的密码即可, 最后有分号不要忘记. 不过, 值得注意的是, MySQL 5.7 对于密码的要求非常严格, 必须至少包含1个大写字母、1个小写字母、1个数字和1个特殊字符, 而且长度不得小于8个字符. 修改完成之后输入 quit 退出即可.

到这里 MySQL 的安装和配置就算完成了, 后期的工作都可以通过 phpMyAdmin 来实现.

3. PHP 7

原来的文章中安装的是 PHP 7.1, 由于 PHP 7 已经更新到了 PHP 7.4, 因此大家如果想要安装更高的版本请参考 (基本通用) :

首先同样引入 RPM : rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm.

接下来输入长命令安装 PHP 7.1 :

yum install -y php71w php71w-bcmath php71w-cli php71w-common php71w-dba php71w-devel php71w-embedded php71w-enchant php71w-fpm php71w-gd php71w-imap php71w-interbase php71w-intl php71w-ldap php71w-mbstring php71w-mcrypt php71w-mysqlnd php71w-odbc php71w-opcache php71w-pdo php71w-pdo_dblib php71w-pear.noarch php71w-phpdbg php71w-process php71w-pspell php71w-recode php71w-snmp php71w-soap php71w-tidy php71w-xml php71w-xmlrpc php71w-pecl-mongodb php71w-pecl-redis php71w-pecl-igbinary php71w-pecl-apcu php71w-pecl-apcu-devel php71w-pecl-geoip php71w-pecl-igbinary-devel php71w-pecl-imagick php71w-pecl-libsodium php71w-pecl-memcached php71w-pecl-xdebug

这里已经默认安装了 PHP 7 的很多组件, 如果不需要那么多组件, 可以通过自己选择来挑选自己需要的组件. 如果你在最后看到有 Complete!, 那么就说明安装成功了.

我们需要稍微配置一下 PHP, 以便于以后安装某些程序不再麻烦. 先用指令 vim /etc/php-fpm.d/www.conf 打开 PHP-FPM 配置文件找到 user = apachegroup = apache, 修改为 user = nginxgroup = nginx. 然后按 "/", 输入$HOSTNAME (这个动作为搜索 "$HOSTNAME"), 找到若干个 ;env...;env... 之前的分号全部去掉 (这个动作为取消注释).

配置完 PHP-FPM 之后, 还需要对 php.ini 文件进行配置, 方便今后的使用. 首先用指令 vim /etc/php.ini 打开 php.ini, 找到 mysqli.default_socket, 按 "i" 进入编辑模式, 把那一行改为 mysqli.default_socket = /var/lib/mysql/mysql.sock. 找到 date.timezone, 把那一行改为 date.timezone = Asia/Hong_Kong 或者你想要的时区 (可以去 https://www.php.net/manual/zh/timezones.php 找到自己的时区). 其它设定如果阁下不了解, 建议保持预设. 最后按 ESC 退出编辑模式, 输入冒号 ":" 和 "wq!" 回车退出.

保存之后, 还要赋予 Nginx 对应目录的权限, 否则一些程式可能无法正常运行 : chown -R nginx:nginx /var/lib/php/session.

接下来, 还要做的是启动 PHP-FPM, 如果不启动, 访问网站就会出现 502 Bad Gateway 错误 : systemctl start php-fpm. 需要开机启动的还要输入 systemctl enable php-fpm.

PHP 的配置就算完成了, 就要正式开始建立网站了, 网上有很多现成的免费网站程序. 不过, 在建立网站之前, 我们首先测试一下 PHP 的运作是否正常. 首先要建立一个专门放网页的目录 : mkdir /www, 这是我的习惯, 大家也可以放在别的地方. 然后编辑测试网页 : vi /www/info.php, 按 "i" 进入编辑模式并且输入

<?php
    phpinfo();

ESC 键退出编辑模式, 之后输入 ":" 再输入 "wq!" 按回车退出. 到这里, 我们的 PHP 测试页面就算完成了.

最后我们还要告诉 Nginx 有这样一个网页. 首先进入 Nginx 配置的相关目录 : cd /etc/nginx/conf.d, 然后通过 vi 命令创建一个新的 .conf 文件, 对于文件的命名, 个人建议使用域名, 例如 vi jonny.vip.conf. 按 "i" 进入编辑模式, 然后输入

server {
    listen 80;    # 使用的端口, 不建议更改
    server_name 此处修改为你网站的域名或者可以直接使用 IP;
    root /www;    # 绑定的目录
    access_log /var/log/nginx/test.access.log main;    # 运作日志档案位置, 不建议更改
    error_log /var/log/nginx/test.error.log error;    # 错误日志档案位置, 不建议更改
    location / {
        index index.php index.html;
    }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;    # FastCGI 的端口, 如果按照本文上面的方式安装的 PHP, 那么无需修改, 默认为 9000.
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_send_timeout 36000s;
        fastcgi_read_timeout 36000s;
        fastcgi_buffer_size 1024k;
        fastcgi_buffers 8 1024k;
        fastcgi_busy_buffers_size 2048k;
        fastcgi_temp_file_write_size 2048k;
        fastcgi_intercept_errors on;
        fastcgi_connect_timeout 36000s;
    }
}

如果按照本文的方式安装的, 并且把档案放在 /www 的话, 那么只需要修改域名即可. 设置好之后使用 nginx -t 指令测试一下是否有错误, 仔细查看 Nginx 回传的资讯. 如果没有问题的话, 使用 systemctl reload nginx 重新载入 Nginx 的配置档案. 如果重新载入成功, 那么直接访问相关网站的域名 : http://你的域名/info.php, 就可以看到如下界面 :

Figure 8. PHP 安装成功

到此为止, 相关的搭建工作已经完成了, 接下来只要上传网站源码就可以了.