LNMP

要点:

  • Nginx配置SSL证书
  • Nginx用户目录权限
  • Nginx域名重定向
  • Nginx强制SSL
  • PHP用户统一
  • PHP监听地址
  • 数据库创建
  • TYPECHO 小优化
  • phpMyAdmin

目录:

[TOC]

服务器:

Rocky Linux
Linux aaa 4.18.0-372.9.1.el8.x86_64 #1 SMP Tue May 10 14:48:47 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Rocky Linux 配置 PHP 环境_rocky安装php-CSDN博客

一、准备

1.更新软件包

yum update -y
yum install -y nano

2.安装EPEL存储库:

 sudo yum install epel-release

3.关闭防火墙

用阿里云自带的防火墙就足够

systemctl stop firewalld
systemctl disable firewalld

4.关闭SELINUX

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

二、安装Nginx

(一)安装Nginx

1.安装Nginx:

dnf install -y nginx

2.启动Nginx服务:

sudo systemctl start nginx

3.设置Nginx服务自启动:

sudo systemctl enable nginx

4.验证Nginx是否运行:

sudo systemctl status nginx

(二)配置Nginx

0.上传SSL证书

mkdir /www
mkdir /www/wwwroot/
mkdir /www/wwwroot/example_typecho

"/www/wwwroot/ssl_cert/example.cn.key"
"/www/wwwroot/ssl_cert/example.cn_bundle.pem"

1.给网站根目录权限

Nginx默认会创建个用户nginx,先创建网站根目录,并需要给权限

sudo chown nginx:nginx -R /www/wwwroot
sudo chmod -R 775 /www/wwwroot

sudo chown -R nginx:nginx /var/lib/php 
sudo chmod -R 755 /var/lib/php

sudo chown -R nginx:nginx /etc/nginx
sudo chmod -R 755 /etc/nginx

设置自动给权限

crontab -e
* * * * * chmod -R 755 /www/wwwroot
* * * * * chown -R nginx:nginx /www/wwwroot

2.修改默认配置

nano /etc/nginx/nginx.conf

找到http这个参数

  • 首先在http里面添加开启gzip
    gzip on;
    gzip_static on;
    gzip_min_length  5k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 7;
    gzip_types       text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php;
    gzip_vary on;
  • 然后修改http里的默认server(这是开启了ssl的)
    # SSL 配置
    ssl_session_timeout 5m;    # 缓存有效期
    ssl_prefer_server_ciphers on;    # 使用服务器端的首选算法
    ssl_protocols TLSV1 TLSv1.1 TLSv1.2 TLSv1.3;    # 安全链接可选的加密协议
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    # 加密算法

    # 泛域名 80 重定向
    server {
        listen 80;
        server_name example.cn *.example.cn;

        location ~ /\.well-known {
            allow all;
        }

        return 301 https://$host$request_uri;
    }

    # 443 example.cn www.example.cn
    server {
        listen 443 ssl http2;
        server_name example.cn www.example.cn;
        root /www/wwwroot/example_typecho/;
        index index.php index.html;

        ssl_certificate "/www/wwwroot/ssl_cert/example.cn_bundle.pem";
        ssl_certificate_key "/www/wwwroot/ssl_cert/example.cn.key";

        # 全站伪静态
        # location / {
        #     try_files $uri $uri/ /index.php?$args;
        # }

        # php处理
        location ~ .*\.php(\/.*)*$ {
            try_files $uri $uri/ /index.php?$args; # 伪静态
            include fastcgi_params;
            fastcgi_index  index.php;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        # 静态资源缓存配置
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|js|css)$ {
            expires 30d;
            access_log off;
        }

        # 禁止下载的文件
        location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {
            deny all;
        }
    }

    # 泛域名 443 重定向
    server {
        listen 443 ssl http2;
        server_name *.example.cn;

        ssl_certificate "/www/wwwroot/ssl_cert/example.cn_bundle.pem";
        ssl_certificate_key "/www/wwwroot/ssl_cert/example.cn.key";

        location / {
            # 可以根据需要添加额外的配置,或者将 *.example.cn 的请求指向特定目录
            return 301 https://www.example.cn$request_uri;
        }
    }

3.重启Nginx

nginx -t -c /etc/nginx/nginx.conf
nginx -s reload
systemctl restart nginx

# 查看日志是否有错
sudo tail -f /var/log/nginx/error.log

4.注:如果网页访问失败,可以看log

sudo tail -f /var/log/nginx/error.log

三、PHP

(一)安装PHP

1.删除已有(可选)

# 删除已有(可选)
sudo dnf -y remove php php-fpm
# 删除相关扩展包
sudo dnf -y remove php*
# 重置 PHP 模块列表
sudo dnf -y module list reset php

2.查看可安装版本

sudo dnf module list php
[root@iZwz97q0bkkvyjbpvytc3mZ example_typecho]# sudo dnf module list php
Last metadata expiration check: 2:10:19 ago on Mon 22 Jan 2024 03:11:32 PM CST.
Rocky Linux 8 - AppStream
Name         Stream          Profiles                           Summary
php          7.2 [d]         common [d], devel, minimal         PHP scripting language
php          7.3             common [d], devel, minimal         PHP scripting language
php          7.4             common [d], devel, minimal         PHP scripting language
php          8.0             common [d], devel, minimal         PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

3.安装上面的8.0版本

sudo dnf -y module enable php:8.0
sudo dnf -y install php
sudo dnf -y install php php-fpm

4.安装常用PHP拓展

sudo dnf install php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-json php-readline php-mbstring php-apcu php-xml php-dom

