web-dev-qa-db-ja.com

nginxエイリアスが機能しないのはなぜですか?

エイリアスを設定して、誰かが/phpmyadmin/にアクセスしたときに、nginxが通常のドキュメントルートからではなく/home/phpmyadmin/からエイリアスをプルするようにしています。ただし、URLをプルアップするたびに、fastcgiを介してプルされていないすべてのアイテムに404が表示されます。 fastcgiは正常に機能しているようですが、残りは機能していません。 straceは、通常のドキュメントルートから他のすべてのものをプルしようとしていると伝えていますが、その理由がわかりません。誰かが洞察を提供できますか?

これが私の設定の関連部分です:

            location ~ ^/phpmyadmin/(.+\.php)$
            {
                    include fcgi.conf;
                    fastcgi_index index.php;
                    fastcgi_pass  unix:/tmp/php-cgi.sock;
                    fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
            }

            location /phpmyadmin
            {
                    alias /home/phpmyadmin/;
            }
10
Rob

方法を考え出した。それがベストかどうかはわかりませんが、今は確かに機能しています。

これが私がしたことです:

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }
12
Rob

わかりませんが、次のように書いてみましたか?

location /phpmyadmin/
        {
                alias /home/phpmyadmin/;
        }

また、アクセスしようとしているURIは何ですか?

私が理解している限り、URIを使用する必要があります

/home/phpmyadmin/

だけでなく

/phpmyadmin/

あなたはここでそれについてもっと読むことができます: http://wiki.nginx.org/HttpCoreModule

2
Black-Pixel

これが機能しない理由は、サーバーが正規表現ベースの場所を選択しており、エイリアスが含まれるプレフィックスベースの場所を選択していないためです。

1つだけ選択します。接頭辞ベースの場所を取得して正規表現を上回るために使用できる演算子がありますが、phpが機能しないことがわかります。解決策は、PHP regexがエイリアスディレクティブを使用して場所内にネストされている、カービンの答えのようなものになります。

ただし、URLとエイリアスディレクトリの大文字と小文字が異なるため、SCRIPT_FILENAME設定が機能しない可能性があります。

1
thomasrutter

試す

location ^~ /phpMyAdmin/
{
    alias /home/phpmyadmin/;

    location ~ \.php$
    {
        include fcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
    }
}
1
kervin