Tại sao bí danh nginx của tôi không hoạt động?


10

Tôi đang cố gắng thiết lập bí danh để khi ai đó truy cập /phpmyadmin/, nginx sẽ lấy nó từ /home/phpmyadmin/thay vì từ tài liệu gốc thông thường. Tuy nhiên, mỗi khi tôi kéo URL lên, nó sẽ cung cấp cho tôi 404 trên tất cả các mục không được kéo qua fastcgi. fastcgi dường như đang hoạt động tốt, trong khi phần còn lại thì không. straceđang nói với tôi rằng nó đang cố gắng kéo mọi thứ khác từ gốc tài liệu thông thường, nhưng tôi không thể hiểu tại sao. Bất cứ ai có thể cung cấp một số cái nhìn sâu sắc?

Đây là phần có liên quan trong cấu hình của tôi:

            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/;
            }

Là một người dùng apache lâu năm mới sử dụng nginx, tôi thấy điều này thực sự kỳ lạ và phức tạp không cần thiết. Tôi đã dành vài giờ xem qua tài liệu để cố gắng hiểu tại sao. Ai đó có thể vui lòng giải thích hành vi này? Bí danh chỉ nên như vậy - một bí danh cho một địa điểm.
tu-Tái lập Monica-dor duh

Theo như tôi hiểu nó, bí danh là "Chỉ là", mặc dù lưu ý rằng nếu bạn bỏ qua các dấu /trong bí danh các locationchỉ thị, yêu cầu /phpmyadminfilethực sự sẽ giúp bạn /home/phpmyadminfile. Về lý do tại sao cấu hình trong câu hỏi không hoạt động, nó có vẻ đúng với tôi, vì vậy tôi nghi ngờ có một lệnh khác locationkhông được hiển thị phù hợp khi không có ý định. Trong trường hợp này, khi aliaskết thúc bằng locationtiền tố, các tài liệu nginx đề nghị sử dụng root /home;thay thế .
Scott Stevens

Câu trả lời:


12

Tìm ra một cách. Tôi không chắc nó có phải là TỐT NHẤT hay không, nhưng nó chắc chắn đang hoạt động ngay bây giờ.

Đây là những gì tôi đã làm:

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

2

Tôi không chắc nhưng bạn đã thử viết nó theo cách này:

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

Ngoài ra, URI mà bạn đang cố truy cập là gì?

Theo tôi hiểu, bạn phải sử dụng URI

/home/phpmyadmin/

và không chỉ

/phpmyadmin/

Bạn có thể đọc thêm về nó ở đây: http://wiki.nginx.org/HttpCoreModule


Cảm ơn bạn đã trả lời, ít nhất. Nhưng vâng. Tôi đã thử nó. Điều tương tự.
Cướp

Có lẽ bạn phải thêm bí danh vào vị trí khác. Bạn có thể so sánh cấu hình của mình với cấu hình ở đó: serverfault.com/questions/223028/ Kẻ
Black-Pixel

1

Thử

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

Lý do điều này không hoạt động là máy chủ đang chọn vị trí dựa trên regex chứ không phải vị trí dựa trên tiền tố có bí danh trong đó.

Nó sẽ chỉ chọn một. Có một toán tử mà bạn có thể sử dụng để lấy tiền tố dựa trên vị trí để vượt qua regex, nhưng sau đó bạn sẽ thấy php sẽ không hoạt động. Giải pháp sẽ giống như câu trả lời của kervin trong đó regex PHP được lồng bên trong vị trí với chỉ thị bí danh.

Tuy nhiên, tôi nghi ngờ cài đặt SCRIPT_FILENAME của mình có thể không hoạt động ở đó vì có cách viết hoa khác nhau trên URL và thư mục bí danh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.