有一些博文和关于这方面的问题,但他们大多是从2010年或2011年,我希望有一个更新的(2014年代)的答案。 我有一个相当标准的Node.JS应用程序,运行Express,Socket.IO,Passenger等。我的生产服务器运行Ubuntu Server 12.04 LTS。 在高层次上,我的部署工作stream程大致是: 推/拉我更新的代码到我的生产服务器使用git 如有必要,运行任何构build脚本和/或安装新的依赖项 使用forever restart启动应用程序 Node.JS应用程序在端口8080上运行,并且我已经设置了iptables来将端口80的stream量转发到Node应用程序。 这个设置有一些问题。 最重要的是服务中断。 由于我的应用程序正在使用WebSocket,因此每当永远重新启动服务器时,所有连接的用户都将丢失其WebSockets会话。 Socket.IO会自动重新连接用户,但用户的会话信息不会转移到新的服务器实例。 另一个问题是error handling。 如果Node.JS服务器遇到一个不需要的exception(这是一个不幸的现实), 永远杀死并重新启动服务器,再次导致所有用户失去WebSockets会话。 使用PHP和Apache等传统技术部署的服务器没有这个问题,因为(如果我理解正确),每个连接都在自己的线程中运行,所以新的部署不会影响当前活动的用户,并且PHP只会破坏一个用户的会话,而不是为每个人查杀服务器。 那么,如何在不中断服务的情况下部署Node.JS,从而保持每个用户的会话呢?
我有一个通过git推送到Wercker(一个持续交付平台)的本地代码生产stream水线,然后转发到openshift进行生产。 这两个步骤,本地构build和部署到openshift不会给出错误,但是当代码在openshift上再次构build时,它不会安装所有的依赖关系。 我已经看到这个问题发布了不less,但每个答案似乎有一些奇怪的variables,不适用,我要么太知道提取的答案,或者他们并没有实际上碰到我的问题。 我如何得到openshift安装所有的依赖关系? 谢谢!
我有一个使用Transfer-Encoding: Chunked的Node.js应用程序Transfer-Encoding: Chunked通过HTTP连续传输数据,直到客户端断开连接。 运行Node的本地实例时,它可以正常工作,但在部署到Azure App Service(通过iisnode运行Node应用程序)时,客户端连接将不会收到数据。 logging表明Node应用程序正在处理请求并正确传输数据,但由于某些原因数据未到达客户端。 以下是我从节点stream式传输数据的简单示例: var server = http.createServer(); server.on('request', function(request, response) { var interval = setInterval(function() { response.write("some data\r\n"); }, 1000); request.on('close', function() { clearInterval(interval); }); }); server.listen(config.port); 在我的iisnode.ymlconfiguration文件中,我设置了flushResponse: true来防止iisnode缓冲响应块。 我的猜测是,IIS正在尝试缓冲整个响应之前发送,但我不知道如何禁用此行为。
我试图设置一个生产环境,前端运行nginx,后端使用多个nodejs应用程序,使用pm2进行进程pipe理。 这个想法是在后端(和可选的垂直)允许水平的可伸缩性。 用nginx(上游)使用负载均衡,并在pm2后端多进程是好主意? 这可能是冲突的或不必要的? 如果在前端使用负载平衡可以使用单个进程(水平)创build多个后端机器。 或者可以只使用nginx作为http服务器,并在后端使用pm2多进程(垂直)。 或者使用nginx负载均衡和pm2多进程(水平和垂直) 过去我们在机架空间调整机器的时候遇到了问题,所以我更喜欢从前端水平平衡。
我在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 […]
我想添加一些function到我的网站,这将需要通过websockets使用Node.js。 所以我的select是: 在独立的VPS上安装节点; 在我的网站所在的服务器上安装节点。 假设主服务器有足够的资源来处理MySQL,Nginx和PHP(约10个网站)和Node。 同时,获得更多的VPS也不是问题。 我最初的担心是无法让Node监听像443这样的公共端口(在用户端不太可能受到防火墙限制),但是我可以让Nginx监听端口,将相应的请求代理给Node,所以这不是一个大问题。 我查看了相同服务器上的Apache和Node.js , Node.js应用程序和wordpress ,以及这个search结果页面 ,但是这些大多覆盖了实际的设置,而不是select它们的原因。 感觉就像获得额外的VPS是一个更可靠, 更清洁的想法,但我可能是错的,所以我要求你的意见build议,以获得额外的VPS的理由。
我们的应用程序目前只是一个“常规”的networking应用程序,没有喜欢streamHTTP或Websockets的花哨的东西。 它主要是一个Rails应用程序,由less数(20台机器上的20台) Unicorn工作服务器处理,由负责均衡的古老的nginx服务器代理。 过去一年来,这一切都非常顺利,现在每天在任何时候都可以提供400到800个请求 。 我们很快就会发布两个新的API,这两个API都是由一个Node应用程序提供的:一个是websocket,另一个是长轮询HTTP 。 (喜欢Twitterstream媒体API,HTTP连接永远不会结束)。 他们都使用节点上的同一个端口,由于节点应用是无状态的,所以我们当然可以部署其中的一些来处理stream量。 应用程序(节点)现在部署在5个实例中,现在正在侦听同一主机上的5个不同的“专用”端口。 我们需要在它们之前放置一些负载均衡,但也有一些能够处理套接字(websocket或HTTPstream式传输)的东西,这些套接字可以保持数天。 那么问题是:什么? 我在某处读到HAProxy比Nginx做得更好。 你有什么build议?
我有一个基本的聊天应用程序,使用express和socket.io在node.js中编写; 直接连接到端口3000上的节点时,它工作正常 但是,当我尝试使用nginx v1.4.2作为代理时,这并不起作用。 我开始使用连接图 map $http_upgrade $connection_upgrade { default upgrade; '' close; } 然后添加位置 location /socket.io/ { proxy_pass http://node; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Request-Id $txid; proxy_set_header X-Session-Id $uid_set+$uid_got; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_buffering off; proxy_read_timeout 86400; keepalive_timeout 90; proxy_cache off; access_log /var/log/nginx/webservice.access.log; error_log /var/log/nginx/webservice.error.log; } […]
我想同时使用node.js和以前编写的php代码,因此我使用node-http-proxy在node.js中设置了一个http代理,并将希望Apache处理的stream量转发到另一个端口。 不幸的是,我最终得到了一个像“ http://hydroxic-acid.com:8080 / bla /”这样的URL。 有没有办法删除端口,以便上面的URL将只是“ http://hydroxic-acid.com/bla ”?
因此,我们使用Node.js来为CompassionPit.com提供动力,并且全部由nginx提供。 nginx正在抛出一个504网关超时 有趣的是,如果我导航到http://compassionpit.com/index.html ,那么我可以访问该页面(我相信所请求的是通过端口8000上运行的节点应用程序路由)。 和http://compassionpit.com/blog/正在工作。 但http://compassionpit.com/已closures。 🙁 帮帮我? root@li70-243:~# cat /etc/nginx/sites-enabled/blog server { listen 80 default; # your server's public IP address server_name compassionpit.com; index index.html; location /blog/wp-content/ { alias /opt/blog/wp-content/; } location /blog/ { root /opt/; include fastcgi_params; fastcgi_pass localhost:8080; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location / { alias /opt/chat/static/; if (-f $request_filename) […]