สิ่งแวดล้อม:
- เวอร์ชัน 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