เหตุใดนามแฝง nginx ของฉันจึงไม่ทำงาน


10

ฉันกำลังพยายามตั้งค่านามแฝงดังนั้นเมื่อมีคนเข้าถึง/phpmyadmin/nginx จะดึงมันมา/home/phpmyadmin/มากกว่าจากรูทเอกสารปกติ อย่างไรก็ตามทุกครั้งที่ฉันดึง URL มันจะให้ 404 กับทุกรายการที่ไม่ถูกดึงผ่าน fastcgi 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/;
            }

ในฐานะผู้ใช้ apache มานานถึง nginx ฉันพบว่าสิ่งนี้แปลกและซับซ้อนโดยไม่จำเป็น ฉันใช้เวลาหลายชั่วโมงในการดูเอกสารเพื่อพยายามทำความเข้าใจว่าทำไม มีคนช่วยอธิบายพฤติกรรมนี้ได้ไหม นามแฝงควรเป็นเช่นนั้น - นามแฝงของสถานที่
tu-Reinstate Monica-dor duh

เท่าที่ผมเข้าใจมันเป็นนามแฝง "เพียงแค่ว่า" แม้ว่าทราบว่าถ้าคุณไม่ใช้ต่อท้าย/ในนามแฝงและlocationสั่งขอจริงคุณจะได้รับ/phpmyadminfile /home/phpmyadminfileสำหรับสาเหตุที่การตั้งค่าในคำถามใช้งานไม่ได้ดูเหมือนว่าถูกต้องสำหรับฉันดังนั้นฉันสงสัยว่าจะมีlocationคำสั่งอื่นที่ไม่แสดงซึ่งตรงกับเมื่อไม่ต้องการ ในกรณีนี้เป็นaliasปลายที่มีlocationคำนำหน้าเอกสาร Nginx ขอแนะนำให้ใช้root /home;แทน
Scott Stevens

คำตอบ:


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/…
Black-Pixel

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

เหตุผลนี้ใช้ไม่ได้เนื่องจากเซิร์ฟเวอร์กำลังเลือกตำแหน่งตาม regex ไม่ใช่ตำแหน่งตามคำนำหน้าที่มีนามแฝงอยู่

มันจะเลือกเพียงหนึ่ง มีโอเปอเรเตอร์ที่คุณสามารถใช้เพื่อให้ได้ตำแหน่งที่มีคำนำหน้าเพื่ออยู่เหนือกว่า regex แต่คุณจะพบว่า php ไม่ทำงาน การแก้ปัญหาจะเป็นเหมือนคำตอบของ kervin ที่ PHP regex ซ้อนอยู่ภายในสถานที่ด้วยคำสั่งนามแฝง

ฉันสงสัยว่าการตั้งค่า SCRIPT_FILENAME ของเขาอาจไม่ทำงานเนื่องจากมีการใช้อักษรตัวพิมพ์ใหญ่ต่างกันใน URL และไดเรกทอรีที่ใช้นามแฝง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.