web-dev-qa-db-ja.com

nginxで乗客と一緒にラウンドキューブを実行

最近、nginxにpassengerをインストールしようとしました。インストールは機能し、すべてが良好です。ただし、サーバーでもroundcubeWebメールを実行したいと思います。

基本的に私の問題は、nginxのrootディレクティブがpassengerアプリに設定されていることです。

root /home/me/www/hello/public

roundcubeは、サーバー上で次のようにシンボリックリンクとして作成されます。

/home/me/www/webmail

私の質問では、URL www.my-server.comが通常のルートを参照し、www.my-server.com/webmailがroundcubeフォルダーを参照するようにするにはどうすればよいですか?

私はnginx.confで次のバリエーションを試しましたが運がありませんでした:

location /webmail/ {
    #root /home/me/www;
    alias /home/me/www;
    try_files $uri /index.php;
    passenger_enabled off;
}

上記の構成では、www.my-server.com/webmailを使用すると403が禁止され、URIを使用するとファイルが見つかりません:www.my-server.com/webmail/index.php。

何か案は?

1
Kenneth

それは少しトリッキーでしたが、私は 場所に関するnginxドキュメント で解決策を見つけました。

.phpファイルに一致するlocationディレクティブがあるため、これは/ webmail/locationよりも優先されます。これはルートの場所を宣言しないため、passengerフォルダーを指すグローバルルートが使用されます。

解決策は、次のように、phpの一致する場所にrootディレクティブを追加し、phpの実行をWebメールパスに制限することでした。

index index.html index.htm index.php

location /webmail/ {
    root /home/me/www;
}

location ~ /webmail/.*\.php$ {
    root /home/me/www;
    ...
}

これですべてが機能します。

1
Kenneth