ແກ້ໄຂ“ ຄຳ ຮ້ອງຂໍ HTTP ທຳ ມະດາຖືກສົ່ງໄປທີ່ພອດ HTTPS” ຂໍ້ຜິດພາດໃນ Nginx


ໃນບົດຂຽນນີ້, ພວກເຮົາຈະສະແດງວິທີການແກ້ໄຂ“ 400 ຄຳ ຂໍທີ່ບໍ່ດີ: ຄຳ ຮ້ອງຂໍ HTTP ທຳ ມະດາຖືກສົ່ງໄປທີ່ພອດ HTTPS” ໃນ Nginx HTTP server. ຂໍ້ຜິດພາດນີ້ເກີດຂື້ນໂດຍປົກກະຕິເມື່ອທ່ານພະຍາຍາມຕັ້ງຄ່າ Nginx ເພື່ອຈັດການທັງການຮ້ອງຂໍ HTTP ແລະ HTTPS.

ສຳ ລັບຈຸດປະສົງຂອງ ຄຳ ແນະ ນຳ ນີ້, ພວກເຮົາ ກຳ ລັງພິຈາລະນາສະຖານະການທີ່ nginx ກຳ ລັງໃຫ້ບໍລິການຫລາຍໆເວບໄຊທ໌ທີ່ປະຕິບັດຜ່ານເຈົ້າຂອງເສມືນໃນ Apache) ມີພຽງເວັບໄຊທ໌ດຽວໃຊ້ SSL ແລະສ່ວນທີ່ເຫຼືອບໍ່ໄດ້.

ພວກເຮົາຍັງຈະພິຈາລະນາການຕັ້ງຄ່າ SSL ຕົວຢ່າງຂ້າງລຸ່ມນີ້ (ພວກເຮົາໄດ້ປ່ຽນຊື່ໂດເມນທີ່ແທ້ຈິງຍ້ອນເຫດຜົນດ້ານຄວາມປອດໄພ), ເຊິ່ງບອກ nginx ໃຫ້ຟັງທັງ port 80 ແລະ 443. ແລະ ຄຳ ຮ້ອງທຸກໃນ HTTP ຄວນຈະຖືກໂອນໄປຫາ HTTPS ໂດຍຄ່າເລີ່ມຕົ້ນ.

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;
        #}
}

ການ ນຳ ໃຊ້ການຕັ້ງຄ່າຂ້າງເທິງນີ້, ເມື່ອລູກຄ້າພະຍາຍາມເຂົ້າໃຊ້ເວັບໄຊທ໌ຂອງທ່ານໂດຍຜ່ານພອດ 80 i.e http://example.com , ຂໍ້ຜິດພາດໃນ ຄຳ ຖາມຈະຖືກສະແດງຄືກັບໃນ ໜ້າ ຈໍດັ່ງຕໍ່ໄປນີ້.

ທ່ານປະສົບກັບຄວາມຜິດພາດນີ້ເພາະວ່າທຸກໆຄັ້ງທີ່ນັກ ສຳ ມະນາກອນພະຍາຍາມເຂົ້າເວັບໄຊທ໌້ຂອງທ່ານຜ່ານ HTTP, ຄຳ ຮ້ອງຂໍຖືກໂອນໄປຍັງ HTTPS. ມັນແມ່ນຍ້ອນວ່າ nginx ຄາດຫວັງວ່າ SSL ຈະຖືກ ນຳ ໃຊ້ເຂົ້າໃນການເຮັດທຸລະ ກຳ ແຕ່ຂໍ້ຮຽກຮ້ອງຕົ້ນສະບັບ t (ໄດ້ຮັບໂດຍຜ່ານພອດ 80) ແມ່ນ HTTP ທຳ ມະດາ, ມັນຈົ່ມວ່າມີຂໍ້ຜິດພາດ.

ໃນທາງກົງກັນຂ້າມ, ຖ້າລູກຄ້າໃຊ້ https://example.com , ພວກເຂົາຈະບໍ່ພົບຂໍ້ຜິດພາດຂ້າງເທິງ. ນອກຈາກນັ້ນ, ຖ້າທ່ານມີເວັບໄຊທ໌ອື່ນໆທີ່ ກຳ ນົດບໍ່ໃຊ້ SSL, nginx ຈະພະຍາຍາມໃຊ້ HTTPS ໂດຍຄ່າເລີ່ມຕົ້ນ ສຳ ລັບພວກມັນທີ່ສົ່ງຜົນໃຫ້ເກີດຄວາມຜິດພາດຂ້າງເທິງ

ເພື່ອແກ້ໄຂຂໍ້ຜິດພາດນີ້, ໃຫ້ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້ໃນການຕັ້ງຄ່າຂອງທ່ານຫຼື ກຳ ນົດໃຫ້ປິດ.

#ssl on 
OR
ssl off

ບັນທຶກແລະປິດແຟ້ມ. ຫຼັງຈາກນັ້ນໃຫ້ບໍລິການ nginx ເລີ່ມ ໃໝ່.

# systemctl restart nginx
OR
$ sudo systemctl restart nginx

ວິທີນີ້, ທ່ານສາມາດເຮັດໃຫ້ nginx ສາມາດຈັດການກັບການຮ້ອງຂໍທັງ HTTP ແລະ HTTPS ສຳ ລັບຫລາຍ server ຕັນ.

ສຸດທ້າຍ, ຂ້າງລຸ່ມນີ້ແມ່ນບັນດາບົດຂຽນກ່ຽວກັບການຕັ້ງຄ່າ SSL HTTPS ກ່ຽວກັບການແຈກຈ່າຍ Linux ທົ່ວໄປແລະ FreeBSD.

<

  • ຕັ້ງຄ່າ HTTPS ດ້ວຍ Let’s encryption SSL Certificate ສຳ ລັບ Nginx ເທິງ RHEL/CentOS
  • ຮັບປະກັນ Nginx ໂດຍບໍ່ເສຍຄ່າດ້ວຍການຈົດລະຫັດ SSL ຂອງໃບຢັ້ງຢືນ SSL ໃນ Ubuntu ແລະ Debian
  • ວິທີການຮັບປະກັນ Nginx ດ້ວຍ SSL ແລະ Let’s Encrypt ໃນ FreeBSD
  • ດຽວນີ້ ໝົດ ແລ້ວ. ຖ້າທ່ານຮູ້ວິທີອື່ນໃດໃນການແກ້ໄຂຂໍ້ຜິດພາດນີ້, ກະລຸນາແຈ້ງໃຫ້ພວກເຮົາຮູ້ຜ່ານແບບຟອມ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້.