Rekebisha Ombi wazi la HTTP lilitumwa kwa bandari ya HTTPS Hitilafu katika Nginx


Katika makala haya, tutaonyesha jinsi ya kutatua \Ombi Bad 400: Ombi la HTTP dhahiri lilitumwa kwa mlango wa HTTPS katika seva ya Nginx HTTP. Hitilafu hii hutokea kwa kawaida unapojaribu kusanidi Nginx ili kushughulikia maombi ya HTTP na HTTPS.

Kwa madhumuni ya mwongozo huu, tunazingatia hali ambayo nginx inahudumia tovuti nyingi zinazotekelezwa kupitia wapangishi pepe katika Apache) ni tovuti moja pekee inayotumia SSL na iliyosalia haifanyi hivyo.

Pia tutazingatia sampuli ya usanidi wa SSL hapa chini (tumebadilisha jina halisi la kikoa kwa sababu za usalama), ambayo huiambia nginx kusikiliza lango 80 na 443. Na maombi yote kwenye HTTP yanapaswa kuelekezwa kwa HTTPS kwa chaguo-msingi.

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

Kwa kutumia usanidi ulio hapo juu, mteja anapojaribu kufikia tovuti yako kupitia lango 80 yaani http://example.com, hitilafu inayozungumzwa itaonyeshwa kama katika picha ya skrini ifuatayo.

Umekumbana na hitilafu hii kwa sababu kila wakati mteja anapojaribu kufikia tovuti yako kupitia HTTP, ombi huelekezwa kwenye HTTPS. Ni kwa sababu nginx inatarajia SSL kutumika katika shughuli bado maombi ya awali t(yaliyopokewa kupitia bandari 80) yalikuwa HTTP wazi, inalalamika na hitilafu.

Kwa upande mwingine, ikiwa mteja anatumia https://example.com, hatakumbana na hitilafu iliyo hapo juu. Kwa kuongeza, ikiwa una tovuti zingine zilizosanidiwa kutotumia SSL, nginx itajaribu kutumia HTTPS kwa chaguo-msingi kwao na kusababisha hitilafu iliyo hapo juu.

Ili kurekebisha hitilafu hii, toa maoni kwenye mstari ulio hapa chini katika usanidi wako au uzime.

#ssl on 
OR
ssl off

Hifadhi na funga faili. Kisha anza tena huduma ya nginx.

# systemctl restart nginx
OR
$ sudo systemctl restart nginx

Kwa njia hii, unaweza kuwezesha nginx kushughulikia maombi ya HTTP na HTTPS kwa vizuizi vingi vya seva.

Hatimaye, hapa chini kuna orodha ya makala kuhusu kusanidi SSL HTTPS kwenye usambazaji wa kawaida wa Linux na FreeBSD.

  1. Kuweka HTTPS kwa kutumia Let’s Encrypt SSL Certificate For Nginx kwenye RHEL/CentOS
  2. Linda Nginx kwa Bila Malipo, Tusimbe Cheti cha SSL kwenye Ubuntu na Debian
  3. Jinsi ya Kulinda Nginx ukitumia SSL na Hebu Tusimba katika FreeBSD

Hayo ni yote kwa sasa. Ikiwa unajua njia nyingine yoyote ya kutatua hitilafu hii, tafadhali tujulishe kupitia fomu ya maoni iliyo hapa chini.