sudo dnf -y install php-devel

(二)修改php-fpm配置

1.修改配置文件

为了让文件权限和php-fpmnginx权限统一

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

把user = apache和group = apache 改成 nginx

# 把user = apache和group = apache 改成 nginx
user = nginx
group = nginx

# 把listen改成127.0.0.1:9000 
listen = 127.0.0.1:9000

2.重新启动 PHP-FPM

# 启动php-fpm 访问
systemctl restart php-fpm

3.查看PHP-FPM监听地址

cat /etc/php-fpm.d/www.conf | grep "listen ="
输出:listen = /run/php-fpm/www.sock
或   listen = 127.0.0.1:9000

根据监听地址修改Nginx的配置:

fastcgi_pass  unix:/var/run/php-fpm/www.sock;
fastcgi_pass  127.0.0.1:9000;

四、MySQL(MariaDB)

(一)安装 MySQL(MariaDB):

  1. 打开终端并使用 sudo 权限执行以下命令:

    sudo dnf install mariadb-server
    sudo systemctl enable mariadb
    sudo systemctl start mariadb
    sudo systemctl status mariadb
    # 或
    sudo dnf install mysql-server
    sudo systemctl enable mysqld
    sudo systemctl start mysqld
    sudo systemctl status mysqld
  2. 初始化配置:

    sudo mysql_secure_installation

(二)创建用户与数据库

创建example_typecho用户,并创建允许该用户修改的example_typecho数据库

mysql -u root -p

CREATE DATABASE example_typecho;
CREATE USER 'example_typecho'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON example_typecho.* TO 'example_typecho'@'%';


EXIT;

五、Typecho

Ubuntu系列:ubuntu手动搭建typecho博客(包括404解决、菜单高亮)以及 Nginx使用stream模块分流实现端口复用_stream 端口复用-CSDN博客

开启了SSL后需要在typecho根目录下,编辑config.inc.php文件,加上这句代码:

define('__TYPECHO_SECURE__',true);

然后Nginx开启伪静态,在设置开启链接重新功能

六、phpMyAdmin

如何在Rocky Linux上安装和使用phpMyAdmin(真正程序员是不使用服务器运维面板的) - 桑鸟网 (sangniao.com)

注意:

对于 Rocky Linux,PHPMyAdmin 软件包尚未在操作系统软件仓库中提供,因此我们需要从 PHPMyAdmin 官方网站下载,在撰写本文时,我们使用的是最新的稳定版(5.2.0)。

www.phpmyadmin.net/downloads/. 您可以使用以下命令直接将文件下载到/tmp目录中。

sudo wget -P /tmp https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

现在从/tmp目录下解压下载的 tar.gz 文件。

cd /tmp
sudo tar -xvf phpMyAdmin-latest-all-languages.tar.gz

现在应将解压缩后的phpMyAdmin-5.2.1-all-languages目录重命名并移至/usr/share/phpmyadmin

sudo mv phpMyAdmin-5.2.1-all-languages /usr/share/phpmyadmin

注意:

为了让 PHPMyAdmin 能够识别该文件,我们现在需要为其创建一个自定义配置文件。默认情况下,PHPMyAdmin 没有配置文件。

phpMyAdmin 的示例配置文件位于 phpMyAdmin 目录中。它位于 /usr/share/phpmyadmin 目录中。重命名文件是可能的,但最好保留一份原始副本的备份,以防出现任何问题,然后可以简单地恢复或重新创建。可以使用以下命令将样本内容复制到新的主配置中。

cd /usr/share/phpmyadmin
sudo cp config.sample.inc.php config.inc.php

注意

作为config.inc.php文件的一部分,我们需要生成一个 32 位秘密字符串,以便为 Blowfish Cipher Chain 赋值。我们需要在编辑文件前生成该值。以下命令将为我们生成密钥:openssl rand。该程序将使用加密安全伪随机数生成器 (CSPRNG) 生成随机字节。

openssl rand -base64 32

输出: HI5pF3ZRaYSlKp3/S3lDmreVBH97V4LhdMPywrZreo4=

现在,打开config.inc.php,在配置文件中输入blowfish_secret字符串和临时目录路径。其余的默认设置对大多数情况下都没有问题。如果你需要调整更多,可以根据自己的要求来做。

sudo nano /usr/share/phpmyadmin/config.inc.php

注意

您需要将上述生成的密钥添加到配置文件的以下一行。请不要使用我生成的密钥,它只是一个示例。您还应在从服务器保存/加载文件的目录部分添加TempDir路径。

$cfg['blowfish_secret'] = ''; // 您必须填写此信息以进行 cookie 验证!
$cfg['TempDir'] = '/tmp';

注意:

如果未声明上述临时目录,可能会导致错误并阻止访问 phpMyAdmin。

sudo mkdir /usr/share/phpmyadmin/tmp
sudo chown -R nginx:nginx /www/wwwroot
sudo chmod -R 775 /usr/share/phpmyadmin

在Ngnix添加配置:

nano /etc/nginx/nginx.conf
    # phpMyAdmin
    server {
        listen 888;
        server_name phpMyAdmin;
        root /usr/share/phpmyadmin/;
        index index.php;
        
        location ~ .*\.php(\/.*)*$ {
            root           /usr/share/phpmyadmin/;
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
nginx -t -c /etc/nginx/nginx.conf
nginx -s reload
systemctl restart nginx
分类: PHPLinux 标签: PHPLNMPRocky LinuxLinux

评论

暂无评论数据

暂无评论数据

目录