可能不太相关,但我将从我的环境开始: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
)的应用程序页面提供服务?
在这种情况下,rootpage 应该以 ashttp://mydomain.com/some/prefix/
和第二个 as访问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,我也无法获得响应。