Mediu inconjurator:
- Versiunea Laravel: 5.8.29
- Versiunea PHP
$ php --versiune
: PHP 7.2.24 (cli)
- Versiunea NGINX
$ nginx -v
: versiunea nginx: nginx/1.14.0 (Ubuntu)
Declarație problemă:
Totul funcționează bine, cu excepția unui anume API în care includ în antet un simbol (tipic purtător) și returnează o eroare 502 din Chrome (în fila de rețea)
Cu toate acestea, când încerc să sun acest lucru de la Postman sau folosind răsuci
cerere cli de la server, returnează datele corect.
Ce ar putea fi în neregulă aici?
Eroare
Gateway greșit NGINX 502
Bușteni
$ sudo tail -30 /var/log/nginx/error.log
[eroare] 4713#4713: *705118 recv() a eșuat (104: Resetarea conexiunii de către peer) în timp ce citiți antetul răspunsului din amonte, client: 111.11.11.111, server: domain.com, cerere: „POST /action/api/path HTTP/1.1”, în amonte: „fastcgi://unix:/var/run/php/php7.2-fpm.sock:”, gazdă: „domain.com”, referitor: „domain.com/path”
$ sudo tail /var/log/php7.2-fpm.log
AVERTISMENT: [pool www] copilul 28524 a ieșit pe semnalul 11 (SIGSEGV - miez descarcat) după
ANUNȚ: [pool www] copilul 8033 a pornit
Fișiere și configurație:
/etc/nginx/nginx.conf
utilizator www-date;
worker_proceses auto;
pid /run/nginx.pid;
includ /etc/nginx/modules-enabled/*.conf;
evenimente {
conexiuni_muncitor 768;
# multi_accept on;
}
http {
##
# Setări de bază
##
sendfile activat;
tcp_nopush activat;
tcp_nodelay activat;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
includ /etc/nginx/mime.types;
aplicație de tip_default/octet-stream;
##
# Setări SSL
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Eliminarea SSLv3, ref: POODLE
ssl_prefer_server_ciphers activat;
##
# Setări de înregistrare
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Setări Gzip
##
gzip on;
# gzip_vary on;
# gzip_proxied orice;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Configurații gazdă virtuală
##
includ /etc/nginx/conf.d/*.conf;
includ /etc/nginx/sites-enabled/*;
# dimensiune maximă a postării
client_max_body_size 100M;
}
#Poștă {
# # Vezi exemplu de script de autentificare la:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities „TOP” „USER”;
# # imap_capabilities „IMAP4rev1” „UIDPLUS”;
#
# Server {
# asculta localhost:110;
# protocol pop3;
# proxy activat;
#}
#
# Server {
# asculta localhost:143;
# protocol imap;
# proxy activat;
#}
#}
/etc/nginx/sites-available/domain.com
Server {
asculta 443;
nume_server domeniu.com;
rădăcină /cale/public;
add_header X-Frame-Options „SAMEORIGIN”;
add_header X-Content-Type-Options "nosniff";
index index.php;
set de caractere utf-8;
Locație / {
try_files $uri $uri/ /index.php?$query_string;
}
locație = /favicon.ico { access_log off; log_not_found off; }
locație = /robots.txt { access_log off; log_not_found off; }
eroare_page 404 /index.php;
locație ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
locație ~ /\.(?!cunoscut).* {
nega totul;
}
ssl activat;
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 activat;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
}
Server {
asculta 80;
nume_server domeniu.com;
rescrie ^/(.*) https :// domain.com/$1 permanent;
}
/etc/php/7.2/fpm/pool.d/www.conf
Directive pool
[www]
utilizator = www-data
grup = www-data
asculta = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dinamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
Solicitare PHP cURL
private $headers = [
„Accept: application/json”,
„Tip de conținut: aplicație/json”,
];
private $baseURL = 'http://otherdomain.in/api/v1/';
funcție privată postRequest($date, $endpoint) {
dacă ( !is_null($this->apiToken) ) {
$authorization = "Autorizare: Purtător {$this->apiToken}";
array_push($this->headers, $autorizare);
}
$url = "{$this->baseURL}/{$endpoint}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, json_encode($this->headers));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $date);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$responseJSON = curl_exec($ch);
$răspuns = json_decode($responseJSON, TRUE);
returnează $response
}
EDITARE 1:
Am repornit fastcgi
proces folosind următoarele interogare
$ sudo service php7.2-fpm reporniți
$ sudo tail /var/log/php7.2-fpm.log
[13-Nov-2021 05:32:03] ANUNȚ: intervalul de monitorizare systemd setat la 10000ms
[13-Nov-2021 05:32:56] AVERTISMENT: [pool www] copilul 28870 a ieșit la semnalul 11 (SIGSEGV - core duped) după 53,229996 secunde de la pornire
[13-Nov-2021 05:32:56] ANUNȚ: [pool www] copilul 28879 a început
[13-Nov-2021 05:42:47] ANUNȚ: Încheierea...
[13-Nov-2021 05:42:47] ANUNȚ: ieșire, la revedere!
[13-Nov-2021 05:42:47] ANUNȚ: fpm rulează, pid 29564
[13-Nov-2021 05:42:47] ANUNȚ: gata să gestioneze conexiunile
[13-Nov-2021 05:42:47] ANUNȚ: intervalul de monitorizare systemd setat la 10000ms
[13-Nov-2021 05:43:04] AVERTISMENT: [pool www] copilul 29592 a ieșit pe semnalul 11 (SIGSEGV - core duped) după 17.115362 secunde de la pornire
[13-Nov-2021 05:43:04] ANUNȚ: [pool www] copilul 29596 a început
EDITARE 2:
Am găsit că al meu opcache
este deja un comentariu. Așadar, nu are rost să dezactivați sau să creșteți limita de memorie, după cum urmează Răspuns
/etc/php/7.2/fpm/php.ini
[opcache]
; Stabilește dacă Zend OPCache este activat
;opcache.enable=0
; Stabilește dacă Zend OPCache este activat pentru versiunea CLI a PHP
;opcache.enable_cli=0
; Dimensiunea de stocare a memoriei partajate OPcache.
;opcache.memory_consumption=196