如何为基于PSGI / Plack的Web应用程序提供静态文件(图像,JavaScript,样式表)?

答案可能取决于所使用的Web服务器,是CGI,FastCGI,mod_psgi还是像Starman这样的纯Perl。我听说使用Plack::Middleware::Static或Plack::App::File(与Plack::App::URLMap一起)仅用于开发...

最佳答案

就实时部署而言,如果您让Web服务器处理静态内容并让Plack应用程序处理动态内容,那么设置非常简单(快速)。通常,您的Web服务器配置中至少需要2个代理。代理A到您的静态文件(假设它们通常都在同一位置),代理B到您的Plack应用程序部署所在的端口。

例如,nginx配置的一部分可能如下所示。假设Plack应用程序在本地5001端口上运行,并且您的静态文件在http://mydomainname.com/static URL下可用

server {
    listen 80;
    server_name mydomainname.com;

    location / {
        proxy_pass http://localhost:5001/;
        proxy_redirect off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Port $server_port;
        proxy_set_header   X-Forwarded-Host $host;
    }

    location /static {
        root /path/to/static/files;
    }

}

10-06 03:16