05网站服务及负载均衡

1. 网站服务

1. 基础知识

1. 常见的网站服务软件
  • 静态资源服务
    • Apache
    • Nginx:http://nginx.org/
  • 动态资源服务
    • PHP: https://www.php.net/ 终端浏览器进行访问
    • Tomcat:利用移动端查看网页
    • Python:开发难度较低
2. Nginx 服务特点
  • 支持高并发,消耗内存资源少
  • 具有多种功能
    • 网站web服务功能 — apache
    • 网站负载均衡功能 — LVS
    • 网站缓存服务 — Squid
  • 在多种系统平台都可以进行部署
  • nginx实现网络通讯时使用的时异步网络IO模型: epoll 模型(apache -- select模型)

2. nginx 软件安装部署过程

1. yum 方式进行安装
  • 配置官方yum
    http://nginx.org/en/linux_packages.html#RHEL-CentOS
  • yum install -y nginx
2. 源码安装
  • 请移步到 LNMP 搭建
    https://blog.csdn.net/weixin_54898062/article/details/114276163

3. 查看官方版 nginx 的目录结构

  • nginx 日志文件定时切割处理

    vim /etc/logrotate.conf
    ---------------------------------------------------
    weekly                        # 定义默认日志切割的周期
    rotate 4				    # 定义只保留几个切割文件
    create					    # 创建出一个相同的源文件
    dateext                       # 定义角标(扩展名称信息)
    include /etc/logrotate.d	  # 加载包含 /etc/logrotate.d 目录中的的配置文件
    /var/log/wtmp {				 # 单独对某个文件进行切割
        monthly                    
        create 0664 root utmp
    	minsize 1M                # 最小大小为 1M,小于不切割
        rotate 1
    }
    ---------------------------------------------------
    
  • 主配置文件

    vim /etc/nginx/nginx.conf
    ---------------------------------------------------
    	## 第一个部分: 配置文件主区域配置
    	user  www;               	                 # 定义worker进程管理的用户
        worker_processes  2;                          # 定义有几个worker进程  == CPU核数 / 核数的2倍
        error_log  /var/log/nginx/error.log warn;     # 定义错误日志路径信息
        pid        /var/run/nginx.pid;                # 定义pid文件路径信息
    	
    	## 第二个部分: 配置文件事件区域
    	
        events {                    
            worker_connections  1024;                 # 一个worker进程可以同时接收1024访问请求
        }
    	
    	## 第三个部分: 配置http区域
        http {
            include       /etc/nginx/mime.types;      # 加载一个配置文件
            default_type  application/octet-stream;   # 指定默认识别文件类型
            log_format  gx  '$remote_addr - $remote_user [$time_local] "$request" '
                                '$status $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
    		                  						       # 定义日志的格式		
            access_log  /var/log/nginx/access.log  gx;        # 指定日志路径        
    		                    
            sendfile        on;   					# ???
            tcp_nopush     on;  				    # ???
            keepalive_timeout  65;   				# 超时时间
            #gzip  on;
            include /etc/nginx/conf.d/*.conf;        # 加载一个配置文件
        }
    ---------------------------------------------------
    ## 补充: nginx的进程
    #	master process:  主进程		--- 管理服务是否能够正常运行    老板
    #	worker process:  工作进程	    --- 处理用户的访问请求         员工  
    
  • 扩展配置文件【虚拟主机配置文件】

    vim /etc/nginx/nginx.d/default
    ---------------------------------------------------
    	## 第四个部分: server区域信息(配置一个网站 www/bbs/blog -- 一个虚拟主机)
    	server {
            listen       8080;                # 指定监听的端口
            server_name  www.oldboy.com;      # 指定网站域名                     
            root   /usr/share/nginx/html;     # 定义站点目录的位置
            index  index.html index.htm;      # 定义首页文件
            error_page   500 502 503 504  /50x.html;   # 优雅显示页面信息
            location = /50x.html {
                root   /usr/share/nginx/html;
            }
        }
    ---------------------------------------------------
    
  • 日志文件

    cd /var/log/nginx
    
  • 命令文件

    /usr/sbin/nginx
    
  • 站点目录

    cd /usr/share/nginx/html
    

4. nginx 服务的企业应用

  • 详情在LNMP搭建,这里仅做总结
    https://blog.csdn.net/weixin_54898062/article/details/114276163

  • 总结一:限制特定 IP 被访问

    只需要将 listen 80; 改为 listen 172.16.1.133:80; 即可
    
  • 总结二:location 和花括号之间代表着什么

    形如 location /gx {
    	root /usr/share/nginx/html;
    }
    这样的,当在浏览器输入 www.gx.com:80/ 时,浏览器就要找到包含 / 的 location,若找不到就返回 404。
    当在浏览器输入 www.gx.com:80/gx 时,浏览器就要找到包含 /gx 的 location,然后再根据 root 后的目录路径进行拼接,如上则是 /usr/share/nginx/html/gx/ ,默认找 index.html 文件,若找不到则返回 404。
    
  • 总结三: index 的含义

    index index.html index.htm; # 这段的含义是若不指定具体网页,则加载目录下 index.html 或 index.htm 文件
    
  • 总结四: 用户认证注意事项

    1. 密码文件设置时
    `htpasswd` -cb /etc/nginx/.htpasswd gx 123456
    加 -b 参数可以免交互
    2. 修改密码文件的权限(600)时,要将属主改为 work 进程的用户
    
  • 总结五:网站文件共享服务器

    location / {
    	autoindex on;
    }
    # 将 index.html 文件删除
    # 如果要下载 .txt 文件,需要更改 mime.types 文件【/etc/nginx/mime.types】,文件中有的扩展名信息资源,进行访问时会直接看到数据信息,没有的直接下载。
    
  • 总结六:网站中文乱码

    charset utf-8;
    
  • 总结七:别名功能的作用

    01. 编写网站访问测试
    02. 定位要方位的网站服务器
    
  • 总结八:状态模块进行监控

    vim /etc/nginx/conf.d/state.conf 
    ---------------------------------------------------
    server {
    	listen 80;
    	server_name state.code.com;
    		stub_status;
    }
    ---------------------------------------------------
    Active connections:   # 激活的连接数信息
    accepts				 # 接收的连接数总和
    handled				 # 处理的连接数总和
    requests			 # 总计的请求数量
    Reading: 			 # Nginx 服务读取请求报文的数量
    Writing:  			 # Nginx 服务响应报文信息数量
    Waiting:  			 # Nginx 队列机制,等待处理的报文数量
    
  • 总结九:Nginx 日志功能的补充

    01. 日志格式的补充
    $http_referer # 记录调用网站资源的连接地址信息
    $body_bytes_sent # 显示响应的数据尺寸信息
    $http_x_forwarded_for # 真实的客户端IP地址
    

2. 负载均衡反向代理

1. 基础知识

1. 什么是集群
  • 完成相同任务或工作的一组服务器
2. 什么是负载均衡
  • 实现用户访问请求进行调度分配
  • 实现用户访问压力分担
3. 什么是反向代理
  • 用户外网无法直接访问公司内网的 web 服务器,然后就由代理服务器的外网网卡与用户连接,内网网卡与web服务器连接。当用户访问时,用户会认为代理服务器就是web服务器,此时用户为客户端,代理服务器为服务端。代理服务器将用户请求的指令分发给web服务器,此时代理服务器为客户端,web服务器为服务端。
  • 正向代理:内网向外网进行访问,也不能进行直接访问,也需要代理服务器,内网通过代理服务器访问外网的过程就是,正向代理。

2. 负载均衡部署

1. 环境准备
  • web01 上的图片资料等数据同步到存储服务器

    ## 1. 在 web 服务器上上传一张图片,然后查看图片的存放路径
    http://blog.codefun.com/wp-content  /uploads/2021/05/2.jpg
     # uploads 路径即为要备份的路径
    ## 2. 配置存储服务器上的配置文件
    vim /etc/exports
    ------------------------------------------------------------
    /web 172.16.1.0/24(rw,sync,anonuid=996,anongid=994) 
    -------------------------------------------------------------
    ## 3. 建立共享目录
    ## 4. 同步文件的属组和属主
    ## 5. 在 web 服务器进行挂载
    
  • 进行数据库的迁移

    ## 1. 新建数据库服务器
    ## 2. 备份 web 服务器中数据库的全部内容
    mysqldump -uroot -pmysql --all-database > /tmp/web.sql
    ## 3. 将备份的数据传到数据库服务器,并在数据库服务器上导入备份的数据
    ## 4. 进入数据库服务的数据库软件,授权并优化数据库用户
    `delete` from mysql.user where user="" and host="localhost";
    `delete` from mysql.user where user="" and host="web01";
    `grant` all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123';
    `flush` privileges;
    ## 5. 修改 web 服务器上绑定的数据库服务的文件(这里以 wordpress 为例)
    vim /web/wordpress/wb-config.php
    -------------------------------------------------------------------
    // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
    /** WordPress数据库的名称 */
    define( 'DB_NAME', 'wordpress' );
    /** MySQL数据库用户名 */
    define( 'DB_USER', 'wordpress' );
    /** MySQL数据库密码 */
    define( 'DB_PASSWORD', 'wordpress' );
    /** MySQL主机 */
    define( 'DB_HOST', '172.16.1.136' );
    /** 创建数据表时默认的文字编码 */
    define( 'DB_CHARSET', 'utf8mb4' );
    /** 数据库整理类型。如不确定请勿更改 */
    define( 'DB_COLLATE', '' );
    -------------------------------------------------------------------
    ## 6. 关闭 web 服务器上的数据库软件,并测试是数据库迁移是否成功
    
  • 克隆 web 服务器并重复上述操作

2. 部署负载均衡服务器
  • 克隆模板主机并安装 nginx

  • 配置扩展站点配置文件

     pwd
    /etc/nginx/conf.d
    cat lb.conf
    --------------------------------------------------------------------------
    upstream codefun {
    	server 192.168.80.132:80;
    	server 192.168.80.134:80;
    	server 192.168.80.135:80;
    }
    server {
            listen       80;
            server_name  blog.codefun.com;
            location / {
               proxy_pass http://codefun/;
               proxy_set_header HOST $host;
            }
        }
    ---------------------------------------------------------------------------
    
  • 检查是否成功

3. 负载均衡的高级应用
  • 实现不同的调度功能

    ## 1. 权重分配
    upstream codefun {
    	server 192.168.80.132:80 weight=3;
    	server 192.168.80.134:80 weight=2;
    	server 192.168.80.135:80 weight=1;
    }
    
    ## 2. 轮询分配 --- 平均分配
    	# 默认设置
    
    ## 3. 设置热备份功能
    upstream codefun {
    	server 192.168.80.132:80 ;
    	server 192.168.80.134:80 ;
    	server 192.168.80.135:80 backup;
    }
    
    ## 4. 定义最大失败次数
    upstream codefun {
    	server 192.168.80.132:80 max_fails=5;
    	#默认 1  
    }
    
    ## 5. 定义失败后重发的间隔
    upstream codefun {
    	server 192.168.80.132:80 fail_time=10s;
    	#默认 1  
    }
    
  • 实现不同的调度算法

    upstream codefun {
    	rr;         ## 1. 轮询调度算法
    	wrr;        ## 2. 权重调度算法
    	ip_hash;    ## 3. 哈希算法,跟据用户的IP地址范围进行计算(出现反复登录的时候启用)
    	least_conn; ## 4.根据服务器连接数分配资源
    	server 192.168.80.132:80;
    }
    
  • 访问不同的网站地址,不能显示不同的网站页面

    server {
            listen       80;
            server_name  blog.codefun.com;
            location / {
               proxy_pass http://codefun/;
    ##           proxy_set_header HOST $host;
            }
        }
    
  • 访问网站用户地址信息无法进行分析统计

    proxy_set_header X-Forwarded-For $remote_addr;
    
  • 访问负载均衡会出现错误页面,影响用户体验(部分web服务器上网页缺失问题)

    proxy_next_upstream error timeout http_404 http_502;
    
4. 实现网站的动态分离
  • 优点

    • 提高网站的服务安全性
    • 管理操作工作简化
    • 可以划分不同人员管理不同的集群服务
  • 架构环境规划

    集群名字作用管理的IP目录结构
    default网站首页172.16.1.132/web/webcolony
    static静态网页172.16.1.134/web/webcolony/static/
    upload上传网页172.16.1.135/web/webcolony/upload/
  • 部署负载均衡

    cat webcolony.conf 
    --------------------------------------------------
    upstream default {
    	server 172.16.1.132:80;
    }
    upstream static {
    	server 192.168.80.134:80;
    }
    upstream upload {
    	server 172.16.1.135:80;
    }
    server {
            listen       80;
            server_name  www.webcolony.com;
            location / {
             	proxy_pass http://default;
             	proxy_set_header HOST $host;
    	   	proxy_set_header X-Forwarded-For $remote_addr;
    	  	proxy_next_upstream error timeout http_404 http_502;
            }
    	location /static {
    		proxy_pass http://static;
    		proxy_set_header HOST $host;
    		proxy_set_header X-Forwarded-For $remote_addr;
    		proxy_next_upstream error timeout http_404;	
    	}
    	location /upload {
    		proxy_pass http://upload;
    		proxy_set_header HOST $host;
    		proxy_set_header X-Forwarded-For $remote_addr;
    		proxy_next_upstream error timeout http_404;
    	}
    }
    --------------------------------------------------
    
  • 部署 web 服务器

    ## web03 服务器
    mkdir -p /web/webcolony/upload
    echo "upload" > /web/webcolony/upload/index.html
    
    ## web02 服务器
    mkdir -p /web/webcolony/static
    echo "static" > /web/webcolony/static/index.html
    
    ## web01 服务器
    mkdir -p /web/webcolony/
    echo "default" > /web/webcolony/index.html
    
    ## 编写 webcolony.conf 文件[内容都相同]
    cat /etc/nginx/conf.d/webcolony.conf 
    --------------------------------------------------
    server {
    	listen 80;
    	server_name www.webcolony.com;
    	root /web/webcolony/;
    	index index.html;
    }
    --------------------------------------------------
    
5. 根据用户访问的终端信息显示不同的页面
  • 操作步骤和上面差不多,这里仅说明怎么配置

    vim /etc/nginx/conf.d/diffbrowser.conf
    --------------------------------------------------
    upstream web {
           server 10.0.0.8:80;
        }
        upstream mobile {
           server 10.0.0.7:80;
        }
        upstream default {
           server 10.0.0.9:80;
        }
        
    server {
            listen       80;
            server_name  www.oldboy.com;
            location / {
    ##           if ($http_user_agent ~* iphone) {
                  proxy_pass http://mobile;
                  proxy_set_header Host $host;
               }
               if ($http_user_agent ~* Chrome) {
                 proxy_pass  http://web;
    			 proxy_set_header Host $host;
    		  }
               proxy_pass http://default;
               proxy_set_header Host $host;
            }
        }
    --------------------------------------------------
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值