Perbaiki “Permintaan HTTP biasa dikirim ke port https” di Nginx

Perbaiki “Permintaan HTTP biasa dikirim ke port https” di Nginx

Dalam artikel ini, kami akan menunjukkan cara menyelesaikan “400 Permintaan Buruk: Permintaan HTTP biasa dikirim ke port https”Di server Nginx HTTP. Kesalahan ini biasanya muncul saat Anda mencoba mengkonfigurasi NGINX untuk menangani permintaan HTTP dan HTTPS.

Untuk tujuan panduan ini, kami sedang mempertimbangkan skenario di mana Nginx melayani beberapa situs web yang diterapkan melalui blok server (atau host virtual di Apache) hanya satu situs web yang menggunakan SSL dan sisanya tidak.

Baca juga: Panduan utama untuk mengamankan, mengeras, dan meningkatkan kinerja Nginx

Kami juga akan mempertimbangkan sampel konfigurasi SSL di bawah ini (kami telah mengubah nama domain yang sebenarnya untuk alasan keamanan), yang memberitahu Nginx untuk mendengarkan kedua port 80 Dan 443. Dan semua permintaan pada http harus dialihkan ke https secara default.

Konfigurasi Sampel Nginx

server dengarkan 80; Contoh server_name.com www.contoh.com; Return 301 https: // www.contoh.com $ request_uri;  server dengarkan 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.kesalahan 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.conf; Lokasi / TRY_FILES $ URI $ URI / / INDEX.php?$ query_string;  error_page 500 502 503 504 /50x.html; Lokasi = /50x.html root/var/www/html/contoh.com/;  # proxy skrip php untuk mendengarkan apache pada 127.0.0.1:80 # #location ~ \.php $  # proxy_pass http: // 127.0.0.1; # # Lewati skrip php ke server fastcgi mendengarkan 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; Sertakan fastcgi_params; termasuk/etc/nginx/fastcgi_params;  # tolak akses ke .file htaccess, jika dokumen Apache root # setuju dengan satu # #location ~ /\ Nginx.ht  # tolak semua; # 

Menggunakan konfigurasi di atas, begitu klien mencoba mengakses situs Anda melalui port 80 Saya.e http: // contoh.com, Kesalahan yang dimaksud akan ditampilkan seperti di layar berikut.

Nginx 404 Kesalahan Permintaan Buruk

Anda menghadapi kesalahan ini karena setiap kali seorang clien mencoba mengakses situs Anda melalui http, permintaan tersebut dialihkan ke https. Itu karena nginx mengharapkan SSL untuk digunakan dalam transaksi namun permintaan asli (diterima melalui port 80) adalah http biasa, ia mengeluh dengan kesalahan tersebut.

Di sisi lain, jika klien menggunakan https: // contoh.com, Mereka tidak akan mengalami kesalahan di atas. Selain itu, jika Anda memiliki situs web lain yang dikonfigurasi untuk tidak menggunakan SSL, Nginx akan mencoba menggunakan HTTPS secara default untuk mereka yang menghasilkan kesalahan di atas.

Untuk memperbaiki kesalahan ini, komentari baris di bawah ini dalam konfigurasi Anda atau atur ke OFF.

#ssl on atau ssl off 

Simpan dan tutup file. Kemudian restart layanan nginx.

# Systemctl restart nginx atau $ sudo systemctl restart nginx 

Dengan cara ini, Anda dapat mengaktifkan NGINX untuk menangani permintaan HTTP dan HTTPS untuk beberapa blok server.

Akhirnya, di bawah ini adalah daftar artikel tentang pengaturan SSL HTTPS pada distribusi Linux umum dan freebsd.

  1. Menyiapkan HTTPS dengan Let's Encrypt SSL Certificate untuk Nginx di RHEL/CentOS
  2. Aman Nginx dengan Let's Gratis Enkripsi Sertifikat SSL di Ubuntu dan Debian
  3. Cara mengamankan nginx dengan ssl dan mari enkripsi di freebsd

Itu saja untuk saat ini. Jika Anda mengetahui cara lain untuk menyelesaikan kesalahan ini, beri tahu kami melalui formulir umpan balik di bawah ini.