Mengapa nginx saya tidak berfungsi?

10

Saya mencoba mengatur alias sehingga ketika seseorang mengakses /phpmyadmin/, nginx akan menariknya dari /home/phpmyadmin/daripada dari root dokumen yang biasa. Namun, setiap kali saya menarik URL, itu memberi saya 404 pada semua item yang tidak ditarik melalui fastcgi. fastcgi tampaknya berfungsi dengan baik, sedangkan sisanya tidak. stracemengatakan kepada saya itu mencoba untuk menarik segala sesuatu yang lain dari root dokumen yang biasa, namun saya tidak tahu mengapa. Adakah yang bisa memberikan wawasan?

Inilah bagian yang relevan dari konfigurasi saya:

            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/;
            }
rampok
sumber
Sebagai pengguna apache lama yang baru menggunakan nginx, saya merasa ini benar-benar aneh dan tidak perlu rumit. Saya menghabiskan beberapa jam membaca dokumentasi untuk mencoba memahami alasannya. Bisakah seseorang menjelaskan perilaku ini? Alias ​​seharusnya hanya itu - alias ke lokasi.
tu-Reinstate Monica-dor duh
Sejauh yang saya pahami, alias yang "hanya itu", meskipun catatan bahwa jika Anda menghilangkan trailing /di alias dan yang locationdirektif, meminta /phpmyadminfilebenar-benar akan membuat Anda /home/phpmyadminfile. Adapun mengapa konfigurasi dalam pertanyaan tidak berfungsi, itu terlihat benar bagi saya, jadi saya curiga ada locationarahan lain yang tidak ditampilkan yang cocok ketika tidak dimaksudkan. Dalam hal ini, sebagai aliasujung dengan locationawalan, docs nginx sarankan menggunakan root /home;sebagai gantinya .
Scott Stevens

Jawaban:

12

Menemukan cara. Saya tidak yakin apakah itu yang TERBAIK, tapi itu pasti berfungsi sekarang.

Inilah yang saya lakukan:

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

Saya tidak yakin tetapi sudahkah Anda mencoba menulis seperti ini:

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

Juga, apa URI dari mana Anda mencoba mengaksesnya?

Sejauh yang saya mengerti, Anda harus menggunakan URI

/home/phpmyadmin/

dan tidak adil

/phpmyadmin/

Anda dapat membaca lebih lanjut tentang ini di sini: http://wiki.nginx.org/HttpCoreModule

Black-Pixel
sumber
Setidaknya terima kasih atas jawabannya. Tapi ya. Saya sudah mencobanya. Hal yang sama.
Rob
Mungkin Anda harus menambahkan alias ke lokasi lain. Anda dapat membandingkan konfigurasi Anda dengan yang ada di sana: serverfault.com/questions/223028/…
Black-Pixel
1

Mencoba

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;
    }
}
kervin
sumber
1

Alasan ini tidak berhasil adalah server memilih lokasi berbasis regex dan bukan lokasi berbasis awalan yang memiliki alias di dalamnya.

Itu hanya akan memilih satu. Ada operator yang bisa Anda gunakan untuk mendapatkan lokasi berbasis awalan untuk mengungguli regex, tetapi kemudian Anda akan menemukan php tidak akan berfungsi. Solusinya akan menjadi seperti jawaban kervin di mana regex PHP bersarang di dalam lokasi dengan direktif alias.

Namun saya menduga pengaturan SCRIPT_FILENAME-nya mungkin tidak berfungsi di sana karena ada perbedaan huruf besar pada URL dan direktori alias.

thomasrutter
sumber