Perbaiki Kesalahan “Permintaan HTTP biasa telah dikirim ke port HTTPS” di Nginx


Pada artikel ini, kami akan menunjukkan cara mengatasi “400 Permintaan Buruk: Permintaan HTTP biasa dikirim ke port HTTPS ” di server HTTP Nginx. Kesalahan ini biasanya muncul ketika Anda mencoba mengonfigurasi Nginx untuk menangani permintaan HTTP dan HTTPS.

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

Baca Juga: Panduan Utama untuk Mengamankan, Memperkuat, dan Meningkatkan Kinerja Nginx

Kami juga akan mempertimbangkan contoh konfigurasi SSL di bawah ini (kami telah mengubah nama domain sebenarnya untuk alasan keamanan), yang memberitahu nginx untuk mendengarkan port 80 dan 443. Dan semua permintaan pada HTTP harus dialihkan ke HTTPS secara default.

Konfigurasi Contoh Nginx

server{
        listen 80;
        server_name example.com www.example.com;
        return 301 https://www.example.com$request_uri;
}
server {
        listen 443 ssl http2;
        server_name example.com www.example.com;

        root   /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;

        location / {
                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 the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 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;

        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
}

Dengan menggunakan konfigurasi di atas, setelah klien mencoba mengakses situs Anda melalui port 80 yaitu http://example.com, kesalahan yang dimaksud akan ditampilkan seperti berikut tangkapan layar.

Anda mengalami kesalahan ini karena setiap kali klien mencoba mengakses situs Anda melalui HTTP, permintaan dialihkan ke HTTPS. Itu karena nginx mengharapkan SSL untuk digunakan dalam transaksi namun permintaan asli t (diterima melalui port 80) adalah HTTP biasa, ia mengeluhkan kesalahan tersebut.

Sebaliknya, jika klien menggunakan https://example.com, mereka tidak akan mengalami error di atas. Selain itu, jika Anda memiliki situs web lain yang dikonfigurasi untuk tidak menggunakan SSL, nginx akan mencoba menggunakan HTTPS secara default sehingga mengakibatkan kesalahan di atas.

Untuk memperbaiki kesalahan ini, beri komentar pada baris di bawah ini dalam konfigurasi Anda atau nonaktifkan.

#ssl on 
OR
ssl off

Simpan dan tutup file. Kemudian restart layanan nginx.

systemctl restart nginx
OR
sudo systemctl restart nginx

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

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

  1. Menyiapkan HTTPS dengan Mari Enkripsi Sertifikat SSL Untuk Nginx di RHEL/CentOS
  2. Amankan Nginx dengan Mari Enkripsi Sertifikat SSL Gratis 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 mengatasi kesalahan ini, beri tahu kami melalui formulir masukan di bawah.