Nginx和Apache是​​非常缓慢的作为反向代理NodeJs应用与socket.io

我在Ubuntu服务器14.04上安装了Nginx作为反向代理,将来自单个IP地址的stream量redirect到运行在不同端口上的多个NodeJ。 它也将HTTPredirect到HTTPS。

这里是nginx.conf的内容:

user www-data; worker_processes 4; pid /run/nginx.pid; events { worker_connections 4096; multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## # access_log /var/log/nginx/access.log; access_log off; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 256; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; ## # nginx-naxsi config ## # Uncomment it if you installed nginx-naxsi ## #include /etc/nginx/naxsi_core.rules; ## # nginx-passenger config ## # Uncomment it if you installed nginx-passenger ## #passenger_root /usr; #passenger_ruby /usr/bin/ruby; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } 

以下是/ sites-enabled / default的内容:

 server { listen 80; server_name *.domain.com; #redirect HTTP to HTTPS return 301 https://$host$request_uri; } server { listen 443; server_name app.domain.com; ssl on; ssl_certificate /etc/ssl/certs/app.domain.com_bundle.crt; ssl_certificate_key /etc/ssl/server.key; location / { proxy_pass http://localhost:5000; } } server { listen 443; server_name app2.domain.com; ssl on; ssl_certificate /etc/ssl/certs/app2.domain.com.crt; ssl_certificate_key /etc/ssl/server.key; location / { proxy_pass http://localhost:5002; } } server { listen 443; server_name app3.domain.com; ssl on; ssl_certificate /etc/ssl/certs/app3.domain.com.crt; ssl_certificate_key /etc/ssl/server.key; location / { proxy_pass http://localhost:5001; } } server { listen 443; server_name app4.domain.com; ssl on; ssl_certificate /etc/ssl/certs/app4.domain.com_bundle.crt; ssl_certificate_key /etc/ssl/server.key; location / { proxy_pass http://localhost:4999; } } 

而且我在/var/log/nginx/error.log中收到了很多错误,如下所示,但不包含特定的服务器或文件(在GET中)

 2016/10/05 23:59:08 [error] 11439#0: *26933 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 123.123.123.123, server: app4.domain.com, request: "GET /includes/app/language.js HTTP/1.1", upstream: "http://127.0.0.1:4999/includes/app4/language.js", host: "app4.domain.com", referrer: "https://app4.domain.com/" 

如果我运行同一个nodejs实例并直接访问它,速度非常快,所以我非常确定NGINX是这个问题。

编辑:多个testing后的一些更多的细节:我现在非常确定,这是事实,我的应用程序是在一个反向代理是导致问题。 我重新安装了所有东西,只有一个nodejs应用程序与socket.io。 使用http://app.domain.com:5000访问时,它运行速度非常快。 然后,我尝试用nginx和apache2作为反向代理redirect端口80到443和端口443到应用程序的端口5000,它开始给超时,变得非常慢,而如果直接使用端口5000访问保持真的很快。我想我是不是唯一一个想用socket.io运行nodejs服务器来运行一个反向代理的人。

任何帮助将是非常受欢迎的。 非常感谢。