Nginx-ലെ പ്ലെയിൻ HTTP അഭ്യർത്ഥന HTTPS പോർട്ടിലേക്ക് അയച്ചു എന്ന പിശക് പരിഹരിക്കുക


ഈ ലേഖനത്തിൽ, Nginx HTTP സെർവറിലെ \400 മോശം അഭ്യർത്ഥന: പ്ലെയിൻ HTTP അഭ്യർത്ഥന HTTPS പോർട്ടിലേക്ക് അയച്ചത് എങ്ങനെയെന്ന് ഞങ്ങൾ കാണിക്കും. HTTP, HTTPS അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യാൻ Nginx കോൺഫിഗർ ചെയ്യാൻ നിങ്ങൾ ശ്രമിക്കുമ്പോൾ സാധാരണയായി ഈ പിശക് സംഭവിക്കുന്നു.

ഈ ഗൈഡിന്റെ ആവശ്യത്തിനായി, അപ്പാച്ചെയിലെ വെർച്വൽ ഹോസ്റ്റുകളിലൂടെ നടപ്പിലാക്കിയ ഒന്നിലധികം വെബ്uസൈറ്റുകൾ nginx നൽകുന്ന ഒരു സാഹചര്യം ഞങ്ങൾ പരിഗണിക്കുന്നു) ഒരു വെബ്uസൈറ്റ് മാത്രമേ SSL ഉപയോഗിക്കുന്നുള്ളൂ, ബാക്കിയുള്ളവ ഉപയോഗിക്കുന്നില്ല.

താഴെയുള്ള സാമ്പിൾ SSL കോൺഫിഗറേഷനും ഞങ്ങൾ പരിഗണിക്കും (സുരക്ഷാ കാരണങ്ങളാൽ ഞങ്ങൾ യഥാർത്ഥ ഡൊമെയ്ൻ നാമം മാറ്റിയിരിക്കുന്നു), ഇത് nginx-നോട് പോർട്ട് 80, 443 എന്നിവ കേൾക്കാൻ പറയുന്നു. കൂടാതെ HTTP-യിലെ എല്ലാ അഭ്യർത്ഥനകളും സ്ഥിരസ്ഥിതിയായി HTTPS-ലേക്ക് റീഡയറക്uട് ചെയ്യണം.

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 വഴി നിങ്ങളുടെ സൈറ്റ് ആക്uസസ് ചെയ്യാൻ ശ്രമിച്ചുകഴിഞ്ഞാൽ, അതായത് http://example.com, ഇനിപ്പറയുന്ന സ്uക്രീൻ ഷോട്ടിലെന്നപോലെ സംശയാസ്പദമായ പിശക് പ്രദർശിപ്പിക്കും.

ഓരോ തവണയും ഒരു ക്ലയൻ HTTP വഴി നിങ്ങളുടെ സൈറ്റ് ആക്സസ് ചെയ്യാൻ ശ്രമിക്കുമ്പോൾ, അഭ്യർത്ഥന HTTPS-ലേക്ക് റീഡയറക്uട് ചെയ്യപ്പെടുന്നതിനാൽ നിങ്ങൾ ഈ പിശക് നേരിടുന്നു. ഇടപാടിൽ SSL ഉപയോഗിക്കുമെന്ന് nginx പ്രതീക്ഷിക്കുന്നതിനാലാണിത്, എന്നാൽ യഥാർത്ഥ അഭ്യർത്ഥനകൾ t (പോർട്ട് 80 വഴി സ്വീകരിച്ചത്) പ്ലെയിൻ HTTP ആയിരുന്നു, ഇത് പിശകോടെ പരാതിപ്പെടുന്നു.

മറുവശത്ത്, ഒരു ക്ലയന്റ് https://example.com ഉപയോഗിക്കുകയാണെങ്കിൽ, അവർ മുകളിൽ പറഞ്ഞ പിശക് നേരിടുകയില്ല. കൂടാതെ, നിങ്ങൾക്ക് SSL ഉപയോഗിക്കരുതെന്ന് കോൺഫിഗർ ചെയ്uത മറ്റ് വെബ്uസൈറ്റുകൾ ഉണ്ടെങ്കിൽ, മുകളിൽ പറഞ്ഞ പിശകിന് കാരണമാകുന്ന അവയ്uക്കായി nginx സ്ഥിരസ്ഥിതിയായി HTTPS ഉപയോഗിക്കാൻ ശ്രമിക്കും.

ഈ പിശക് പരിഹരിക്കാൻ, നിങ്ങളുടെ കോൺഫിഗറേഷനിൽ താഴെയുള്ള വരി കമന്റ് ചെയ്യുക അല്ലെങ്കിൽ അത് ഓഫ് ആയി സജ്ജമാക്കുക.

#ssl on 
OR
ssl off

ഫയൽ സംരക്ഷിച്ച് അടയ്ക്കുക. തുടർന്ന് nginx സേവനം പുനരാരംഭിക്കുക.

# systemctl restart nginx
OR
$ sudo systemctl restart nginx

ഈ രീതിയിൽ, ഒന്നിലധികം സെർവർ ബ്ലോക്കുകൾക്കായുള്ള HTTP, HTTPS അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യാൻ നിങ്ങൾക്ക് nginx-നെ പ്രവർത്തനക്ഷമമാക്കാം.

അവസാനമായി, പൊതുവായ ലിനക്സ് വിതരണങ്ങളിലും FreeBSD-യിലും SSL HTTPS സജ്ജീകരിക്കുന്നതിനെക്കുറിച്ചുള്ള ലേഖനങ്ങളുടെ ഒരു ലിസ്റ്റ് ചുവടെയുണ്ട്.

  1. RHEL/CentOS-ൽ Nginx-നുള്ള SSL സർട്ടിഫിക്കറ്റ് എൻക്രിപ്റ്റ് ചെയ്യാം എന്നതുമായി HTTPS സജ്ജീകരിക്കുന്നു
  2. ഉബുണ്ടുവിലും ഡെബിയനിലും SSL സർട്ടിഫിക്കറ്റ് സൗജന്യമായി എൻക്രിപ്റ്റ് ചെയ്യുന്നതിലൂടെ Nginx സുരക്ഷിതമാക്കുക
  3. SSL ഉപയോഗിച്ച് Nginx എങ്ങനെ സുരക്ഷിതമാക്കാം, നമുക്ക് FreeBSD-യിൽ എൻക്രിപ്റ്റ് ചെയ്യാം

ഇപ്പോഴത്തേക്ക് ഇത്രമാത്രം. ഈ പിശക് പരിഹരിക്കാനുള്ള മറ്റെന്തെങ്കിലും മാർഗം നിങ്ങൾക്കറിയാമെങ്കിൽ, ചുവടെയുള്ള ഫീഡ്uബാക്ക് ഫോം വഴി ഞങ്ങളെ അറിയിക്കുക.