nginx, Reverse Proxy & Request Limit
Thomas
- webserver
Hallo,
ich habe mit meinem Server (Debian Squeeze, nginx 1.0.5) ein kleines Problem.
Die ankommenden Requests werden mittels nginx zu einer Applikation auf dem Server, für die weitere Bearbeitung, weitergeleitet.
Hier der Auszug aus der nginx.conf:
worker_processes 3;
worker_rlimit_nofile 50000;
timer_resolution 1000ms;
pid /var/run/nginx.pid;
events {
worker_connections 20000;
multi_accept on;
}
...
server {
listen 80;
server_name meine.seite;
charset utf-8;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host 127.0.0.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
client_max_body_size 256k;
client_body_buffer_size 256k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
}
}
Doch es kommt nur (grob geschätzt) jeder zehnte Request wirklich ans Ziel (pro Minute kommen etwa 10000 Anfragen). Die Restlichen bekommen ein "Connection timed out".
Die nginx error.log wird geflutet mit:
connect() failed (110: Connection timed out) while connecting to upstream, client:
Ich weiß nicht woran es liegen kann. Habe schon den Wert fs.file-max in der /etc/sysctl.conf und ulimit -n erhöht. Sonst habe ich keine weiteren Ideen. Greife ich auf 127.0.0.1:8000 zu gibt es keine Probleme, die Anwendung arbeitet. Gibt es irgendwie ein Limit, welches ich noch nicht entdeckt habe?
MFG
Thomas
Hi,
Die ankommenden Requests werden mittels nginx zu einer Applikation auf dem Server, für die weitere Bearbeitung, weitergeleitet.
Doch es kommt nur (grob geschätzt) jeder zehnte Request wirklich ans Ziel (pro Minute kommen etwa 10000 Anfragen). Die Restlichen bekommen ein "Connection timed out".
Die nginx error.log wird geflutet mit:
connect() failed (110: Connection timed out) while connecting to upstream, client:
Ich weiß nicht woran es liegen kann.
Kommt deine Applikation, an die du das ganze weiterleitest, mit dieser Anzahl/Frequenz an hereinkommenden Anfragen klar?
“while connecting to upstream” klingt für mich so, also wäre das die problematische Stelle - dein nginx-Webserver kommt mit den hereinkommenden Anfragen zwar durchaus noch klar, aber die Stelle, an die er sie weitergeben will, antwortet nicht rechtzeitig …
MfG ChrisB
Ich denke mal schon das die Anwendung damit klar kommt. Ist eine C++ App, die einen Socket öffnet und die Requests akzeptiert. Das listen() Limit ist hoch genug angesetzt, dennoch werden nur etwa 1000 Anfragen/Minute abgearbeitet. Wenn die Listen-Qeue voll wäre, würde ein Connection Refused kommen, kommt aber nicht. Auch mit fsockopen (php) bekomme ich hin und wieder ein Timeout, wenn ich eine Verbindung herstellen möchte.