WEB集群搭建下载站与动态网站架构

WEB集群搭建下载站与动态网站架构

1.一个高清视频下载站

1.1.搭建要求

名字: 一个高清视频下载站。

网站初衷: 做1个人人看得起的大片网站。

目录结构(目标)

image

要求:
1.浏览器打开后,显示目录结构(如上图)。
2.增加svip功能。
3.增加统计功能,统计nginx服务的状态,访问情况

1.2.下载站基本要求

  • 域名:v.oldboylinux.cn
  • 站点目录: /app/code/v/
  • touch 几个文件即可
  • 自动索引功能(列表站点目录的内容),首页文件不存在.
  • autoindex模块

image

[root@myvps ~]# cat /etc/nginx/conf.d/v.oldboy.linux.cn.conf 
server {
  listen 80;
  server_name v.oldboylinux.cn;
  root /app/code/v;

  error_log /var/log/nginx/v.oldboylinux.cn-error.log notice;
  access_log /var/log/nginx/v.oldboylinux.cn-access.log main;
  
  autoindex on; 
  autoindex_localtime on;
  autoindex_exact_size off;
  charset utf8;
  location /{
  index index.html;
  }
  location /svip/ {
    auth_basic "请输入密码:";
    auth_basic_user_file /etc/nginx/user;
  }
  location /status {
    stub_status;
  }
}

image

1.3增加vip认证功能

  • 增加一个svip目录,里面创建文件.
  • 增加认证功能(用户名和密码).
  • auth_basic模块
auth_basic    "请输入密码:";     		     #输出提示,根据不同浏览器,可能不显示.
auth_basic_user_file conf/htpasswd;     	 #指定用户名,密码文件
  • 要求:

    • 只要用户访问的路径中包含vip资源,提示输入密码
  • 创建密码文件:

yum install -y httpd-tools
#创建文件
htpasswd  -bc /etc/nginx/user   lidao996  1
#增加用户
htpasswd  -b /etc/nginx/user   oldboy  1
#修改权限
chmod 600 /etc/nginx/user
chown nginx.nginx /etc/nginx/user
  • 符合要求的配置
[root@myvps ~]# cat /etc/nginx/conf.d/v.oldboy.linux.cn.conf 
server {
  listen 80;
  server_name v.oldboylinux.cn;
  root /app/code/v;

  error_log /var/log/nginx/v.oldboylinux.cn-error.log notice;
  access_log /var/log/nginx/v.oldboylinux.cn-access.log main;
  
  autoindex on; 
  autoindex_localtime on;
  autoindex_exact_size off;
  charset utf8;
  location /{
  index index.html;
  }
  location /svip/ {
    auth_basic "请输入密码:";
    auth_basic_user_file /etc/nginx/user;
  }
  location /status {
    stub_status;
  }
}

1.4.增加统计功能

  • 显示ngx当前状态(显示ngx状态信息),未来用于监控ngx

  • 熟练使用状态模块.

  • stub_status模块/指令,显示nginx服务的状态,用户访问的状态.

location /status {
    stub_status;
  }
Active connections: 2 
server accepts handled requests
 18 18 48 
Reading: 0 Writing: 1 Waiting: 1 

ngx模块是众多ngx指令的集合

image

# 并发50,10万请求   测试
ab -n 100000 -c 50 -H Host:v.oldboylinux.cn http://10.0.0.200/

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

开发书写了一个php代码发给我们部署下。

1.测试能否直接部署到nginx中?

2.需要什么服务,是什么原理?

3.准备服务并测试。

4.部署代码。

2.1.概述

image

  • 如何区分静态资源和动态资源
    • 通过url简单/初步判断,网站的类型
    • url中包含&或?一般都是动态网站.

2.2.常见动态网站的架构

  • PHP: LNMP(LEMP), LAMP, WNMP/WAMP (P→PHP, W→Windows, A→Apache)

  • Java: LNMT(Tomcat,Jetty,Weblogic,Jboss)

  • Python: LNMP(Python,uwsgi)

  • Golang: LNMG(Golang)

  • C/C++: LNM?........

LNM?

Nginx Web服务 Engine X

MySQL/MariaDB 数据库

LAMP A ===> apache 目前很少使用.

WNMP/WAMP W === >Windows 一般开发使用

2.3.LNMP架构细节

LNMP原理

  • Nginx处理动态请求与静态请求流程概述。

image

  • LNMP处理动态请求流程概述

image

3.LNMP

image

1.数据库

  • db01数据库服务器, 10.0.0.51/172.16.1.51
  • mariadb
yum install -y mariadb-server  
#mariadb-server 服务端
#mariadb 客户端
systemctl enable mariadb
systemctl start mariadb
#检查
ss -lntup |grep mysql 
ps -ef |grep mysql
  • 数据库安全配置(SQL语句实现,现在他通过脚本命令实现)
