3

MonkeyEye(猿眼售票系统)项目地址:
https://github.com/SYSUMonkeyEye/MonkeyEye-FE

以下是我们项目的部署图:

部署图

可以从上图看到,其中后台有4台静态文件(Web APP)服务器,2台API服务器,MySQL服务器(储存电影和用户相关信息)和Redis服务器(储存Session和短信验证码)。

本人负责Nginx服务器的反向代理配置,将请求分发至对应的服务器,并实现多台服务器的负载均衡。以下为Nginx的基本配置信息(详细解释请看对应注释):

user root;

# 工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。
worker_processes 4;

pid /run/nginx.pid;

events {
    # 每个工作进程的最大连接数量。根据硬件调整,和前面工作进程配合起来用。
    # 每个进程允许的最多连接数,理论上每台Nginx服务器的最大连接数为worker_processes * worker_connections。
    worker_connections 768;
}

http {

    ##
    # Basic Settings
    ##

    # 通过IP哈希的方式将请求分配至相应的服务器
    upstream static {
        ip_hash;
        server 118.89.35.155:8080 max_fails=3 fail_timeout=1000;
        server 127.0.0.1:5001 max_fails=3 fail_timeout=1000;
    }
  
    # 通过指定权重的方式将请求分配至相应的服务器
    upstream backend {
        server 127.0.0.1:5000 weight=2 max_fails=3 fail_timeout=1000;
        server 123.207.233.226:1234 weight=1 max_fails=3 fail_timeout=1000;
        server 119.29.238.202:5000 weight=1 max_fails=3 fail_timeout=1000;
        server 118.89.44.14:5000 weight=1 max_fails=3 fail_timeout=1000;
    }

    server {
        # 配置监听端口。
        listen 8080;
        
        # 配置访问域名。
        server_name localhost;
        
        # 查看Nginx服务器状态。
        location /nginx_status {
            stub_status on;
            access_log off;
            # 加入访问限制。
            allow 120.236.174.171;
            deny all;
        }
        
        # 配置静态文件(用户头像和电影海报)代理
        location ^~ /static/images {
            root /root/Desktop/MonkeyEye-Server/Flask-Server/app;
            expires max;
        }

        location ^~ /api/users {
            proxy_pass http://127.0.0.1:5000/api/users;

            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 传递HTTP头部Set-Cookie字段。
            proxy_pass_header Set-Cookie;

            # 禁止缓存。
            proxy_buffering off;
        }

        location ^~ /api/ {
            # 请求转向backend定义的服务器列表,即反向代理,对应upstream负载均衡器,也可以proxy_pass http://ip:port。
            proxy_pass http://backend/api/;

            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass_header Set-Cookie;

            proxy_buffering off;
        }

        location / {
            proxy_pass http://static;

            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_redirect off;
            # 缓冲区代理缓冲用户端请求的最大字节数。
            client_body_buffer_size 128k;
            # 设置代理服务器(Nginx)从后端服务器读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点。
            proxy_buffer_size 4k;
            # proxy_buffers缓冲区,Nginx针对单个连接缓存来自后端服务器的响应。
            proxy_buffers 4 128k;
            # 当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系。大于这个值,将从upstream服务器传回。
            proxy_temp_file_write_size 256m;
        }
    }

    # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    # 长连接超时时间,单位是秒。
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##
    # 日志存放路径。
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;


    ##
    # Gzip Settings
    ##
    # 开启gzip压缩输出,减少网络传输。
    gzip on;
    gzip_disable "msie6";

    # gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)。
    gzip_comp_level 6;
    # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    # 匹配mime类型进行压缩。
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png image/jpg;
}

Kris
89 声望2 粉丝

在前端的路上渐行渐远……