Làm thế nào tôi có thể gỡ lỗi nginx hơn nhật ký lỗi?


34

Hiện tại tôi đang nhận được một lũ HTTP khá lớn và điều đó khiến proxy ngược nginx của tôi tạo ra Cổng xấu 502.

Tôi có một máy chủ lối vào chạy nginx như một proxy cho máy chủ phụ trợ của tôi, nhưng nó chỉ nhận được một loạt connect() failed (110: Connection timed out) while connecting to upstreamlỗi. Tấn của họ. Nếu tôi bỏ qua máy chủ proxy để kết nối với phụ trợ, tôi có thể chạy trang web tốt, vì vậy tôi biết đó là proxy ngược ở đâu đó. Tuy nhiên, tôi không biết làm thế nào để xác định lý do tại sao nó hết thời gian.

Có ai giúp đỡ không?

chạy nginx 1.2.3 trên CentOS 6.2


Bạn có thể bắt đầu bằng cách cập nhật Nginx lên phiên bản mới nhất. Mặc dù, tôi không biết về một lỗi như vậy trong 1.2.3
Ben Lessani - Sonassi

2
.... và sau đó hãy xem bất cứ điều gì đang XÁC NHẬN CÁC KẾT NỐI TỪ NGINX
symcbean

Máy chủ phụ trợ của bạn là gì? Trước đây tôi đã bị nhầm lẫn bởi lỗi khi lỗi Nginx đang phục vụ thực sự đến từ phần phụ trợ. Có vẻ như không giống như trường hợp ở đây, nhưng bạn cần cập nhật câu hỏi của bạn với nhiều chi tiết hơn.
jeffatrackaid

Ngoài ra, bạn có kết nối qua mạng riêng / công cộng với phụ trợ không? Các IP của proxy có nằm trong danh sách trắng trong bất kỳ tường lửa, ddos ​​hoặc các công cụ loại giới hạn ip / tỷ lệ khác không? Netstat trên máy chủ phụ trợ trông như thế nào? Có bao nhiêu kết nối được mở? MaxCl Client trên phần cuối là gì? Bạn đang kiệt sức?
jeffatrackaid

Câu trả lời:


19

Tôi cho rằng bạn đã kích hoạt mức ghi nhật ký lỗi Nginx của mình để gỡ lỗi. Nếu không, bắt đầu từ đó.

Đặt cược tốt nhất của bạn có lẽ sẽ được sử dụng straceđể xem các cuộc gọi hệ thống được thực hiện bởi Nginx. Cụ thể, bạn sẽ muốn chú ý đến connect()các cuộc gọi và để mắt đến mã trả lại của những cuộc gọi này ( man 2 connectcó thể là bạn của bạn ở đây).

Khi bạn có thông tin đó, tốt hơn bạn có thể đưa ra một phỏng đoán có giáo dục về việc liệu vấn đề có bị giới hạn trong proxy frontend của bạn hay có liên quan gì đến các tương tác giữa proxy và máy chủ ứng dụng phụ trợ hay không.


37

Nó không nhận được nhiều mô phạm hơn thế này trừ khi bạn muốn đặt các đầu dò dtrace:

  1. Đặt mức ghi nhật ký gỡ lỗi: /etc/nginx/nginx.conf:

    ...
    http {
            ...
            error_log /var/log/nginx/error.log debug; # todo testing remove me not for production use
            ...
    }
    
  2. Thiết lập tcpdump trong một cửa sổ khác:

    tcpdump not port 22 -vvv -s0 -q -XXX
    
  3. Giám sát các tệp nhật ký trong một cửa sổ khác:

    tail -f /var/log/nginx/*
    
  4. Khởi động nginx tương tác với strace:

    # top of /etc/nginx/nginx.conf:
    
    daemon off; # todo testing remove me not for production use
    

    Và sau đó

     $ strace nginx 
    

Gỡ lỗi thêm có thể có với một nginx được biên dịch với --with-debug. Kiểm tra nó bằng cách chạy:

    nginx -V 2>&1 | grep -- '--with-debug' # no output if not debug

Một mô-đun tốt khác không được biên dịch theo mặc định là: HttpStubStatusModule . Trong tất cả khả năng, mọi thiết lập hợp lý sẽ yêu cầu nginx được biên dịch tùy chỉnh (bao bì được khuyến nghị cao sử dụng các công cụ đóng gói của distro).

Hầu hết trong số này không phù hợp để sử dụng sản xuất, hãy xem việc biên dịch nginx với gperf nếu bạn cần thêm số liệu thống kê.


ở bước 2, các công việc sau đây đối với tôi: tcpdump -i any not port 22 -vvv -s0 -q -XXX
ccppjava

5

Có vẻ như bạn đang gỡ lỗi một trang web có lưu lượng truy cập cao.

Sử dụng debugvới debug_connectionchỉ thị để nhật ký lỗi nginx sẽ chỉ hiển thị nhật ký gỡ lỗi từ IP của bạn.

Khi bạn bắt đầu thấy một số nhật ký lỗi hữu ích thay vì kích hoạt tùy chọn gỡ lỗi cho toàn bộ cấu hình nginx, hãy thêm một lệnh riêng error_log /path/to/some/file/ debug;trong location {..}khối chịu trách nhiệm cho kết nối Reverse_proxy.

Bằng cách này, bạn sẽ chỉ có thể cách ly nhật ký lỗi gỡ lỗi từ IP của mình.

Cố gắng liên hệ nó với yêu cầu bạn đang thực hiện (từ trình duyệt của bạn).

Ví dụ: vui lòng kiểm tra: https://easyengine.io/tutorials/nginx/debugging/

Một cấp độ phía trước, bạn có thể sử dụng HttpEchoModule của Nginx


2

Tôi chưa bao giờ thấy Nginx là một nút cổ chai, trong hầu hết các trường hợp, nó có khả năng nhiều hơn khả năng của nó. Nhưng nếu bạn đã thử nghiệm mà không có Nginx và không tìm thấy lỗi, thì nó sẽ là (hoặc cả hai):

  1. Sự cố cấu hình Nginx
    1. Thời gian ngược dòng giá trị sai
    2. URL thăm dò sai trên thượng nguồn
    3. Quá ít công nhân
    4. V.v.
  2. Nút cổ chai hệ điều hành TCP / IP
    1. Có thể là chính việc ủy ​​quyền đang gây ra sự trùng lặp các cổng và trạng thái mở. Có thể là mô tả tệp, cổng, kết nối TCP

Không nhìn thấy cấu hình Nginx của bạn, không ai có thể nhận xét về cái trước. Và không có đầu ra phù hợp từ HĐH, không ai có thể nhận xét về cái sau.

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.