【发布时间】:2013-01-14 17:05:39
【问题描述】:
可能不太相关,但我将从我的环境开始:Linux OS、Perl 5.10、Catalyst 5.80032、nginx 1.0.11。
为了这个问题,假设我在端口 80 上使用 mydomain.com 作为应用程序网页的访问点。另外,让我们使用/var/www/mydomain 作为我的 Catalyst 应用程序的物理位置。在这种情况下,静态内容位于/var/www/mydomain/MyApp/root/。
我将应用程序作为 fastcgi 服务器启动(来自MyApp/script):
> ./myapp_fastcgi.pl -l /tmp/myapp.socket -n 2 -p /tmp/myapp.pid -d
我使用以下配置启动 nginx 服务器:
server {
listen 127.0.0.1:80;
server_name mydomain.com;
location / {
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass unix:/tmp/myapp.socket;
}
location /static {
root /var/www/mydomain/MyApp/root;
}
}
当我以http://mydomain.com/ 或http://mydomain.com/products 作为另一个页面(由MyApp::Controller::Products 处理)访问应用程序时,一切似乎都运行良好。
现在的挑战和问题是:应该如何配置 nginx 以便它可以为具有 URI 前缀(例如 /some/prefix)的应用程序页面提供服务?
在这种情况下,根页应以http://mydomain.com/some/prefix/ 访问,第二个以http://mydomain.com/some/prefix/products 访问。
问题的第二部分是:应如何修改应用程序代码以使重定向和所有页面具有有效的 URI? 即$c->uri_for() 和类似方法应该如何(重新) 编写为对前缀路径具有相同的行为?
我已经尝试了虚拟直接调整
location /some/prefix {
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass unix:/tmp/myapp.socket;
}
但当然它不会以这种方式工作。因此,在转向 Perl 代码并使用重定向和 URL 生成之前,即使手动输入 URL,我也无法获得响应。
【问题讨论】:
标签: perl nginx fastcgi catalyst