Pag-ayo sa Ang yano nga HTTP nga hangyo gipadala sa HTTPS port Error sa Nginx


Niini nga artikulo, ipakita namo kung unsaon pagsulbad ang \400 Bad Request: Ang yano nga HTTP nga hangyo gipadala sa HTTPS port sa Nginx HTTP server. Kini nga sayup kasagarang motungha kung imong sulayan ang pag-configure sa Nginx aron pagdumala sa HTTP ug HTTPS nga mga hangyo.

Alang sa katuyoan niini nga giya, among gikonsiderar ang usa ka senaryo diin ang nginx nag-alagad sa daghang mga website nga gipatuman pinaagi sa mga virtual host sa Apache) usa ra ka website ang naggamit sa SSL ug ang uban wala.

Atong hisgotan usab ang sample SSL configuration sa ubos (among giusab ang aktuwal nga domain name alang sa mga rason sa seguridad), nga nagsulti sa nginx sa pagpaminaw sa duha ka port 80 ug 443. Ug ang tanan nga mga hangyo sa HTTP kinahanglan nga i-redirect sa HTTPS sa default.

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

Gamit ang konfigurasyon sa ibabaw, sa higayon nga ang usa ka kliyente mosulay sa pag-access sa imong site pinaagi sa port 80 i.e http://example.com, ang sayop nga pangutana ipakita sama sa mosunod nga screen shot.

Nasugatan nimo kini nga sayup tungod kay sa matag higayon nga ang usa ka kliyente mosulay sa pag-access sa imong site pinaagi sa HTTP, ang hangyo gi-redirect sa HTTPS. Kini tungod kay ang nginx nagpaabut sa SSL nga gamiton sa transaksyon apan ang orihinal nga mga hangyo t (nadawat pinaagi sa port 80) kay yano nga HTTP, kini nagreklamo sa sayup.

Sa laing bahin, kung ang usa ka kliyente mogamit https://example.com, dili nila masugatan ang sayup sa ibabaw. Dugang pa, kung ikaw adunay ubang mga website nga gi-configure nga dili mogamit sa SSL, ang nginx mosulay sa paggamit sa HTTPS nga default alang kanila nga miresulta sa sayup sa ibabaw.

Aron ayuhon kini nga sayop, ikomento ang linya sa ubos sa imong configuration o i-set kini sa off.

#ssl on 
OR
ssl off

I-save ug isira ang file. Dayon i-restart ang serbisyo sa nginx.

# systemctl restart nginx
OR
$ sudo systemctl restart nginx

Niining paagiha, mahimo nimong palihokon ang nginx sa pagdumala sa HTTP ug HTTPS nga mga hangyo alang sa daghang mga bloke sa server.

Sa katapusan, sa ubos mao ang usa ka lista sa mga artikulo bahin sa pag-set up sa SSL HTTPS sa sagad nga mga distribusyon sa Linux ug FreeBSD.

  1. Pag-set up sa HTTPS gamit ang Let's Encrypt SSL Certificate Para sa Nginx sa RHEL/CentOS
  2. Secure Nginx nga Libre Let's Encrypt SSL Certificate sa Ubuntu ug Debian
  3. Unsaon Pag-secure sa Nginx gamit ang SSL ug Atong I-encrypt sa FreeBSD

Kana lang sa pagkakaron. Kung nahibal-an nimo ang bisan unsang paagi aron masulbad kini nga sayup, palihug ipahibalo kanamo pinaagi sa porma sa feedback sa ubos.