第十一篇:下载网站与动态网站架构

视频下载网站⭐⭐⭐⭐⭐

  • 网站名:视频下载网站
  • 域名:video.download.cn
  • 站点目录:/app/code/vide/
  • 需求:
    • 浏览器打开后,显示站点目录结构
    • 增加svip认证功能
    • 增加统计功能(统计nginx服务的访问等状态)

  autoindex模块⭐⭐

  • 自动索引功能(列表站点目录的内容),首页文件不存在
autoindex模块 说明
autoindex on; 开启目录索引功能(显示站点目录下文件的列表,要求首页文件不存在)
autoindex_localtime on; 显示本地时间
autoindex_exact_size off; 是否显示精确的文件大小(off 表示以人类可读形式显示文件大小)
复制代码
server{
  listen 80;
  server_name video.download.cn;
  charset utf-8;    # 字符编码使用utf-8
  root /app/code/video/;
  error_log /var/log/nginx/video.download.cn-error.log;
  access_log /var/log/nginx/video.download.cn-access.log;

  autoindex on;    # 开启目录索引列表功能
  autoindex_localtime on;    # 显示本地时间
  autoindex_exact_size off;    # 显示精确的文件大小

  location / {
    index index.html;
  }
}
复制代码

  增加svip认证功能⭐⭐⭐⭐⭐

auth_basic模块 说明
auth_basic  "提示内容"; 输出提示信息
auth_basic_user_file conf/htpasswd; 指定用户名、密码文件
  • 只要用户访问包含svip资源,提示输入密码
复制代码
# 创建密码文件并修改文件权限
    yum install -y httpd-tools
    # 创建文件
        htpasswd -bc /etc/nginx/user yuan yuan123
          -c:创建文件
          -b:命令行指定用户名和密码
    # 增加用户
        htpasswd -b /etc/nginx/user xiaojiang xiaojiang123
    # 修改权限
        chmod 600 /etc/nginx/user
        chowm nginx:nginx /etc/nginx/user 

    [root@web01 ~]# cat /etc/nginx/user 
    yuan:$apr1$yO/oVJAu$cf9PbVdvJGtbBiG/dOW2b1
    xiaojiang:$apr1$lyDEw1iG$7GFS2cnSUfS0A4ueO9Rry1

# 虚拟主机
[root@web01 /etc/nginx/conf.d]# cat video.download.cn.conf 
server{
    listen 80;
    server_name video.download.cn;
    charset utf-8;
    root /app/code/video/;
    error_log /var/log/nginx/video.download.cn-error.log;
    access_log /var/log/nginx/video.download.cn-access.log;

    autoindex on;
    autoindex_localtime on;
    autoindex_exact_size off; 

    location / {
        index index.html;
    }
    location /svip/ {
        auth_basic "input password:";
        auth_basic_user_file /etc/nginx/user;
    }
}
复制代码

  增加统计功能⭐⭐⭐⭐⭐

  • 显示ngx当前状态,未来用于监控nginx
  • stub_status模块,显示nginx服务的状态
复制代码
location /status {    # 站点目录下不需要创建/status目录
    stub_status;
}

浏览器中访问:video.download.cn/status Active connections:
4 server accepts handled requests 43 43 117 Reading: 0 Writing: 1 Waiting: 3
复制代码
stub_status模块中的指标 说明
Active connections 当前已经建立的连接数
server accepts 已经接收到的客户端的连接总数
server handled 服务端已经处理的连接数
server requests 客户端发出请求总数
Reading 正在读取的请求主体的连接数
Writing 正在进行响应的连接数
Waiting 当前Nginx中处于空闲状态的连接数
# ab压力测试功能
    ab -n 9999 -c 99 -H Host:vide.download.cn http://10.0.0.7/

  模块小结⭐⭐⭐

模块 模块中的核心指令
目录索引模块 autoindex on;
认证功能模块 auth_basic_user_file;
访问控制模块 allow,deny
状态模块 stub_status
nginx核心模块

root、location、error_log、server_name、listen

nginx日志模块 access_log、log_format

动态网站架构(部署一份开发的php代码)⭐⭐⭐⭐⭐

  动/静态网站⭐⭐

