如何实现node.js能够处理250k连接作为彗星服务器(客户端我们使用socket.io)? 将nginx用作代理/负载均衡是否是正确的解决scheme? 或者HA-Proxy会是更好的方法吗? 有没有人有100k +连接的真实世界的经验,可以分享他的设置? 像这样的设置是正确的(每个服务器的四核CPU – >每个服务器启动4个node.js的实例?): nginx (as proxy / load balancing server) / | \ / | \ / | \ / | \ node server #1 node server #2 node server #3 4 instances 4 instances 4 instances
我想知道如果nodejs依赖于Apache的普通/ util文件? 正如我记得PHP的要求,并取决于一些Apache通用文件。 所以问题是:nodejs是否具有内置的web服务function作为Apache软件,因此不需要安装在服务器上的Apache? 更新:更一般的问题是PHP或nodejs或类似的软件可以成为一个Web服务器只是自己没有任何Web服务器软件,如阿帕奇? 也许可以这么说,在PHP的情况下使用HTTP库扩展,但是似乎库使用了一些Web服务器软件的共享对象,所以它已经不是纯粹的PHP了。
我目前有一个与我的Node.js应用程序的套接字泄漏。 这个bug也贴在这里 。 我希望尽快解决这个问题。 CLOSE_WAIT和FIN_WAIT2似乎是主要问题。 Connections: 1662 ESTABLISHED: 238 CLOSE_WAIT: 770 FIN_WAIT1: 4 FIN_WAIT2: 632 以下数据是通过input(替代)如下来检索: netstat -anp | grep ${node_pid} | wc -l 我读过,你可以通过调整这些variables来解决这个问题: net.ipv4.tcp_fin_timeout ( = 60 ) net.ipv4.tcp_keepalive_time ( = 7200 ) 虽然我的tcp_fin_timeout被设置为60秒,但是我的套接字在那里保持了60秒以上。 这就是为什么我认为我应该调整tcp_keepalive_time 。 它托pipe在运行Apache和MySQL的Linux Centos 5服务器上。 我可以轻易地将tcp_keepalive_time减less到1800,还是会对Apache产生负面影响?
我用ab -n 10000 -c 1000对不同configuration的node.js进行了testing,每个都返回stringHello World! 。 结果对我来说似乎很奇怪。 X轴是请求的数量,y是以毫秒为单位的响应时间。 节点是单独的服务器 节点(集群)是使用cluster模块的服务器(双核) Nginx(平衡器)作为运行相同代码的(两个)节点实例前面的平衡器 第一件事是nginx太慢了,平衡器也是这三者中最差的。 直到1000个请求(比群集慢),它比单独的节点要好。 另一个奇怪的是节点单独有一个恒定的响应时间,直到〜7000(?)。 从约7000个请求开始,群集的响应时间大于节点,这似乎太奇怪了。 你会如何解释这些结果? 我做错了吗(长凳或绘图错误)? ApacheBench 2.3(1430300),Node.js 0.10.5,nginx 1.4.1。 在Xubuntu上运行13.04 x64。
在一些教程中,我已经看到以下代码片段来监视PID过程: check process nodejs with pidfile "/var/run/yourprogram.pid" start program = "/sbin/start myapp" stop program = "/sbin/stop myapp" if failed port 8000 protocol HTTP request / with timeout 10 seconds then restart 但在其他一些情况下,我看到监视一个没有PID的整个主机,如下所示: check host localhost with address 127.0.0.1 start "/sbin/start myapp" stop "/sbin/stop myapp" if failed port 8000 protocol HTTP request / with timeout 10 […]
我有一个expressjs在一些端点上做出部分回应的后端。 伪代码是这样的: function (req, res, next) { res.writeHead(200, { 'Content-Type': 'application/json' }); request.a.file(function response (middleChunk) { res.write(middleChunk); }, function final (endingChunk) { res.end(endingChunk); }); } 直接使用curl -v到expressjs实例就像一个魅力一样,逐步显示消息,最后是endingChunk ; 但是我没有直接在我的主机上使用expressjs,但是我使用了一个使用nginx制作的反向代理,它的configuration就是这样的: server { listen 80; server_name funnyhost; root /directory; location ~/api/.* { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_read_timeout 600s; proxy_buffering off; } } proxy_buffering off使服务器响应一些事情: ~$ curl -v […]
我试图在我的Cent OS 5.2中打开端口843 ,我添加了以下行etc\sysconfig\iptables : -A INPUT -p tcp –dport 843 -j ACCEPT 然后更新我的iptables服务。 我需要通过sudo node index.js命令来监听由root用户运行的node.js应用程序中的那个端口,但是当我尝试通过该端口build立连接时仍然会出现forbidden port错误。 这是我通过运行sudo iptables -L -v : Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 2811 238K ACCEPT tcp — any any anywhere anywhere tcp dpt:http 112 6224 ACCEPT tcp […]
我使用nginx作为反向代理从memcached中查找html内容(如果不存在),那么node.js(如果没有的话),node.js返回404.我想要做的是拦截并提供一个自定义由node.js返回的404页面 问题是,nginx不会返回正确的404.html,而是它的默认值。 所以,虽然我可以截获404页面,但nginx却传递了默认的错误页面,而不是404.html upstream memcached { server 127.0.0.1:11211; } error_page 404 /404.html; location /404.html { internal; } location @memcached { … if ($memcached_request = 1) { memcached_pass memcached; error_page 404 502 504 = @nodejs; } if ($memcached_request = 0) { error_page 404 502 504 = @nodejs; } } location @nodejs { proxy_pass http://127.0.0.1:7777; … error_page […]
我目前使用Nginx与NodeJs,我试图编辑我的nginx.conf文件,以允许caching。 以我目前的设置下面我有SSL和GZIP工作,但我怎么能添加caching? 我得到一个错误404.我的文件有以下结构:/ root / Poplive / Dec5 / public 公开我有一个文件(main-built.js)和文件夹(/ javascripts / css),这些是文件和文件夹即时尝试caching。 我试过…. 1)我把下面的指令放在我的nginx.conf下面的位置/ {}中 location ~* /.*\.(/javascripts|main-built.js)$ { expires 24h; } 结果,没有caching,但GZIP的作品 下面的Nginx.conf events { worker_connections 1024; } http { upstream myapp { server 127.0.0.1:3100; } #Add Gzip sendfile on; keepalive_timeout 2; tcp_nodelay on; gzip on; gzip_http_version 1.1; gzip_vary on; gzip_comp_level 5; […]
这是我第一次用nginx设置,我用它来代理nodejs。 HTTP在端口3000上,而HTTPS在端口3001上。 如果我去http://test.domain.com它加载常规的不安全页面。 如果我去https://test.domain.com它加载安全页面。 但我希望它从非httpsredirect到https。 我的configuration有什么问题? 这是我使用的整个domain.conf文件。 server { listen 80; server_name test.domain.com return 301 https://test.domain.com$request_uri; } server { listen 443 ssl; server_name test.domain.com; ssl_certificate /etc/nginx/ssl/domain.crt; ssl_certificate_key /etc/nginx/ssl/server.key; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass https://127.0.0.1:3001; proxy_redirect off; } } 我重新启动了nginx多次。 谢谢!