nginx 和 Perl:FastCGI 与反向代理 (PSGI/Starman)

2024-03-18

如今运行 Perl Web 应用程序的一个非常流行的选择似乎是在 nginx Web 服务器后面将请求代理到 FastCGI 守护程序或启用 PSGI 的 Web 服务器(例如 Starman)。

关于为什么人们会这样做有很多疑问(例如为什么将 nginx 与 Catalyst/Plack/Starman 一起使用? https://stackoverflow.com/questions/2939393/why-use-nginx-with-catalyst-plack-starman) 答案似乎适用于这两种情况(例如允许 nginx 提供静态内容、轻松重新启动应用程序服务器、负载平衡等)

然而,我对使用 FastCGI 与反向代理方法的优缺点特别感兴趣。 Starman 似乎被广泛认为是最快、最好的 Perl PSGI 应用程序/Web 服务器,而我正在努力寻找使用 FastCGI 的任何优势。两种方法似乎都支持:

  • UNIX 域套接字以及 TCP 套接字
  • fork/进程管理器风格的服务器以及非阻塞基于事件(例如 AnyEvent)的服务器。
  • 信号处理/优雅重启
  • PSGI

同样,任一选项的 nginx 配置都非常相似。

那么为什么你会选择其中之一而不是另一个呢?


反向代理设置(例如 nginx 将 HTTP 请求转发给 Starman)具有以下优点:

  • 事情更容易调试,因为您可以轻松地直接访问后端服务器;

  • 如果您需要扩展后端服务器,您可以轻松地在前端(静态服务)HTTP 和后端之间使用 pound/haproxy 之类的东西(Zope 通常是这样部署的);

  • 如果您还使用某种面向外的、缓存的、反向代理(如 Varnish 或 Squid),它可能是一个很好的助手,因为它可以很容易地绕过它。

然而,它有以下缺点:

  • 后端服务器必须找出真正的始发IP,因为它看到的只是前端服务器地址(通常是localhost);几乎有一种简单的方法可以找出 HTTP 标头中的客户端 IP 地址,但这需要额外的了解;

  • 后端服务器通常不知道原始的“Host:”HTTP header,因此无法自动生成本地资源的绝对URL; Zope 使用特殊的 URL 来解决这个问题,将原始协议、主机和端口嵌入到后端的请求中,但使用 FastCGI/Plack/... 则不需要这样做;

  • 前端无法自动生成后端进程,就像 FastCGI 那样。

我想,选择你最喜欢的优点/缺点并做出选择;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx 和 Perl:FastCGI 与反向代理 (PSGI/Starman) 的相关文章

随机推荐

  • iOS - 在关闭和滚动手势之间切换

    我正在尝试模仿 Line 通讯应用程序 日本事实上的通讯应用程序 中的一种行为 基本上 它们有一个模态视图控制器 内部有滚动视图 当滚动操作到达其内容的顶部时 视图控制器无缝切换到交互式解除动画 此外 当手势将视图返回到屏幕顶部时 控制权将
  • 最近的工具更新失败并出现依赖性错误后添加控制器

    由于安装 MVC3 的最新工具更新 通过 添加控制器 上下文菜单添加控制器通常会失败并出现以下错误 无法加载文件或程序集 Newtonsoft Json Version 3 5 0 0 Culture neutral PublicKeyTo
  • Ruby on Rails 表单:如何创建复选框表(或列表)

    在 Ruby on Rails 中创建一组相关复选框的最佳方法是什么 在 Turbogears 使用的 ToscaWidgets 库中 您可以执行以下操作 twf CheckBoxTable arbitrary numbers num co
  • 如何在 Python 中生成 HTML 单元测试输出?

    我正在寻找任何方法来在 HTML 摘要中显示 Python 单元测试的结果 对于 Java 和 Ruby 有这样的工具 尚未找到任何似乎可以为 Python 执行此操作的工具 那里有吗 JUnit HTML 输出 source ibm co
  • 使用 Nuxt/Vue 加载 D3

    我正在尝试在使用 Nuxt 构建的应用程序中实现 D3 我已成功将其导入到视图中
  • Rust:“无法移出‘self’,因为它是借用的”错误

    我正在尝试编写一个递归方法 将一个项目添加到树中并返回与该项目对应的树节点 enum BstNode Node int BstNode BstNode Leaf impl BstNode fn insert lt a gt a mut se
  • VB6杀死定时器

    我使用 VB6 进行编程 因为我们使用的是遗留代码和硬件 外部电子设备 我的程序是围绕计时器构建的 我将在操作系统编程中使用任务 计时器一直运行 直到其工作完成 设置一个标志并启动另一个计时器 我想要一个监督计时器来控制其他计时器当计时器没
  • 如何在 Boost.Asio 中使用零拷贝 sendmsg/Receive [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用Boost Asio 我想通过使用零拷贝发送消息 接收来改进我的系统 我可以在 Boost Asio 中使用零拷贝 send
  • c# 打开文件,路径以%userprofile%开头

    我有一个简单的问题 我在用户目录中有一个文件的路径 如下所示 USERPROFILE AppData Local MyProg settings file 当我尝试将其作为文件打开时 ostream new FileStream fileN
  • 带确认对话框的 MVC3 Actionlink

    我可以显示一条确认消息吗ActionLink 我需要使用 JavaScript 吗 没有它可以吗 你能为我举一些例子吗 谢谢 I want to make a confirmation message appear before the l
  • nanomsg (nng) 中的多个发布者和订阅者

    如何使用 TCP 传输设置多个发布者和订阅者 我怀疑您没有自动创建网格 总线 因此 每个发布者都需要一个唯一的 IP 绑定点 对吧 他们只是让订阅者通过单个套接字连接到每个发布者 这在以下文章中进行了讨论 https www freelis
  • 可拖动的工具栏

    如何像 Eclipse 那样使用 JFace SWT 制作可拖动 可停靠的工具栏 您能否发布一个 ApplicationWindow 的简单示例或链接如何制作它的良好来源 Thanks SWT 有一个名为 CoolBar 的组件 您可以使用
  • WordPress 页面中的 JavaScript

    我有这段代码 但是当我在 html 中调用它时 它在 WordPress 中没有执行任何操作 我该如何解决这个问题 gt 谢谢
  • PascalScript 是否与 Delphi XE5 兼容以创建 Android/iOS/Windows 应用程序?

    我想创建一个基于 JSON 数据绘制简单表单的应用程序 我需要一个脚本来对此进行情报处理 RemObjects 的 Pascal Script 可以解决这个问题吗 是否兼容为 Android iOS 和 Windows 生成具有相同源代码的
  • filterContentForSearchText:scope: 方法从哪里来?

    最近 我注意到filterContentForSearchText scope 出现在有关如何实现搜索栏的多个教程中 不过 我查阅了两者的参考资料UISearchDisplayDelegate and UISearchBarDelegate
  • Keras提前停止回调错误,val_loss指标不可用

    我正在训练 Keras Tensorflow 后端 Python 在 MacBook 上 并且在 fit generator 函数的早期停止回调中遇到错误 错误如下 RuntimeWarning Early stopping conditi
  • 如何使用 python3 在 aws 上使用过滤表达式作为嵌套映射属性?

    我一直在尝试扫描 DynamoDB 以检查名为 可交付成果 的嵌套地图属性中的特定值 但是 使用带有过滤表达式的扫描会导致空结果 import boto3 result dynamo client boto3 client dynamodb
  • Numpy 确实以不同方式对待 float('nan') 和 float - 转换为 None

    我想从普通数组创建一个 Numpy 数组并转换nan价值观None 但成功取决于天气 第一个值是 正常 浮点数 或者float nan 这是我的代码 从初始数组开始 print a array d 3 2345 nan 2 0 3 2 1
  • iOS SDK v2 的 Amazon S3 视频上传问题

    尊敬的开发人员 我遇到了与 Amazon S3 视频上传相关的问题 我正在使用 iOS SDK V2 来安排 iOS 客户端和 Amazon 之间的交互 我已经阅读了亚马逊开发人员提供的所有文档并调查了手册 并且出现了一些未记录的问题 我将
  • nginx 和 Perl:FastCGI 与反向代理 (PSGI/Starman)

    如今运行 Perl Web 应用程序的一个非常流行的选择似乎是在 nginx Web 服务器后面将请求代理到 FastCGI 守护程序或启用 PSGI 的 Web 服务器 例如 Starman 关于为什么人们会这样做有很多疑问 例如为什么将