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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。