Centos7/8 安装Nginx PHP7.X Mysql8.0
关于这方面的教程可以说是一搜一大把,但都有点缺陷,在实际操作中各种坑,为了少踩坑。本文将为新手呈上最为全面的搭建教程。
安装环境
- Nginx1.2
- PHP7.x
- Mysql8.0
安装Nginx
添加 CentOS 7 EPEL 存储库,请运行以下命令:
yum install epel-release
安装Nginx
yum install nginx
启动 Nginx 服务
systemctl start nginx
开机启动
sudo systemctl enable nginx
安装Mysql8.0
添加mysql库
yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
安装mysql
yum --enablerepo=mysql80-community install mysql-community-server
启动mysql
systemctl start mysqld.service
修改root密码 因为在mysql8中,在安装数据库时会设置默认密码。我们可以利用下面命令查看默认密码
grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log |tail -1
初始化数据库
sudo mysql_secure_installation
这里会提示输入root的密码,即上一步获得的默认密码。然后从新输入root密码,一路输
Y
即可。
不知道为什么,修改后程序不能连接登录。用下面命令重新修改root密码。
mysql -u root -p
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'youpassword';
systemctl restart mysqld #重启MySQL
安装 PHP
安装 Remi 存储库
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
检查 Remi 存储库中可用的 PHP 7+ 版本
yum --disablerepo="*" --enablerepo="remi-safe" list php[7-9][0-9].x86_64
你会看到这样的输出
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* remi-safe: mirrors.ukfast.co.uk
Available Packages
php70.x86_64 2.0-1.el7.remi remi-safe
php71.x86_64 2.0-1.el7.remi remi-safe
php72.x86_64 2.0-1.el7.remi remi-safe
php73.x86_64 2.0-1.el7.remi remi-safe
php74.x86_64 1.0-3.el7.remi remi-safe
php80.x86_64 1.0-3.el7.remi
启用相应的 PHP 版本(这里以7.4为例)
sudo yum-config-manager --enable remi-php74
安装php
yum -y install php php-mysqlnd php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-zip php-cli php-fpm php-gd php-mysqlnd php-mbstring php-opcache php-pdo php-json
配置文件
配置php-fpm文件
vim /etc/php-fpm.d/www.conf
user
和
group
变量默认为
apache
。我们需要将这些更改为
nginx
找到
listen
php-fpm将通过 TCP 侦听特定主机和端口。我们想要更改此设置,使其侦听本地套接字文件,因为这会提高服务器的整体性能。
listen = /var/run/php-fpm/php-fpm.sock;
最后,我们需要更改我们刚刚在listen指令中定义的套接字文件的所有者和组设置。找到
listen.owner
,
listen.group
和
listen.mode
指令。这些行默认被注释掉。通过删除;行开头的前置符号来取消注释。然后,将所有者和组更改为
nginx
:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
最后重启php-fpm
systemctl start php-fpm
配置 Nginx 以处理 PHP
目前的配置是无法访问php文件,我们还需要简单的配置下。
Nginx 有一个专用目录,我们可以在其中使用服务器块将每个托管网站定义为单独的配置文件。这类似于 Apache 的虚拟主机。
在默认安装中,此目录为空。我们将创建一个新文件作为此服务器上的默认 PHP 网站,它将覆盖/etc/nginx/nginx.conf文件中定义的默认服务器块。
在
/etc/nginx/conf.d
目录中打开一个新文件
vim /etc/nginx/conf.d/default.conf
#内容如下:
server {
listen 80; #端口 可自行修改 如8080
server_name 192.168.x.x; #没有域名的话直接填写公网IP或内网IP
root /var/www/html; #网站路劲
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html; #网站路劲
#php配置部分
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重新启动 Nginx 以应用更改:
sudo systemctl restart nginx
配置网站目录用户组和权限
因为目前php和nginx都是以
nginx
的身份运行,而我们的目录有时候权限归
root
所有。所以访问网站会出现
404
。
首先检查php和ngxin的用户组
ps -ef | grep php
ps -ef | grep nginx
最后修改相应目录的用户组权限
chown -R nginx:nginx /var/www/blog
然后再次重启php和nginx即可
配置PATHINFO
像Typecho一样,我们需要开启
PATHINFO
Nginx默认是不支持PATHINFO的,所以需要更改支持PATHINFO的主机的配置文件。
location ~ ^(.+\.php)(.*)$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;