Điểm:2

Nginx error - 110: Connection timed out while connecting to upstream(django-python)

lá cờ ae

The error is

2021/08/18 8:57:28 [error] 19915#19915: *36133 upstream timed out (110: Connection timed out) while connecting to upstream, client: 10.11.12.1(proxy-ip), server: example.com, request: "GET /static/css/bootstrap.min.css HTTP/1.1", upstream: "http://127.0.0.1:8000/static/css/bootstrap.min.css", host: "www.example.com"

error brief description

The website is running fine always, but some times there is this above error which i think is due to the high traffic to the website, when the website goes down, the site will not come up immediately after restarting nginx and supervisor also

Some times it will take 5 to 6 hours for the site to come up

Servers - Ubuntu-18.04 LTS

webserver configs as follow

i have a proxy server and application server

  1. proxy server - nginx

  2. application server - running nginx & (supervisor - django application)

  3. proxy server -nginx-config

     server {
    
         listen 443 ssl http2;
         ssl_certificate /etc/nginx/ssl/bundle.crt;
         ssl_certificate_key /etc/nginx/ssl/start.example.com.key;
         server_name example.com www.example.com ;
         location = /basic_status {
         stub_status;
         access_log   off;
         allow 1.2.3.4;
         deny all;
         }
         location /{
    
         proxy_connect_timeout       300;
         proxy_send_timeout          300;
         proxy_read_timeout          300;
         send_timeout                300;
         proxy_pass http://10.11.12.2;  #proxy to application server
         proxy_http_version 1.1;
         proxy_set_header Connection "";
         add_header Access-Control-Allow-Origin .example.com;
         add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
         add_header X-XSS-Protection "1; mode=block";
         add_header "Pragma" "no-cache"; 
         proxy_set_header Host $http_host;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Scheme $scheme;
    
         #add_header Content-Security-Policy "default-src 'unsafe-inline' 'self'; script-src 'unsafe-inline' 'self' ";
         error_page 404 /404.html;
         location = /404.html {
         root /var/www/error;
         internal;
         }
         error_page 500 502 503 504 /500.html;
         location = /500.html {
         root /usr/share/nginx/html;
         internal;
         }
    
     }
    
  4. application server - nginx

    server {
             listen 80 default_server;
             listen [::]:80 default_server;
             server_name example.com www.example.com;
    
             location /{
    
                 proxy_pass http://127.0.0.1:8000;
                 proxy_read_timeout 180;
    
             }                                                                                                                    
      }
    
  5. application-server - supervisor

     [program:portal]
     command =/root/portal_env/bin/gunicorn  portal.wsgi:application -b 0.0.0.0:8000 --timeout 180 --workers=3 ;
     user = root                                                ; User to run as
     directory = /root/portal_env/portal
     stdout_logfile = /root/portal_env/logs/portal.log ; Where to write log messages
     redirect_stderr = true                                       ; Save stderr in the same log
     autostart = true
     autorestart = true
     environment = LANG = en_US.UTF-8,LC_ALL = en_US.UTF-8              ; Set UTF-8 as default encoding
    
Michael Hampton avatar
lá cờ cz
Kiểm tra nhật ký ứng dụng của bạn.
Điểm:0
lá cờ us

Đầu tiên tôi sẽ đi kèm với một số phản hồi cho thiết lập của bạn.

Khi bạn đang xây dựng ứng dụng Python, không nên sử dụng gunicorn làm máy chủ lưu trữ, bản dựng của nó dành cho việc phát triển, bạn ngừng sử dụng uWSGI cho ứng dụng Python của mình.

Tiếp theo, khi bạn đang sử dụng proxy trong NGINX, tôi khuyên bạn nên tắt bộ đệm cho proxy của mình

tắt proxy_buffering;

Khi bạn vô hiệu hóa tính năng lưu vào bộ đệm, bạn làm cho trang web chậm hơn một chút về thời gian tải để máy khách nhận ra nhu cầu gửi gói đầy đủ từ máy chủ đến máy khách. những người hết hạn của tôi nói với tôi rằng nó không quá nhiều khi chúng tôi đang nói về việc phát triển web và nó bảo vệ bạn về lâu dài nếu bạn muốn chạy ứng dụng của mình trên nhiều máy chủ đằng sau một bộ cân bằng tải như NGINX Proxy, Docker Cluster hoặc thứ gì đó tương tự.

Sau phản hồi của tôi, có vẻ như bạn có một thứ gì đó trong mã của mình ở đó cứ lặp đi lặp lại và không bao giờ dừng lại hoặc bạn có một kết nối/truy vấn SQL rất lâu, mất hơn 3 phút để thực thi.

Những gì tôi sẽ giới thiệu ở đây là nó cho phép đăng nhập chậm trên cơ sở dữ liệu của bạn để bạn có thể nhận được nhật ký cho tất cả các truy vấn, mất hơn 0,5 giây, nó có thể là một chỉ mục bị thiếu trong cơ sở dữ liệu của bạn.

Python bình thường không mất 3 phút để thực thi một vùng tập lệnh/mã nên âm thanh của nó giống như một dịch vụ bên ngoài, vd. cơ sở dữ liệu, api hoặc một cái gì đó trong trường hợp này.

Khi bạn đã bật ghi nhật ký chậm cho cơ sở dữ liệu của mình, trường hợp thứ hai sẽ tạo một nhật ký đơn giản cho tập lệnh của bạn với "thời gian bắt đầu" + "thời gian kết thúc" và kết xuất nó bằng phương thức/trang/url ở khu vực này và kết xuất nó thành file để bạn dễ dàng mở, muộn nó chạy tầm 5-6 tiếng như bạn nói hoặc lâu hơn để bắt lỗi bạn.

Tôi nghĩ đó là cách tốt nhất, vấn đề đầu tiên sẽ là tìm ra lý do tại sao mã của bạn mất 3 phút để thực thi.

chjp avatar
lá cờ ae
Xin chào Paris làm cách nào để tìm ra mã mất 3 phút để thực thi, tôi đặt thời gian chờ 180 để giải quyết vấn đề hết thời gian phụ trợ
ParisNakitaKejser avatar
lá cờ us
Nó phụ thuộc vào mã của bạn như thế nào, bạn cần phân tích mã của mình làm gì và bạn có kết nối bên ngoài nào, âm thanh của nó giống như cổ phiếu của nó trong một kết nối, tôi đoán là kết nối MySQL của nó. để làm điều này, bạn cần thêm nhật ký chậm vào tệp my.cnf của mình, bạn có thể đọc thêm trong tài liệu mysql về nó.nếu điều này không giúp ích gì cho bạn, tôi có thể khuyên bạn nên bật ghi nhật ký cho dự án django của mình và in ra thiết bị đầu cuối với thời gian "bắt đầu/kết thúc" cho mọi yêu cầu.
chjp avatar
lá cờ ae
xin chào paris, cảm ơn vì sự giúp đỡ của bạn, vâng, có kết nối db mysql với mã django và về nhật ký để tìm hiểu mọi thời gian bắt đầu và kết thúc yêu cầu, đây là mã mà bạn muốn nói là thời gian nhập start_time = time.time() chủ yếu() print("--- %s seconds ---" % (time.time() - start_time))
ParisNakitaKejser avatar
lá cờ us
Sau đó, muộn nó sẽ ở lại cho đến khi bạn gặp lại vấn đề và xem điều gì sẽ xảy ra :) muộn tôi biết khi nào bạn có thêm dữ liệu

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.