安装 Nginx

更新系统

安装任何组件之前,养成更新系统的好习惯。

1
yum -y update

安装 Nginx

安装 Nginx 源

CentOS 默认源没有集成 Nginx,我们需要先安装 Nginx 源。

1
yum localinstall http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm -y

安装 nginx

1
yum install -y nginx

启动 nginx

1
systemctl start nginx

配置系统防火墙

修改接口区域并查看已开放的端口

block 区域不开放任何端口,设置好需要重载一下配置。后续操作,请注意区域设置。

1
2
3
4
5
# 将接口添加到区域,默认接口都在public。
firewall-cmd --zone=block --add-interface=eth0 --permanent

# 更新防火墙规则
firewall-cmd --reload

查看端口:

1
firewall-cmd --list-ports

开启 80 端口

命令:firewall-cmd –zone=作用域 –add-port=端口和访问类型 –permanent(永久生效,缺省该参数为临时生效。)

1
firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙

1
firewall-cmd --reload

重启防火墙后,使用前面查看已开放的端口可以看见 80 端口已经开启。

附:防火墙常用操作指令

1)、停止防火墙。

1
systemctl stop firewalld.service

2)、禁止防火墙开机启动。

1
systemctl disable firewalld.service

3)、删除开启的端口。

命令:firewall-cmd –zone=作用域 –remove-port=端口和访问类型 –permanent(永久生效,缺省该参数为临时生效。)

1
firewall-cmd --zone=public --remove-port=80/tcp --permanent

4)、指定 IP 与端口。

1
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.8.2" port protocol="tcp" port="22" accept"

5)、指定 ip 段可以访问

1
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.8.0/24" port protocol="tcp" port="22" accept"

6)、指定 ip 地址开放所有端口

1
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.8.8" port protocol="tcp" port="0-65535" accept"

7)、查看配置结果

1
firewall-cmd --list-all

8)、删除规则

1
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.8.2" port protocol="tcp" port="22" accept"

测试 Nginx

本机输入:http://127.0.0.1/ 或者远程访问服务器 IP 地址 http://服务器 IP 地址/,可以看见以下界面:

2529785994.png

安装 MariaDB 数据库

参见:

《CentOS 7 搭建 LAMP 环境安装 WordPress》 一文中的数据库安装

安装 PHP

安装 PHP

安装 PHP

参见:

《CentOS 7 搭建 LAMP 环境安装 WordPress》 一文中的 PHP 安装

上文安装的 PHP 是 5.6 版本。本次环境搭建采用 7.2 版本,在安装的时候指定安装 72 版本(将 56 换成 72 即可)。

1
yum install -y php72w php72w-opcache php72w-xml php72w-mcrypt php72w-gd php72w-devel php72w-mysql php72w-intl php72w-mbstring

设置 Session 文件夹权限

1
vim /etc/php.ini
1
2
;该行是否注释掉。如果已注释把前面的 ; 去掉。
session.save_path = “/var/lib/php/session”

PHP 7.2 session.save_path 默认设置为 /var/lib/php/session,如不修改该文件夹可以忽略以上两步,直接设置文件夹权限即可。

1
2
# 设置 session 目录权限
chown -R nginx:nginx /var/lib/php/session/.

安装 php-fpm

安装 php-fpm

Nginx 支持 php 解析需要安装 php-fpm。

1
yum install php72w-fpm

配置 php-fpm

1
nano /etc/php-fpm.d/www.conf

1
2
user = apache
group = apache

修改为

1
2
user = nginx
group = nginx

启动 php-fpm 和设置开机自启动

1
2
systemctl start php-fpm
systemctl enable php-fpm

配置 Nginx 支持 PHP

编辑 Nginx 的配置文件:

1
nano /etc/nginx/conf.d/default.conf

修改以下代码,加入 index.php 默认页配置:

1
2
3
4
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}

将以下代码前面的注释去掉:

1
2
3
4
5
6
7
#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;
#}

并修改为:

