Nginx takma adım neden çalışmıyor?


10

Birisi eriştiğinde /phpmyadmin/, nginx /home/phpmyadmin/normal belge kökünden değil, onu alacak bir takma ad kurmaya çalışıyorum . Ancak, URL'yi her çektiğimde, fastcgi'den çekilmeyen tüm öğeler için bana 404 verir. fastcgi iyi çalışıyor gibi görünüyor, gerisi değil. stracebana her şeyi normal belge kökünden çekmeye çalıştığını söylüyor, ancak nedenini anlayamıyorum. Birisi fikir verebilir mi?

İşte benim yapılandırma ilgili kısmı:

            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 için yeni olan uzun zamandır bir apache kullanıcısı olarak, bunu gerçekten garip ve gereksiz yere karmaşık buluyorum. Nedenini anlamaya çalışmak için birkaç saat geçirdim. Birisi bu davranışı açıklayabilir mi? Takma adlar yalnızca bu olmalıdır - bir konumun takma adı.
tu-Reinstate Monica-dor duh

Bildiğim kadarıyla anladığım kadarıyla, takma adlar Izleyen çıkarırsanız not rağmen, "sadece" dir /takma ad velocation talep eden, direktif /phpmyadminfileaslında alırsınız /home/phpmyadminfile. Sorudaki yapılandırma neden çalışmıyor, bana doğru görünüyor, bu yüzden locationgösterilmediğinde, amaçlanmadığında eşleşen başka bir yönerge olduğundan şüpheleniyorum . Bu durumda, önekle aliasbittiği için , nginx dokümanları bunun yerine kullanılmasını önerir . locationroot /home;
Scott Stevens

Yanıtlar:


12

Bir yol buldum. Bunun EN İYİ olup olmadığından emin değilim, ama kesinlikle çalışıyor.

İşte yaptım:

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

2

Emin değilim ama bu şekilde yazmaya çalıştınız mı?

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

Ayrıca, erişmeye çalıştığınız URI nedir?

Anladığım kadarıyla, URI'yi kullanmalısınız

/home/phpmyadmin/

ve sadece

/phpmyadmin/

Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz: http://wiki.nginx.org/HttpCoreModule


En azından bir cevap için teşekkür ederim. Ama evet. Bunu denedim. Aynı şey.
Rob

Diğer adı diğer konuma eklemeniz gerekebilir. Yapılandırmanızı oradaki yapılandırmalarla karşılaştırabilirsiniz: serverfault.com/questions/223028/…
Black-Pixel

1

Deneyin

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

Bunun çalışmamasının nedeni, sunucuda takma ad içeren önek tabanlı konumu değil normal ifade tabanlı konumu seçmesidir.

Sadece birini seçecek. Bir regex birini geride bırakmak için bir önek tabanlı konum almak için kullanabileceğiniz bir operatör var, ama sonra php işe yaramaz bulacaksınız. Çözüm, PHP regex'in takma ad yönergesi ile konumun içine yerleştirildiği kervin'in cevabı gibi bir çözüm olacaktır.

Ancak URL ve diğer adı dizinde farklı büyük harf olduğundan SCRIPT_FILENAME ayarı orada çalışmayabilir şüpheli.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.