我在 EC2 实例上运行一个 django 应用程序,使用 nginx 作为 Web 服务器。网站每分钟会收到相当多的 API 调用,具体取决于我运行的 testpipelines 数量。我的问题是网站偶尔会超时。我无法通过浏览器访问它,当然我的所有测试都会失败。此外,我无法再登录我的实例,而必须等到它恢复正常……即使网站超时,我至少应该能够通过 ssh 进入它吗?
现在我想知道:这是 nginx 配置错误还是我的 EC2 内存不足?我正在部署到 EC2 上的 t2 微型实例,它有 1 个 vCPU,而且只有 1GB 内存。假设我收到 20-30 个 API 调用,所有调用都试图下载 10 到 50 MB 之间的文件。我需要更大的实例吗?还是 EC2 应该可以处理?
或者可能是我的 nginx 配置?现在我用的是这个(我根本不是 nginx 专家,如果设置了愚蠢的配置,请告诉我):
主要配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$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 main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
send_timeout 90;
keepalive_timeout 90;
fastcgi_read_timeout 120;
proxy_read_timeout 120;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
client_body_timeout 120;
client_body_buffer_size 128K;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
client_header_timeout 120;
client_max_body_size 5G;
types_hash_max_size 2048;
server_tokens off;
gzip on;
gzip_static on;
gzip_min_length 512;
include /etc/nginx/conf.d/*.conf;
}
以及服务器配置
server {
listen 443 ssl;
server_name mywebsite.de;
proxy_max_temp_file_size 0;
proxy_buffering off;
charset utf-8;
ssl_stapling off;
ssl_stapling_verify off;
ssl_certificate /etc/letsencrypt/live/mywebsite.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mywebsite.de/privkey.pem;
set $my_host $http_host;
if ($http_host = "mywebsite.de") {
set $my_host "mywebsite.de";
}
location / {
proxy_pass http://django:5000;
proxy_set_header Host $my_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 3600;
}
}
server {
listen 80 ;
server_name mywebsite.de;
return 301 https://mywebsite.de$request_uri;
}
server {
listen 80 ;
server_name www.mywebsite.de;
return 301 https://mywebsite.de$request_uri;
}
server {
listen 443 ;
server_name www.mywebsite.de;
return 301 https://mywebsite.de$request_uri;
ssl_stapling off;
ssl_stapling_verify off;
ssl_certificate /etc/letsencrypt/live/mywebsite.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mywebsite.de/privkey.pem;
}
也可能是其他原因,但还有什么原因会导致我的机器崩溃?也许是 Redis?我不确定。我正在寻找发生这种情况的可能原因以及可能的解决方案,以使其尽可能稳定。
非常感谢社区提供的任何帮助!提前致谢!