mysql_secure_installation  #仅仅刚安装的时候运行.仅首次
运行即可.
用于设置root密码,清理用户和清理临时库
Enter current password for root (enter for none):回
车

Set root password? [Y/n] Y设置密码
New password: 输入密码
Re-enter new password: 再次输入

Password updated successfully!
Reloading privilege tablesՎʡ
  ... Success!
  
Remove anonymous users? [Y/n] Y 删除数据库中的匿名用
户(没有用户名的用户,容易导致安全问题)

Disallow root login remotely? [Y/n] Y 是否禁止root远
程登录

Remove test database and access to it? [Y/n] Y 是否删
除test测试用的数据库

Reload privilege tables now? [Y/n] Y 是否更新权限信息
表

Linux系统的root与数据库的root

  1. 2个独立的用户.

  2. Linux的root用户用于进入和管理整个Linux系统.

  3. 数据库的root用户仅仅用于管理MySQL数据库.

  • 进入数据库
mysql -uroot -p1

数据库基本概念: 库,表,字段,记录 知晓所属关系即可.

库:database, 相当于是1个excel文件

表:table, 相当于是1个excel文件的1个sheet(表格)

字段: 列 某列的名字,字段名字

记录: 行,某个人的数据.

库:image

表:

image

image

字段:

  • 查看
查看系统所有的数据库.(熟练)
show databases;

查看库里的表(了解)
show tables from mysql;

显示mysql库的user表的user列和host列 (列==字段),查看数据库的
用户信息. (熟练)
select 字段1,字段2 from 库.表;
select user,host  from mysql.user;
  • 创建
创建数据库(熟练)
create database lidao;

创建用户(会用,会改) 未来通过用户管理数据库.
#创建用户,进行授权
grant all       on lidao.*   to 'lidao'@'localhost'  identified by  '1';
grant all       on lidao.*   to 'lidao'@'172.16.1.%' identified by '1';

grant 所有权限   on 数据库.* to  '用户名'@'白名单'

数据库白名单说明:

白名单表示用户可以从哪里进行登录与使用数据库.

一般localhost表示只能在数据库本地使用.

可以通过172.16.1.% 进行授权局域网访问. 其他局域网机器可以访问数据库.

只给个%表示所有人可以访问(不安全). %不包含localhost.

  • 删除(极其危险)
删除数据库
drop database lidao;

删除用户
drop user 'lidao'@'172.16.1.%' ;
drop user 'lidao'@'localhost' ;
  • wordpress 库

  • wordperss 库 密码1

  • 测试

#测试本地连接
mysql -uwordpress -p1
#测试远程连接
mysql -uwordpress -p1  -h 172.16.1.51

程序代码连接数据库:连接数据的配置文件

2.php

https://php.watch/versions 官网下载

生产环境选择,根据开发书写代码环境准备即可

php 7.x

# 仅供参考
/etc/yum.repos.d/php.repo
[webtatic-php]
name = php Repository
baseurl = http:Վˌuseast.repo.webtatic.com/yum/el7/x86_64
enabled = 1
gpgcheck = 0

yum isntall -y php72w php72w-cli php72w-common 
php72w-devel php72w-embedded php72w-gd php72w-mcrypt 
php72w-mbstring php72w-pdo php72w-xml php72w-fpm 
php72w-mysqlnd php72w-opcache php72w-pecl-memcached 
php72w-pecl-redis php72w-pecl-mongodb
# 仅供参考
  • 启动服务nginx,php-fpm
systemctl enable nginx php-fpm
systemctl start nginx php-fpm
  • 检查端口与进程
ss -lntup |grep php
ps -ef |grep php

php用户与nginx统一: 统一为nginx

  • 统一nginx与php用户,需要修改php配置文件
egrep -n '^user|^group' /etc/php-fpm/www.conf
8:user = ngx
10:group = nginx

3.nginx

ngx配置文件
站点目录

server {
 listen 80;
 server_name blog.oldboylinux.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;
 }
}

4.部署代码与设置权限

  • 下载,解压,部署代码
  • 页面安装

image

image

image

image

5.排错与调试

  • 测试ngx静态页面
cat /app/code/kodexp/info.php
<?php
phpinfo();
?>

image

  • 测试php+mysq
<?php
//数据库地址
$db_host='10.0.0.51';
//数据库用户名
$db_user='wordpress';
$db_pass='1';
$link_id=mysqli_connect($db_host,$db_user,$db_pass);
if($link_id){
  echo "mysql successful by oldboy lidao996!\n";
}else{
  echo "connection failed!\n";
}
?>

image

4.常见故障

权限问题

image

数据库连接问题

image

总结

image

posted @ 2026-09-22 10:13  殇ベ墨~  阅读(10)  评论(0)    收藏  举报