Score:1

ข้อผิดพลาด nginx 502 สำหรับการโทร api จากแอปพลิเคชัน แต่ทำงานในคำขอบุรุษไปรษณีย์และ curl

ธง ht

สิ่งแวดล้อม:

  • เวอร์ชัน Laravel: 5.8.29
  • เวอร์ชัน PHP $php --version: PHP 7.2.24 (cli)
  • รุ่น NGINX $ nginx -v: รุ่น nginx: nginx/1.14.0 (Ubuntu)

คำชี้แจงปัญหา:

ทุกอย่างทำงานได้ดี ยกเว้น API หนึ่งที่ฉันรวมโทเค็นบางอย่างไว้ในส่วนหัว (โทเค็นผู้ถือทั่วไป) และส่งคืนข้อผิดพลาด 502 จาก Chrome (ในแท็บเครือข่าย)

อย่างไรก็ตาม เมื่อฉันพยายามโทรหาสิ่งนี้จากบุรุษไปรษณีย์หรือใช้ ขด คำขอ cli จากเซิร์ฟเวอร์ มันส่งคืนข้อมูลอย่างถูกต้อง

มีอะไรผิดปกติที่นี่?


ข้อผิดพลาด

NGINX 502 เกตเวย์เสีย

บันทึก

$ sudo tail -30 /var/log/nginx/error.log
[ข้อผิดพลาด] 4713#4713: *705118 recv() ล้มเหลว (104: การรีเซ็ตการเชื่อมต่อโดยเพียร์) ขณะอ่านส่วนหัวการตอบสนองจากอัปสตรีม ไคลเอ็นต์: 111.11.11.111 เซิร์ฟเวอร์: domain.com คำขอ: "POST /action/api/path HTTP/1.1", อัปสตรีม: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", โฮสต์: "domain.com", ผู้อ้างอิง: "domain.com/path"

$ sudo หาง /var/log/php7.2-fpm.log
คำเตือน: [พูล www] ลูก 28524 ออกจากสัญญาณ 11 (SIGSEGV - คอร์ทิ้ง) หลังจาก 
ข้อสังเกต: [pool www] child 8033 เริ่มต้นแล้ว

ไฟล์ & การกำหนดค่า:

/etc/nginx/nginx.conf

