第十一篇:下载网站与动态网站架构
视频下载网站⭐⭐⭐⭐⭐
- 网站名:视频下载网站
- 域名: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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现