最近、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。
何か案は?
それは少しトリッキーでしたが、私は 場所に関する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;
...
}
これですべてが機能します。