Betulkan Permintaan HTTP Plain dihantar ke port https ralat di nginx

Betulkan Permintaan HTTP Plain dihantar ke port https ralat di nginx

Dalam artikel ini, kami akan menunjukkan cara menyelesaikan "400 Permintaan Buruk: Permintaan HTTP Plain dihantar ke port HTTPS"Dalam pelayan http nginx. Kesalahan ini biasanya timbul apabila anda cuba mengkonfigurasi nginx untuk mengendalikan permintaan HTTP dan HTTPS.

Untuk tujuan panduan ini, kami sedang mempertimbangkan senario di mana Nginx melayani beberapa laman web yang dilaksanakan melalui blok pelayan (atau tuan rumah maya di Apache) hanya satu laman web yang menggunakan SSL dan selebihnya tidak.

Baca juga: Panduan Terbaik untuk Mengamankan, Mengasaskan dan Meningkatkan Prestasi Nginx

Kami juga akan mempertimbangkan konfigurasi SSL sampel di bawah (kami telah menukar nama domain sebenar untuk alasan keselamatan), yang memberitahu Nginx untuk mendengar kedua -dua pelabuhan 80 dan 443. Dan semua permintaan di HTTP harus dialihkan ke HTTPS secara lalai.

Konfigurasi sampel nginx

pelayan mendengar 80; Contoh Server_name.com www.Contoh.com; kembali 301 https: // www.Contoh.com $ request_uri;  pelayan Dengar 443 SSL http2; Contoh Server_name.com www.Contoh.com; Root/var/www/html/contoh.com/; Indeks indeks.Indeks PHP.Indeks HTML.htm; #charset koi8-r; Access_log/var/log/nginx/contoh.com/contoh.com_access_log; error_log/var/log/nginx/contoh.com/contoh.ralat com_error_log; # SSL/TLS Configs SSL ON; ssl_certificate/etc/ssl/certs/example_com_cert_chain.CRT; ssl_certificate_key/etc/ssl/private/example_com.kunci; termasuk/etc/nginx/ssl.D/SSL.Con; lokasi / try_files $ uri $ uri / / indeks.php?$ query_string;  error_page 500 502 503 504 /50x.html; Lokasi = /50x.html root/var/www/html/contoh.com/;  # proksi skrip php ke Apache mendengar pada 127.0.0.1:80 # #location ~ \.php $  # proxy_pass http: // 127.0.0.1; # # lulus skrip php ke pelayan fastcgi mendengar pada 127.0.0.1: 9000 # lokasi ~ \.php $ root/var/www/html/contoh.com/; fastcgi_pass 127.0.0.1: 9001; #fastcgi_pass unix:/var/run/php-fpm/php-fpm.kaus kaki; indeks fastcgi_index.PHP; fastcgi_param script_filename $ document_root $ fastcgi_script_name; termasuk fastcgi_params; termasuk/etc/nginx/fastcgi_params;  # menafikan akses ke .fail htaccess, jika root dokumen Apache # bersetuju dengan nginx satu # #location ~ /\.ht  # menafikan semua; # 

Menggunakan konfigurasi di atas, apabila pelanggan cuba mengakses laman web anda melalui port 80 i.e http: // contoh.com, Kesalahan yang dimaksudkan akan dipaparkan seperti dalam pukulan skrin berikut.

Nginx 404 Ralat Permintaan Buruk

Anda menghadapi ralat ini kerana setiap kali clien cuba mengakses laman web anda melalui HTTP, permintaan itu diarahkan ke HTTPS. Ini kerana nginx mengharapkan SSL digunakan dalam urus niaga tetapi reques asal t (diterima melalui port 80) adalah http biasa, ia mengadu dengan kesilapan.

Sebaliknya, jika pelanggan menggunakan https: // contoh.com, mereka tidak akan menghadapi ralat di atas. Di samping itu, jika anda mempunyai laman web lain yang dikonfigurasikan untuk tidak menggunakan SSL, NGINX akan cuba menggunakan HTTPS secara lalai untuk mereka mengakibatkan ralat di atas.

Untuk memperbaiki ralat ini, komen garis di bawah dalam konfigurasi anda atau tetapkannya ke Mati.

#ssl on atau ssl 

Simpan dan tutup fail. Kemudian mulakan semula perkhidmatan nginx.

# Systemctl Mulakan semula nginx atau $ sudo Systemctl mulakan semula nginx 

Dengan cara ini, anda boleh mengaktifkan Nginx untuk mengendalikan permintaan HTTP dan HTTPS untuk pelbagai blok pelayan.

Akhirnya, di bawah adalah senarai artikel mengenai menubuhkan SSL HTTPS mengenai pengagihan Linux biasa dan FreeBSD.

  1. Menyediakan HTTPS dengan Let's Encrypt Sijil SSL untuk Nginx di RHEL/CentOS
  2. Selamat nginx dengan percuma mari enkripsi sijil SSL di Ubuntu dan Debian
  3. Cara menjamin nginx dengan ssl dan mari enkripsi dalam freebsd

Itu sahaja buat masa ini. Sekiranya anda mengetahui cara lain untuk menyelesaikan ralat ini, sila beritahu kami melalui borang maklum balas di bawah.