我正在使用Nginx作为RPS并且存在服务器无法处理超过~100个请求/ s的问题。如果单个IP发送了那么多请求,Nginx将为每个人提供502错误。
这就是我所拥有的。
具有此规格的专用机器
100 mbps(两个方向)。 双核CPU 5 GB内存 Windows Server 2008 R2
Apache,PHP(作为模块)& MySQL在后面的handeling动态内容。 Nginx在前面并将请求传递给Apache。
服务器上的每个页面都是动态生成和优化的,没有MySQL加载等...每页的大小都在50KB以下。
响应时间/加载时间低于0.6秒。
所以一切都很快,直到有人打开任何软件并向服务器发送请求,当请求率大约为100req / s时,它开始发送502错误。请求永远不会到达Apache。所以这不是Apache问题。
该服务器不会处理更多吗?
这是Nginx CONF的样子,
http {
include 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 K:/logs/nginx/access.log main;
sendfile off;
server_tokens off;
keepalive_timeout 65;
server_names_hash_bucket_size 64;
client_max_body_size 50m;
server {
listen 80;
server_name www.domain.com;
proxy_pass_header Server;
root K:/website/domain.com/;
index index.html index.htm index.php;
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
## send request back to Apache ##
location / {
proxy_pass http://127.0.0.1:8080;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
感谢任何帮助和建议。
答案 0 :(得分:1)
请求永远不会到达Apache。所以它不是Apache问题。
是的,这是一个Apache问题 - 很可能你已经在Apache上达到了maxclients,而且它拒绝了更多的连接。
答案 1 :(得分:1)
当上游服务器(网关)无法处理请求(及时)时,将返回502状态,因此很可能是Apache问题。
正如其他人所建议的那样,您应该仔细查看Apache本身的配置,特别是MaxRequestWorkers
(2.4)或MaxClients
(2.2)设置。
Nginx也为批量请求提供状态499。
这意味着客户端(浏览器)在发送响应之前关闭了连接;最有可能的是,这是由上游缓慢引起的,再次指向Apache。
答案 2 :(得分:0)
Windows上的Nginx尚未正式推荐用于制作:http://nginx.org/en/docs/windows.html;如果你的主机必须是Windows,那么你可以通过在VM中运行nginx来获得更好的结果。