おそらくあまり関係ありませんが、私の環境から始めましょう: Linux OS、Perl 5.10、Catalyst 5.80032、nginx 1.0.11。
質問のために、ポート 80 でmydomain.comをアプリの Web ページへのアクセス ポイントとして使用しているとします。/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
)、すべてが正常に機能するようです。
ここで課題と質問: URI プレフィックス (たとえば)を使用してアプリケーションのページを提供できるようにするには、 nginxをどのよう/some/prefix
に構成する必要がありますか?
この場合、rootpage には としてアクセスしhttp://mydomain.com/some/prefix/
、2 番目のページには としてアクセスする必要がありますhttp://mydomain.com/some/prefix/products
。
質問の 2 番目の部分は、リダイレクトとすべてのページで有効な 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 を入力しても応答を得ることができません。