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


10

エイリアスを設定して、誰かがにアクセスしたときに/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/;
            }

nginxを初めて使用するapacheの長いユーザーとして、これは本当に奇妙で不必要に複雑であることがわかりました。その理由を理解するために、ドキュメントを数時間かけて調べました。誰かがこの動作を説明できますか?エイリアスはそれだけである必要があります-ロケーションのエイリアス。
tu-Reinstate Monica-dor duh 2014年

私の知る限りそれを理解するよう、エイリアスを使用すると、末尾を省略した場合、ノートがいることを、「ちょうどこと」であり、/別名にlocation要求して、ディレクティブ/phpmyadminfile実際にあなたを取得します/home/phpmyadminfile。質問の設定が機能しない理由については、私には正しいように見えるので、location意図しないときに一致する別のディレクティブが表示されていないのではないかと思います。この場合、alias末尾がlocationプレフィックスで終わるため、nginxのドキュメントではroot /home;代わりにを使用することを推奨しています
スコットスティーブンス

回答:


12

方法を考え出した。それが最高かどうかはわかりませんが、確かに現在は正常に機能しています。

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

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

2

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

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

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

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

/home/phpmyadmin/

だけでなく

/phpmyadmin/

詳しくは、http//wiki.nginx.org/HttpCoreModuleをご覧ください。


少なくとも答えてくれてありがとう。しかし、そうです。私はそれを試しました。同じこと。
Rob

多分あなたは他の場所にエイリアスを追加する必要があります。あなたはそこにものにあなたの設定を比較することができます:serverfault.com/questions/223028/...
黒画素

1

やってみる

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.