nginx负载均衡

Jun 02 2020

环境:ubuntu
使用框架:flask+nginx

nginx配置路径:
/etc/nginx/sites-enabled/server

主服务器配置

设置backupserver

1
2
3
4
5
upstream backupserver {
server 主服务器ip:443;
server 副服务器ip:443;
keepalive 60;
}

默认https配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 443;
server_name _;
ssl on;
ssl_certificate [pem文件路径];
ssl_certificate_key [key文件路径];
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;

location / {
include uwsgi_params;
uwsgi_pass unix:[flask sock 文件路径];
}

}

http配置(http不设置负载均衡)

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name _;

location / {
include uwsgi_params;
uwsgi_pass unix:[flask sock 文件路径];
}
}

负载均衡配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 443;
# listen [::]:443 default_server;
server_name 主服务器域名;
ssl on;
ssl_certificate [pem文件路径];
ssl_certificate_key [key文件路径];
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
client_max_body_size 5M;
location / {
proxy_pass https://backupserver;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 75;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
}
}

副服务器配置

http配置

1
2
3
4
5
server {
listen 80;
server_name 副服务器域名;
return 301 https://副服务器域名$request_uri;
}

https配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
listen 443;
server_name _;
ssl on;
ssl_certificate [pem文件路径];
ssl_certificate_key [key文件路径];
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
client_max_body_size 5M;
location / {
include uwsgi_params;
uwsgi_pass unix:[flask sock 文件路径];
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 75;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
}

# 配置无需负载均衡的api
location /api/dog_classification/recognition {
proxy_pass https://主服务器域名;
}
}

至此配置完成,只需两个服务器中的api路径相同即可进行负载均衡,如果不需要负载均衡,则需要在副服务器配置,以免出现404.