Trang lỗi dự phòng cục bộ Nginx nếu không có đích proxy


9

Tôi đang chuyển tiếp yêu cầu đến một dịch vụ địa phương thông qua máy chủ Nginx. Những gì tôi cố gắng thực hiện bây giờ là chuyển sang trang lỗi cục bộ trong trường hợp dịch vụ không khả dụng.

Cấu hình hiện tại của tôi là

server {
    listen       80;
    server_name  "";

    location / {
        proxy_pass  http://127.0.0.1:9080;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 1;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
        proxy_intercept_errors on;
    }

    error_page 501 502 503 @maintenance;
    location @maintenance {
            root   /locust/www/fallback/htdocs;
            index  index.html index.htm;
    }
}

Việc ủy ​​quyền hoạt động, nhưng ngay khi tôi thực hiện dịch vụ của mình trên 9080 thì không có sẵn index.html của vị trí bảo trì của tôi KHÔNG được hiển thị.

Bất kỳ đề xuất về những gì là sai với cấu hình này?

Câu trả lời:


12

Trên thực tế, tôi chỉ phải sửa đổi một chút cấu hình của bạn:

error_page 501 502 503 /500.html;
location = /500.html {
        root   /locust/www/fallback/htdocs;
}

và rõ ràng đổi tên index.htmlbạn muốn trình bày 500.html.


1
Sử dụng phương pháp này, điều gì xảy ra khi ứng dụng chạy trên proxy_pass ném 501, 502 hoặc 503? Một số ứng dụng (như Django) xử lý lỗi 50x của riêng chúng để chúng có thể có các trang lỗi tùy chỉnh. Cách tiếp cận ở đây sẽ thổi phồng ứng dụng tạo ra các trang lỗi 50x với trang Nginx 500.html?
Joe J

Tôi chưa kiểm tra nó, nhưng tôi chắc chắn 99%, chính xác là những lỗi đó sẽ hiển thị /500.html. Ý tưởng là, khi nginx nhận được 501 502 503 từ máy chủ proxy, nó sẽ hiển thị /500.html. Các máy chủ proxy là django.
đai ốc

1

Cố gắng chỉ định url chính xác cho trang lỗi như:

    proxy_intercept_errors on;
    error_page  500 502 503 504 402 403 401  /500.html;
    root   /locust/www/fallback/htdocs;

Không. :( Tôi đã thử thay đổi cấu hình của bạn ở cả hai vị trí nhưng không thành công.
Dennis Winter
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.