网站类型 说明 性能
静态网站

服务器上存储的HTML页面(HTML、CSS、JavasScript)

静态文件可以直接由nginx直接处理

加载速度快,维护轻松
动态网站

根据用于的请求和交互实时生成内容的网站

通常依赖于数据库和服务端脚本(PHP、Python)

加载速度受数据库和服务器处理影响,维护较复杂

  LNMP架构处理流程⭐⭐⭐⭐⭐

  数据库⭐⭐⭐

  • db01数据库服务器 10.0.0.51/1172.16.1.51(mariadb)
复制代码
# 下载rpm包
    yum install -y mariadb-server
# 启动服务
    systemctl enable mariadb
    systemctl start mariadb
# 检查
    ss -lntup |grep mysql
    ps -ef |grep mysql
# 数据库安全配置
    mysql_secure_installation
        # 设置root用户密码
        # 删除匿名用户
        # 静止root远程登录
        # 删除测试数据库
        # 重新加载权限表
# 进入数据库
    mysql -uroot -proot
# 数据库基本概念:库、表、字段、记录
    库database:相当于excel文件
    表table:相当于excel文件中的sheel(表格)
    字段:列
    记录:行
复制代码

 

# 查看系统所有的数据库
    show databases;
# 查看库里面的表
    show tables from 库名;
# 显示myql库中user表的user列和host列
    select user,host from mysql.user;

 

复制代码
# 创建数据库
    create database 数据库名;
# 创建用户
    create user 'username'@'hostname' identified by 'password';
        username:用户名
        hostname:指定用户允许哪些主机连接(localhost本地使用 或 %表示任何主机 或 172.16.1.%授权局域网访问)
# 授权用户
    grant all privileges on database_name.* to 'username'@'hostname';
        database_name:授予访问权限的数据库名
        all privileges:表示授予所有权限(可以指定特定权限select、insert、update)
# 刷新权限
    flush privileges;    # 刷新权限命令是必要的,确保权限立即生效
# 创建表
    # 在创建表前,确保使用了数据库
        use database_name;
    # create table table_name (column1 datatype constraints,column2 datatype constraints,);
        column1,column2:表中的列名
        constraints:约束条件(NOT NULL、UNIQUE、PRIMARYKEY)
复制代码

 

# 删除数据库
    drop database 数据库名;
# 删除用户
    drop user 'username'@'hostname';

 测试

复制代码
# create user 'wordpress'@'172.16.1.%' identified by 'wordpress123';
# create user 'wordpress'@'localhost' identified by 'wordpress123';
# select user,host from mysql.user; +-----------+----------------------+ | user | host | +-----------+----------------------+ | wordpress | 172.16.1.% | | wordpress | localhost | +-----------+----------------------+ # 测试 # 测试本地连接 mysql -uwordpress -pwordpress123; # 测试远程连接 mysql -uwordpress -pwordpress123 -h 172.16.1.7;
复制代码

  PHP⭐⭐⭐⭐⭐

 下载php

复制代码
# 通过yum安装php(默认安装php5.4)
    # 安装EPEL源
        yum install -y epel-release
    # 安装Remi源
        yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
        remi源是专门为Linux系统提供最新版本的PHP和Mysql包的仓库
    # 安装 yum 包管理器工具(增强yum包管理工具的实用程序集合)
        yum install -y yum-utils
    # 通过Remi指定PHP版本
        yum-config-manager --enable remi-php81
    # 安装PHP
        yum install -y php
    # 验证安装的PHP版本
        [root@web01]# php -v
          PHP 8.1.31 (cli) (built: Dec 24 2024 18:49:08) (NTS)
          Copyright (c) The PHP Group
          Zend Engine v4.1.31, Copyright (c) Zend Technologies

# 通过编译安装php
    # 安装所需要的依赖项
        yum install -y wget gcc gcc-c++ autoconf automake libtool make libxml2 libxml2-devel openssl openssl-devel sqlite-devel
    # 在官网下载对应版本的源码包
        wget https://www.php.net/distributions/php-8.1.x.tar.gz
    # 解压
        tar -zxvf php-8.1.31.tar.gz
    # 进入目录进行配置
        cd php-8.1.1
        # 配置(默认位置)
            ./configure
        # 编译安装
            make
