În acest articol, vom arăta cum să rezolvați „400 Cerere greșită: cererea HTTP simplă a fost trimisă la portul HTTPS”În serverul HTTP Nginx. Această eroare apare în mod normal atunci când încercați să configurați Nginx pentru a gestiona atât solicitările HTTP, cât și HTTPS.
În scopul acestui ghid, luăm în considerare un scenariu în care nginx oferă mai multe site-uri web implementate blocuri de server (sau gazde virtuale în Apache) un singur site web folosește SSL, iar restul nu.
Citește și: Ghidul final pentru securizarea, întărirea și îmbunătățirea performanței Nginx
De asemenea, vom lua în considerare exemplul de configurație SSL de mai jos (am schimbat numele de domeniu real din motive de securitate), care îi spune lui nginx să asculte ambele porturi 80 și 443. Și toate cererile de pe HTTP ar trebui să fie redirecționate în mod implicit către HTTPS.
server {asculta 80; server_name example.com www.example.com; returnează 301 https://www.example.com$request_uri; } server {asculta 443 ssl http2; server_name example.com www.example.com; rădăcină /var/www/html/example.com/; index index.php index.html index.htm; #charset koi8-r; access_log /var/log/nginx/example.com/example.com_access_log; error_log /var/log/nginx/example.com/example.com_error_log error; # SSL / TLS configs ssl on; ssl_certificate /etc/ssl/certs/example_com_cert_chain.crt; ssl_certificate_key /etc/ssl/private/example_com.key; include /etc/nginx/ssl.d/ssl.conf; locație / {try_files $ uri $ uri / /index.php?$query_string; } error_page 500 502 503 504 /50x.html; location = /50x.html {root /var/www/html/example.com/; } # proxy scripturile PHP către Apache ascultând pe 127.0.0.1:80 # #location ~ \ .php $ {# proxy_pass http://127.0.0.1; #} # treceți scripturile PHP către serverul FastCGI ascultând pe 127.0.0.1:9000 # location ~ \ .php $ {root /var/www/html/example.com/; fastcgi_pass 127.0.0.1:9001; #fastcgi_pass unix: /var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; include fastcgi_params; include / etc / nginx / fastcgi_params; } # refuzați accesul la fișierele .htaccess, dacă documentul rădăcină al lui Apache coincide cu # #location al lui nginx ~ /\.ht {# refuzați toate; #} }
Folosind configurația de mai sus, odată ce un client încearcă să vă acceseze site-ul prin port 80 adică http://example.com
, eroarea în cauză va fi afișată ca în următoarea captură de ecran.
Veți întâlni această eroare deoarece de fiecare dată când un client încearcă să vă acceseze site-ul prin HTTP, solicitarea este redirecționată către HTTPS. Acest lucru se datorează faptului că nginx se așteaptă ca SSL să fie utilizat în tranzacție, dar cerințele originale (primite prin portul 80) erau HTTP simple, se plânge de eroare.
Pe de altă parte, dacă un client folosește https://example.com
, nu vor întâmpina eroarea de mai sus. În plus, dacă aveți alte site-uri web configurate să nu utilizeze SSL, nginx va încerca să utilizeze HTTPS în mod implicit pentru acestea, rezultând eroarea de mai sus.
Pentru a remedia această eroare, comentați linia de mai jos din configurația dvs. sau setați-o la opțiune.
#ssl pe SAU. ssl off.
Salvați și închideți fișierul. Apoi reporniți serviciul nginx.
# systemctl reporniți nginx. SAU. $ sudo systemctl reporniți nginx.
În acest fel, puteți activa nginx să gestioneze atât solicitările HTTP cât și HTTPS pentru mai multe blocuri de server.
În cele din urmă, mai jos este o listă de articole despre configurarea SSL HTTPS pe distribuții Linux obișnuite și FreeBSD.
Asta este tot pentru acum. Dacă cunoașteți orice altă modalitate de a rezolva această eroare, vă rugăm să ne anunțați prin intermediul formularului de feedback de mai jos.