ผู้ใช้ www-data;
worker_processes อัตโนมัติ
pid /run/nginx.pid;
รวม /etc/nginx/modules-enabled/*.conf;

เหตุการณ์ {
    worker_connections 768;
    # multi_accept บน;
}

http {

    ##
    # การตั้งค่าพื้นฐาน
    ##

    ส่งไฟล์บน;
    tcp_nopush บน;
    tcp_nodelay บน;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # ปิด server_tokens;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect ปิด;

    รวม /etc/nginx/mime.types;
    แอปพลิเคชัน default_type/octet-stream;

    ##
    # การตั้งค่า SSL
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # วาง SSLv3 อ้างอิง: พุดเดิ้ล
    เปิด ssl_prefer_server_ciphers;

    ##
    # การตั้งค่าการบันทึก
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # การตั้งค่า Gzip
    ##

    เปิด gzip;

    # gzip_vary บน;
    # gzip_proxyed ใด ๆ ;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types ข้อความ/ข้อความล้วน/แอปพลิเคชัน css/แอปพลิเคชัน json/ข้อความจาวาสคริปต์/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+rss ข้อความ/จาวาสคริปต์;

    ##
    # การกำหนดค่าโฮสต์เสมือน
    ##

    รวม /etc/nginx/conf.d/*.conf;
    รวม /etc/nginx/sites-enabled/*;

    # ขนาดโพสต์สูงสุด
    client_max_body_size 100M;
}


#จดหมาย {
# # ดูตัวอย่างสคริปต์การตรวจสอบได้ที่:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "ผู้ใช้";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
# เซิร์ฟเวอร์ {
# ฟัง localhost:110;
#โปรโตคอลpop3;
# เปิดพร็อกซี;
# }
# 
# เซิร์ฟเวอร์ {
# ฟัง localhost:143;
# โปรโตคอล imap;
# เปิดพร็อกซี;
# }
#}

/etc/nginx/sites-available/domain.com

เซิร์ฟเวอร์ {
    ฟัง 443;
    server_name โดเมน.คอม;
    รูท / เส้นทาง / สาธารณะ;

    add_header X-Frame-ตัวเลือก "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    ดัชนี index.php;

    ชุดอักขระ utf-8;

    ที่ตั้ง / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    สถานที่ = /favicon.ico { access_log off; ปิด log_not_found; }
    ตำแหน่ง = /robots.txt { access_log off; ปิด log_not_found; }

    error_page 404 /index.php;

    ตำแหน่ง ~ \.php$ {
        fastcgi_pass ยูนิกซ์:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        รวม fastcgi_params;
    }

    สถานที่ ~ /\.(?!ที่รู้จักกันดี)* {
        ปฏิเสธทั้งหมด
    }

    เปิด ssl;
    ssl_certificate /etc/nginx/ssl/domain.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.com.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    เปิด ssl_prefer_server_ciphers;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

}

เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name โดเมน.คอม;
    เขียนใหม่ ^/(.*) https://domain.com/$1 ถาวร;
}

/etc/php/7.2/fpm/pool.d/www.conf คำสั่งสระว่ายน้ำ

[www]

ผู้ใช้ = www-ข้อมูล
กลุ่ม = www-ข้อมูล

ฟัง = /run/php/php7.2-fpm.sock

Listen.owner = www-ข้อมูล
Listen.group = www-ข้อมูล

pm = ไดนามิก
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

คำขอ PHP cURL

ส่วนหัว $ ส่วนตัว = [
    'ยอมรับ: แอปพลิเคชัน/json'
    'ประเภทเนื้อหา: แอปพลิเคชัน/json'
];

$baseURL ส่วนตัว = 'http://otherdomain.in/api/v1/';


ฟังก์ชันส่วนตัว postRequest ($data, $endpoint) {

    ถ้า ( !is_null($this->apiToken) ) {

        $authorization = "การอนุญาต: ผู้ถือ {$this->apiToken}";
        array_push($this->headers, $authorization);
    }

    $url = "{$this->baseURL}/{$endpoint}";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, json_encode($this->ส่วนหัว) );
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, จริง);

    $responseJSON = curl_exec($ch);

    $response = json_decode($responseJSON, จริง);

    ส่งคืนการตอบสนอง $
}

แก้ไข 1:

ฉันเริ่มต้นใหม่แล้ว ฟาสต์ซีจี ดำเนินการโดยใช้ต่อไปนี้ สอบถาม

บริการ $ sudo รีสตาร์ท php7.2-fpm

$ sudo หาง /var/log/php7.2-fpm.log
[13-พ.ย.-2021 05:32:03 น.] ข้อสังเกต: ตั้งช่วงเวลาการตรวจสอบ systemd เป็น 10,000ms
[13-พ.ย.-2021 05:32:56] คำเตือน: [pool www] child 28870 ออกจากสัญญาณ 11 (SIGSEGV - core dumped) หลังจาก 53.229996 วินาทีจากจุดเริ่มต้น
[13-พ.ย.-2021 05:32:56] ประกาศ: [พูล www] เด็ก 28879 เริ่มแล้ว
[13-พฤศจิกายน-2564 05:42:47 น.] ประกาศ: กำลังยุติ ...
[13-พ.ย.-2021 05:42:47] ประกาศ: ออกไป ลาก่อน!
[13-พ.ย.-2021 05:42:47] ประกาศ: fpm กำลังทำงานอยู่, pid 29564
[13-พ.ย.-2021 05:42:47] ข้อสังเกต: พร้อมจัดการการเชื่อมต่อ
[13-พ.ย.-2021 05:42:47] ข้อสังเกต: ตั้งช่วงเวลาการตรวจสอบ systemd เป็น 10,000ms
[13-พ.ย.-2021 05:43:04] คำเตือน: [pool www] child 29592 ออกจากสัญญาณ 11 (SIGSEGV - core dumped) หลังจาก 17.115362 วินาทีนับจากเริ่มต้น
[13-พ.ย.-2021 05:43:04 น.] ข้อสังเกต: [pool www] child 29596 เริ่มแล้ว

แก้ไข 2:

ฉันพบว่าของฉัน ขุ่น เป็นความคิดเห็นแล้ว ดังนั้นจึงไม่มีจุดที่ต้องปิดการใช้งานหรือเพิ่มขีดจำกัดหน่วยความจำดังต่อไปนี้ คำตอบ

/etc/php/7.2/fpm/php.ini

[opcache]
; กำหนดว่าเปิดใช้งาน Zend OPCache หรือไม่
;opcache.enable=0

; กำหนดว่าเปิดใช้งาน Zend OPCache สำหรับ PHP เวอร์ชัน CLI หรือไม่
;opcache.enable_cli=0

; ขนาดพื้นที่จัดเก็บหน่วยความจำที่ใช้ร่วมกันของ OPcache
;opcache.memory_consumption=196

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา