Chỉ thị địa điểm không hoạt động


10

Đối với máy chủ NGINX của tôi, tôi có một máy chủ ảo được thiết lập chỉ để xử lý nội dung tĩnh. Hiện tại tôi đang cố gắng thiết lập nó để hình ảnh có thời hạn sử dụng. Tuy nhiên, khi tôi tạo một chỉ thị vị trí cho việc này, mọi thứ chỉ dẫn đến 404.

Cấu hình của tôi bây giờ trông như thế này:

/srv/www/static.conf

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}

Lưu ý, tệp này được bao gồm từ /etc/nginx/nginx.conf, bên trong một lệnh http

Tôi đang cố gắng để truy cập hình ảnh, tại, chúng ta hãy nói ... static.example.com/images/screenshots/something.png. Chắc chắn, hình ảnh cũng tồn tại /srv/www/static/images/screenshots/something.png. Tuy nhiên, đi đến địa chỉ nói không hoạt động và chỉ cần cho tôi biết 404 Không tìm thấy .

Tuy nhiên, nếu tôi xóa location /imagesvà thay đổi location /thành ...

location / {
    root /srv/www/static;
}

Nó hoạt động! Tôi làm gì sai ở đây?

Câu trả lời:


14

Cấu hình của bạn đang theo những cạm bẫy cấu hình nginx Bạn nên đọc nó trước khi định cấu hình nginx.

Để trả lời câu hỏi của bạn, bạn không nên xác định rootvị trí, xác định nó một lần và thẻ vị trí sẽ tự động cho phép bạn gán quyền truy cập vào các thư mục cụ thể.

Ngoài ra, thay vì xác định root tùy chỉnh cho thư mục hình ảnh, hãy sử dụng try_files. Thư mục $uribản đồ sẽ /images/với /static/images/.

Hãy thử cấu hình này:

server {
    listen                          80;
    server_name                     static.*.*;
    root                            /srv/www;

    location /static/ {
            deny                    all;
    }

    location /images/ {
            expires                 1y;
            log_not_found           off;
            autoindex               off;
            try_files $uri static/images$uri;
    }
}

Cảm ơn bạn! Tôi đã đọc những cạm bẫy, nhưng tôi đoán trí nhớ của tôi đã làm tôi thất bại. Điều này hoạt động, mặc dù tôi đã chỉnh sửa nó một chút cho mục đích của tôi.
Thương hiệu Jesse


Nếu xác định rootbên trong locationlà thông lệ xấu, thì tại sao họ lại tự tặng nó trong docs / http / ngx_http_core_module.html # alias ? (xem nơi nó nói " nó là tốt hơn để sử dụng các chỉ thị gốc thay vì ") SỬA CHỮA : okay, có vẻ như rằng có chuyện gì được xác định nguồn gốc chủ yếu ở một vị trí, không chỉ bất kỳ thư mục gốc
aexl
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.