复制代码

 下载所需的依赖

yum install -y php81 php81-cli php81-common \
php81-devel php81-embedded php81-gd php81-mbstring \
php81-pdo php81-xml php81-fpm \
php81-mysqlnd php81-opcache \
php81-pecl-memcached php81-pecl-redis php81-pecl-mongodb

 启动服务和检查端口

复制代码
# yum install -y php-fpm
# systemctl enable php-fpm
# systemctl start php-fpm

[root@web01 ~]# ss -lntup |grep php
tcp  LISTEN  0  128  127.0.0.1:9000  *:*  
users:(("php-fpm",pid=3256,fd=0),("php-fpm",pid=3255,fd=0),
("php-fpm",pid=3254,fd=0),("php-fpm",pid=3253,fd=0),
("php-fpm",pid=3252,fd=0),("php-fpm",pid=3251,fd=6))
[root@web01 ~]# ps -ef |grep php
root       3251      1  0 21:12 ?        00:00:00 php-fpm: master process (/etc/php-fpm.conf)
apache     3252   3251  0 21:12 ?        00:00:00 php-fpm: pool www
apache     3253   3251  0 21:12 ?        00:00:00 php-fpm: pool www
apache     3254   3251  0 21:12 ?        00:00:00 php-fpm: pool www
apache     3255   3251  0 21:12 ?        00:00:00 php-fpm: pool www
apache     3256   3251  0 21:12 ?        00:00:00 php-fpm: pool www
root       3325   1983  0 21:22 pts/1    00:00:00 grep --color=auto php
复制代码

 统一用户⭐⭐⭐⭐⭐

# php与nginx用户统一为:nginx
    [root@web01 ~]# egrep -n '^user|^group' /etc/php-fpm.d/www.conf
    39:user = nginx
    41:group = nginx
# 站点目录要与nginx用户统一
    chown -R nginx.nginx /app/code/blog

  Nginx配置⭐⭐⭐⭐⭐

复制代码
server{
    listen 80;
    server_name blog.wordpress.cn;
    root /app/code/blog;
    error_log /var/log/nginx/blog-error.log notice;
    access_log /var/log/nginx/blog-access.log main;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
# fastcgi_pass:指定后端PHP处理器的位置,通过fastcgi_pass将动态请求传递给php
# fastcgi_index:设置默认的索引文件(如果请求的目录没有指定文件,默认为index.php)
# fastcgi_param:定义传递给FastCGI服务器的参数
    # SCRIPT_FILENAME:一个环境变量,确定要执行脚本文件的完整路径
    # $document_root:站点目录
    # $fastcgi_script_name:URI
复制代码

  部署代码与设置权限⭐

  常见故障⭐

 权限问题

没有修改站点目录的权限:chown -R nginx.nginx /app/code/blog

注意:当需要指定到其他数据库时,需要修改配置文件wp-config.php

define('DB_NAME', 'wordpress_db');      // 数据库名
define('DB_USER', 'wordpress_user');    // 数据库用户名
define('DB_PASSWORD', 'your_password'); // 数据库密码
define('DB_HOST', 'localhost');         // 数据库主机(关键!)

 

 数据库连接问题

  LNMP排错流程⭐⭐⭐⭐

  • Linux:防火墙、selinux
  • Nginx:检查配置、处理流程检查、测试nginx
# 检查端口
    ss -lnutp |grep nginx
# 检查进程
    ps -ef |grep nginx
# 检查配置
# 测试
    站点目录下面创建test.html文件,通过curl访问
  • PHP:通过处理动态请求过程检查
# nginx是否把动态请求转发给php,php是否解析
    站点目录下面创建测试文件
      testinfo.php
        <?php
        phpinfo()
        ?>
测试完成后务必删除,否则泄露网站信息

  • MySQL:测试php+数据库
# 检查php连接数据库是否正常
    mysql -u用户 -p密码 -h 数据库的ip

 

posted @   猿小姜  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示