1
2
3
4
5
6
7
8
9
10
11
location ~ \.php$ {
# 指定 root 正确路径,否则会出现 404 错误
root /usr/share/nginx/html;
# 调用 fastcgi 之前检查 404 错误
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# 修改 /scripts 为 $document_root,否则 fastcgi 会返回找不到文件的提示
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Nginx 和 PHP-FPM 的进程间通信有两种方式,一种是 TCP,一种是 UNIX Domain Socket。
其中 TCP 是 IP 加端口,可以跨服务器。而 UNIX Domain Socket 不经过网络,只能用于 Nginx 跟 PHP-FPM 都在同一服务器的场景。
用哪种取决于你的 PHP-FPM 配置:

方式 1:

1
2
3
4
5
# 打开 php-fpm 配置文件
vim /etc/php-fpm.d/www.conf

# 修改 listen
listen = 127.0.0.1:9000
1
2
3
4
5
# 打开 nginx 配置文件
vim /etc/nginx/nginx.conf

# 修改 fastcgi_pass
fastcgi_pass 127.0.0.1:9000;

方式 2:

1
2
3
4
5
6
7
8
9
10
11
12
# 打开 php-fpm 配置文件
vim /etc/php-fpm.d/www.conf

# 修改 listen
listen = /var/run/php-fpm/php-fpm.sock

# 取消 listen.mode 注释,默认为 0660,修改为 0666。

# 否则会因权限问题无法访问 php-fpm.sock 文件。

# nobody 用户权限可以忽略此步。
listen.mode = 0666
1
2
3
4
5
# 打开 nginx 配置文件
vim /etc/nginx/nginx.conf

# 修改 fastcgi_pass
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;

其中 php-fpm.sock 是一个文件,由 php-fpm 生成,默认类型是 srw-rw—-,修改 listen.mode = 0666 之后,类型是 srw-rw-rw-。

测试 PHP

/usr/share/nginx/html 文件夹创建测试文件 info.php:

1
nano /usr/share/nginx/html/info.php

输入测试代码:

1
<?php phpinfo(); ?>

本机输入:http://127.0.0.1/info.php 或者远程访问服务器 IP 地址 http://服务器 IP 地址/info.php,可以看见以下界面:

3898761865.png

安装 phpMyAdmin

CentOS 默认源自带的 phpMyAdmin 不支持 php7.2, 如果直接安装,会提示以下安装错误。我们需要手动安装 phpMyAdmin。

1
2
3
4
5
错误:php72w-common conflicts with php-common-5.4.16-46.el7.x86_64

您可以尝试添加 --skip-broken 选项来解决该问题

您可以尝试执行:rpm -Va --nofiles --nodigest

下载和安装 phpMyAdmin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 进入 nginx 根目录
cd /usr/share/nginx/html

# 下载 phpMyAdmin 压缩文件
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz -O phpMyAdmin.tar.gz

# 解压缩
tar xzvf phpMyAdmin.tar.gz

# 重命名文件夹,源文件夹名称请根据实际情况修改
mv phpMyAdmin-4.8.5-all-languages phpMyAdmin

# 删除压缩文件
rm phpMyAdmin.tar.gz

访问 phpMyAdmin

在浏览器输入 http://127.0.0.1/phpMyAdmin 登录 phpMyAdmin:

3644091757.png

配置 $cfg[‘TempDir’] 权限

phpMyAdmin 为了提高性能需要写入临时文件,否则系统会出现提示 变量 $cfg['TempDir'] (./tmp/)无法访问。phpMyAdmin无法缓存模板文件,所以会运行缓慢。,可以进行以下配置去掉该提示信息。

1
2
3
4
5
6
7
8
9
# 进入 phpMyAdmin 安装目录
cd /usr/share/nginx/html/phpMyAdmin

# 新建文件夹 tmp
mkdir tmp

# 设置文件夹权限
chown -R nginx:nginx tmp
chmod -R 700 tmp

phpMyAdmin 加强了密码认证,需要设置一个身份验证加密密码。否则系统首页会提示 配置文件现在需要一个短语密码。,如果不想看见该提示可以进行以下设置。

1
2
3
4
5
# 创建 phpMyAdmin 配置文件:
cp config.sample.inc.php config.inc.php

# 编辑配置文件
vim config.inc.php

查找以下代码,设置 32 位长度的加密密码。

1
$cfg['blowfish_secret'] = 'abcdefghijklmnopqrstuvwxyz123456';

点击 这里 生成 32 位长度密码。

开启 phpMyAdmin 高级功能

phpMyAdmin 首页会提示 phpMyAdmin 高级功能尚未完全设置,部分功能未激活。,点击后面的 查找原因 进入下一个页面。

系统提示创建一个名为'phpmyadmin'的数据库,并在那里设置phpMyAdmin配置存储。,点击前面的创建来新建 phpmyadmin 数据库。

此时,phpMyAdmin 首页不再提示高级功能尚未完全设置。但高级功能还是未开启,还需要配置 config.inc.php 启用设置。

1
vim /usr/share/nginx/html/phpMyAdmin/config.inc.php

将以下代码前面的注释 // 取消即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

Nginx 和 php-fpm 的用户和用户组

修改用户和用户组

nginx 用户和用户组配置文件

1
vim /etc/nginx/nginx.conf
1
2
# 默认用户名是 nginx,如需指定用户组格式为:user username usergroup
user nginx nginx

php-fpm 用户和用户组配置文件

1
vim /etc/php-fpm.d/www.conf
1
2
3
// 默认用户和用户组是 apache
user = nginx
group = nginx

修改目录权限

如果变更了用户或用户组,还需要修改以下目录权限。

1
2
3
4
5
6
7
8
# nginx的日志目录 /var/log/nginx
chown -R nginx:nginx /var/log/nginx     

# 上传文件临时目录 /var/lib/nginx/tmp/
chown -R nginx:nginx /var/lib/nginx  

# php session 保存目录:php_value[session.save_path] = /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session

生产环境建议设置为 nobody,需要写入的权限通过指令chmod -R 777 目录名修改。