首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Unix域套接字的Apache到PSGI代理

基于Unix域套接字的Apache到PSGI代理
EN

Stack Overflow用户
提问于 2013-02-01 14:29:43
回答 2查看 1.1K关注 0票数 0

我们有许多(孤立的)安装PSGI应用程序,它们运行在同一台机器上,因此需要它们的PSGI服务器在独特的端口上运行。从资源/管理的角度来看,这并不理想,但它也需要TCP/IP的“开销”(尚未测量到,也可能微不足道),因为在同一台计算机上运行Unix域套接字似乎是更明显的选择。

幸运的是,该应用程序在Plack的HTTP接口下工作(通过mod_proxy的“ProxyPass”从Apache代理),但不幸的是,它在FastCGI接口下中断(参见:https://stackoverflow.com/questions/14643165/can-psgi-apps-fork-under-plackhandlerfcgi)。

除了mod_ patching的FastCgiExternalServer (或者用这个未经测试的、用户贡献的修补程序:mbox/httpd-dev/201207.mbox/%3C20120731200351.GB11038@gmail.com%3E)修补mod_proxy之外,有没有办法通过Unix域套接字将Apache连接代理到PSGI应用程序?

EN

回答 2

Stack Overflow用户

发布于 2015-03-09 14:06:30

代理到Unix域套接字应该可以使用代理,因为Apache2.4.7和史达曼

另一种方法是在一个进程中运行不同的PSGI应用程序。为了实现这一点,我使用了类似于以下包装程序的工具:

代码语言:javascript
复制
use strict;
use warnings;

use lib qw(
    /path/to/app1
    /path/to/app2
    /path/to/app3
);

use Plack::Builder;
use Plack::Util;

sub load_psgi_in_dir {
    my ($dir, $psgi) = @_;
    my $app = Plack::Util::load_psgi("$dir/$psgi");
    return sub {
        chdir($dir);
        return $app->(@_);
    };
}

builder {
    mount 'http://app1.com/' => load_psgi_in_dir(
        '/path/to/app1',
        'app1.psgi',
    );
    mount 'http://app2.com/' => load_psgi_in_dir(
        '/path/to/app2',
        'app2.psgi',
    );
    mount 'http://app3.com/' => load_psgi_in_dir(
        '/path/to/app3',
        'app3.psgi',
    );
};

我唯一的问题是,有些应用程序使用了同名的本地模块的不同版本。修复后一切都很好。

这种方法的一个相当大的好处是,您可以在所有应用程序之间共享工作人员,从而减少内存使用(或使您能够添加更多的工作人员)。

票数 3
EN

Stack Overflow用户

发布于 2013-02-07 01:43:40

fdpass允许Apache代理域套接字,尽管我还没有尝试过。

我个人建议使用标准的每个应用程序的端口安排,除非你可以衡量的开销是值得做一些非常规的事情。

您还可以选择在每个应用程序中使用一个私有到服务器的IP地址,并让它们在它们的私有IP上运行在端口80上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14648515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档