小编Pet*_*hof的帖子

如何将node.js应用程序作为后台服务运行?

由于这篇文章多年来引起了很多关注,我在本文的最后列出了每个平台的顶级解决方案.


原帖:

我希望我的node.js服务器在后台运行,即:当我关闭终端时,我希望我的服务器继续运行.我已经用Google搜索了这个教程,但它没有按预期工作.因此,我没有使用该守护进程脚本,而是认为我只使用了输出重定向(2>&1 >> file部分),但这也没有退出 - 我的终端中出现一个空行,就像是在等待输出/错误.

我也尝试将该过程放在后台,但是一旦我关闭终端,该过程也会被杀死.

那么当我关闭本地计算机时,如何让它保持运行?


最佳方案:

daemon background process node.js server

457
推荐指数
15
解决办法
50万
查看次数

在IE9中没有在iframe中发送Cookie

首先,我在发布这个问题之前做过一些研究,所以我知道P3P政策MSDN的相关文章.据我所知,这项政策主要(如果不是)适用于IE6.我的具体问题是IE9.此外,我做的第一件事就是建立一个策略(它有效,因为它在IE的隐私报告中显示了摘要).

我的测试用例如下:我有一个包含iframe的页面.iframe文档Set-Cookie:sid=2b5540e0e4f27075ca4709851700137d; expires=Tue, 28-Jun-2011 07:27:41 GMT; path=/为根路径上的当前域设置会话cookie(完整的HTTP标头:),该会话cookie 在一周内到期.没有问题,这已经在生产中运行(独立,而不是在iframe中)一段时间了.

问题是:iframe文档有一些javascript首先执行一些HTTP请求(由jQuery完成),然后重定向用户(通过更改document.location属性).请求发送cookie,但重定向不会.

我已经在IE中捕获了网络事件,我可以找到的两种请求之间的唯一区别是发起者:XHR由JS库完成,另一个是通过单击完成.但是我真的怀疑点击不会发送cookie.

我想知道为什么我的cookie没有发送,谷歌分析cookie被发送,所以它应该是可能的.

更新: 这绝对是一个隐私区域问题:当将IE中的隐私栏设置降低到所有时,它可以工作.其他设置都失败了.

我已经创建了一个精确的测试床:这是正在使用的实际iframe.要测试它,你必须填写荷兰邮政编码(抱歉;)),使用的占位符很好:1234 AB和1.提交后你得到一个模态,当它完成后你应该被重定向到结果页面.在IE中,重定向显示与您开始时完全相同的页面(因为没有设置cookie).

cookies iframe internet-explorer

26
推荐指数
2
解决办法
2万
查看次数

实现Symfony2单点登录

我对Symfony2 中的安全概念有基本的了解.现在我正在尝试为多域网站实现单点登录功能.

SSO概念本身相当简单:

  • 域A是cookie域; 人们可以登录此域名
  • 登录域B时,用户将被重定向到域A,其中请求一次性密码.用户需要在域A上进行会话才能获取此密码.
  • 获得OTP后,用户返回到域B,域O将匹配域A上的会话.
  • 如果匹配,将为域B创建会话.对于此时的每个后续请求,将针对域A上的会话验证会话.

实现域A的防火墙/身份验证可以像往常一样完成.根据我的理解,我需要:

  • 为域B设置防火墙
  • 为此防火墙创建一个侦听器,以某种方式将用户重定向到域A(更具体:请求OTP的uri)
  • 创建一个处理OTP 的身份验证提供程序,并为域B创建会话
  • 创建另一个侦听器,根据域A上的会话检查会话有效性

但是我真的可以使用一些关于如何在捆绑中执行此操作的提示.如果有人能在这里帮助我,那就太好了.

另外,我还不确定如何实现OTP,或者如何比较两个会话,并确保它们都是有效的.这将在稍后发生,我需要首先使用此工作流程.

single-sign-on symfony

15
推荐指数
1
解决办法
9265
查看次数

睡眠/关机后破坏的流浪者盒子

现在已经发生了好几次,情况如下:我用puppet创建/提供一个流浪盒.我工作了一段时间,几天,有时一周.在我结束的一天结束时,我要么关上MacBook上的盖子(让它进入睡眠状态),要么将其关闭.在某个时刻,vagrant up给出一个错误:

[default] Mounting shared folders...
[default] -- v-root: /vagrant
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mkdir -p /vagrant
Run Code Online (Sandbox Code Playgroud)

