Ištaisykite „Nginx“ klaidą „Paprasta HTTP užklausa buvo išsiųsta į HTTPS prievadą“


Šiame straipsnyje mes parodysime, kaip išspręsti „400 blogą užklausą: paprasta HTTP užklausa buvo išsiųsta į HTTPS prievadą“ Nginx HTTP serveryje. Ši klaida paprastai atsiranda, kai bandote sukonfigūruoti „Nginx“ tvarkyti HTTP ir HTTPS užklausas.

Šiame vadove mes svarstome scenarijų, pagal kurį „nginx“ aptarnauja kelias svetaines, įdiegtas per „Apache“ virtualiuosius kompiuterius) tik viena svetainė naudoja SSL, o likusios - ne.

Mes taip pat apsvarstysime toliau pateiktą pavyzdinę SSL konfigūraciją (saugumo sumetimais pakeitėme tikrąjį domeno vardą), kuri nurodo „nginx“ klausytis ir 80, ir 443 prievado. Ir visos HTTP užklausos pagal numatytuosius nustatymus turėtų būti nukreiptos į 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;
        #}
}

Naudodamas pirmiau pateiktą konfigūraciją, kai klientas bandys pasiekti jūsų svetainę per 80 prievadą, ty http://example.com , aptariama klaida bus rodoma taip, kaip šiame ekrano vaizde.

Jūs susiduriate su šia klaida, nes kiekvieną kartą, kai klientas bando pasiekti jūsų svetainę per HTTP, užklausa peradresuojama į HTTPS. Dėl to, kad „nginx“ tikisi, kad operacijoje bus naudojamas SSL, tačiau pradiniai reikalavimai (gauti per 80 prievadą) buvo paprasti HTTP, skundžiasi klaida.

Kita vertus, jei klientas naudoja https://example.com , jis nesusidurs su aukščiau nurodyta klaida. Be to, jei turite kitų svetainių, sukonfigūruotų nenaudoti SSL, „nginx“ pagal numatytuosius nustatymus bandys joms naudoti HTTPS, dėl to atsiras aukščiau nurodyta klaida.

Norėdami ištaisyti šią klaidą, pakomentuokite žemiau esančią eilutę savo konfigūracijoje arba išjunkite ją.

#ssl on 
OR
ssl off

Išsaugokite ir uždarykite failą. Tada iš naujo paleiskite „nginx“ paslaugą.

# systemctl restart nginx
OR
$ sudo systemctl restart nginx

Tokiu būdu galite įgalinti „nginx“ tvarkyti kelių serverių blokų HTTP ir HTTPS užklausas.

Galiausiai žemiau pateikiamas straipsnių sąrašas apie SSL HTTPS nustatymą įprastuose „Linux“ paskirstymuose ir „FreeBSD“.

  1. HTTPS nustatymas naudojant „Nginx“ SSL sertifikatą šifruoti naudojant RHEL/CentOS
  2. Apsaugokite „Nginx“ naudodami nemokamą šifravimo SSL sertifikatą „Ubuntu“ ir „Debian“
  3. Kaip apsaugoti „Nginx“ naudojant SSL ir šifruojame „FreeBSD“

Kol kas viskas. Jei žinote kokį nors kitą būdą išspręsti šią klaidą, praneškite mums naudodamiesi žemiau esančia atsiliepimų forma.