Labojiet kļūdu “Vienkāršais HTTP pieprasījums tika nosūtīts uz HTTPS portu” kļūdu Nginx
Šajā rakstā mēs parādīsim, kā atrisināt “400 nepareizu pieprasījumu: vienkāršs HTTP pieprasījums tika nosūtīts uz HTTPS portu” Nginx HTTP serverī. Šī kļūda parasti rodas, mēģinot konfigurēt Nginx apstrādāt gan HTTP, gan HTTPS pieprasījumus.
Šīs rokasgrāmatas nolūkā mēs apsveram scenāriju, kurā nginx apkalpo vairākas vietnes, kas tiek ieviestas, izmantojot Apache virtuālos resursdatorus) tikai viena vietne izmanto SSL, bet pārējās neizmanto.
Mēs apsvērsim arī zemāk esošo SSL konfigurācijas paraugu (drošības apsvērumu dēļ esam mainījuši faktisko domēna nosaukumu), kas norāda nginx klausīties gan 80., gan 443. portu. Un visi HTTP pieprasījumi pēc noklusējuma jāpāradresē uz 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; #} }
Izmantojot iepriekš minēto konfigurāciju, tiklīdz klients mēģina piekļūt jūsu vietnei, izmantojot 80. portu, ti, http://example.com
, attiecīgā kļūda tiks parādīta tāpat kā nākamajā ekrānuzņēmumā.
Jums rodas šī kļūda, jo katru reizi, kad klients mēģina piekļūt jūsu vietnei, izmantojot HTTP, pieprasījums tiek novirzīts uz HTTPS. Tā kā nginx sagaida, ka darījumā tiks izmantots SSL, tomēr sākotnējie pieprasījumi (saņemti caur 80. portu) bija vienkārši HTTP, tas sūdzas par kļūdu.
No otras puses, ja klients izmanto https://example.com
, viņš neredzēs iepriekš minēto kļūdu. Turklāt, ja jums ir citas vietnes, kas konfigurētas neizmantot SSL, nginx pēc noklusējuma mēģinās tām izmantot HTTPS, kā rezultātā rodas iepriekš minētā kļūda.
Lai novērstu šo kļūdu, komentējiet tālāk esošo rindu savā konfigurācijā vai izslēdziet to.
#ssl on OR ssl off
Saglabājiet un aizveriet failu. Pēc tam restartējiet nginx pakalpojumu.
# systemctl restart nginx OR $ sudo systemctl restart nginx
Tādā veidā jūs varat iespējot nginx apstrādāt gan HTTP, gan HTTPS pieprasījumus vairākiem serveru blokiem.
Visbeidzot, zemāk ir saraksts ar rakstiem par SSL HTTPS iestatīšanu parastajos Linux izplatījumos un FreeBSD.
- HTTPS iestatīšana, šifrējot Nginx SSL sertifikātu vietnē RHEL/CentOS
- Nodrošiniet Nginx ar bezmaksas Let’s Encrypt SSL Certificate Ubuntu un Debian
- Kā nodrošināt Nginx ar SSL un šifrēt FreeBSD
Tas pagaidām ir viss. Ja zināt kādu citu veidu, kā novērst šo kļūdu, lūdzu, informējiet mūs, izmantojot tālāk sniegto atsauksmju veidlapu.