此时,供应,重新加载,停止/停止都不起作用.我必须再次销毁和制造盒子,这需要花费一些时间并且变得非常烦人.

我发现这篇文章描述了这个问题,并说明一个ntp服务应该修复它.所以我已经将它添加到我的puppet配置中,但问题仍然存在.

我也在Github上发现了一个类似的问题,这是固定的,但是我运行的操作系统不同于那里描述的操作系统,所以它不是同一个问题.我确实在那里发布了我的问题,到目前为止没有回应.

调试日志保存为主旨:https://gist.github.com/pkruithof/5116426

有谁知道这个问题可能是什么,以及我如何解决它?

更新 我认为这是在Vagrant沿途的某个地方修复的,因为我现在大约6个月没有遇到过这个问题.因此,我正在结束这个问题.

vagrant

7
推荐指数
1
解决办法
1494
查看次数

CouchDB心跳超时

我的CouchDB(生产)服务器有时会被关闭,而我却不想这样做.在检查日志时,我注意到Erlang/CouchDB(一个或另一个)发送心跳,并监测心跳.当发生超时时,服务器被残忍地杀死(couchdb -k).这几乎总是不需要的行为,绝对是在生产服务器上.

我遇到过这个问题,它说明了这个问题并且表明这主要发生在繁重的服务器负载期间,我也注意到了这一点.

我正在寻找一种解决方案来保持我的服务器运行,但要做到这一点,我需要了解更多有关此行为的信息.不幸的是,CouchDB wiki指南都没有提供太多关于此的信息(只有更改API中的参数).

有人可以提供更多相关信息吗?

erlang timeout couchdb heartbeat

5
推荐指数
1
解决办法
2254
查看次数

Nginx/SSI 独立片段缓存

我正在尝试设置一个基本的 Nginx+SSI 示例:

Nginx 配置(只是相关部分,为简洁起见):

ssi on;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:20m max_size=20m inactive=60m use_temp_path=off;

server {
  listen 80;
  server_name localhost;
  location / {
    proxy_cache  my_cache;
    proxy_set_header  Host $host;
    proxy_http_version  1.1;
    proxy_buffering  on;
    proxy_pass  http://127.0.0.1:81;
  }
}

server {
  listen 81;
  root /path/to/root;
  location ~ ^/.+\.php {
    fastcgi_pass  127.0.0.1:9000;
  }
}
Run Code Online (Sandbox Code Playgroud)

ssi.php:

<?php
header('Cache-Control: public, s-maxage=5');
?>
Time: <?php echo time(); ?>
Fragment time: <!--# include virtual="/time.php" -->
Run Code Online (Sandbox Code Playgroud)

时间.php:

<?php
header('Cache-Control: no-cache');
echo time();
Run Code Online (Sandbox Code Playgroud)

包含工作得很好:

时间:1466710388 分片时间:1466710388

现在,一秒钟后,我希望页面 (ssi.php) 仍然被缓存,但time.php …

php caching nginx ssi

4
推荐指数
1
解决办法
1290
查看次数

在多个请求中使用Zend会话命名空间

也许我只是没有看到它,但有没有其他方法来访问以前创建的会话命名空间,而不是$_SESSION直接调用?除了我真的不想这样做之外,Zend文档还建议不要这样做:

虽然$ _SESSION仍可在PHP的全局命名空间中使用,但开发人员应避免直接访问它,以便Zend_Session和Zend_Session_Namespace可以最有效和安全地提供其会话相关功能套件.

Zend_Session_Namespace类没有用于获取命名空间的静态方法,虽然namespaceGetZend_Session中现已弃用的方法指示我使用Zend_Session_Namespace#getIterator,但该方法不是静态的.

这意味着我需要使用new关键字初始化一个新的命名空间.问题是,这不包括以前设置的变量:

$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';
Run Code Online (Sandbox Code Playgroud)

在随后的请求中,这个:

print_R(new Zend_Session_Namespace('Foo'));
Run Code Online (Sandbox Code Playgroud)

...打印这个:

Zend_Session_Namespace Object
(
    [_namespace:protected] => Foo
)    
Run Code Online (Sandbox Code Playgroud)

这看起来很明显.

那么我应该如何获取以前创建的命名空间,而不使用$_SESSION['Foo']

php session zend-framework namespaces

1
推荐指数
1
解决办法
4708
查看次数