Napraw „zwykłe żądanie HTTP zostało wysłane do błędu portu HTTPS” w Nginx

Napraw „zwykłe żądanie HTTP zostało wysłane do błędu portu HTTPS” w Nginx

W tym artykule pokażemy, jak rozwiązać „400 Złe żądanie: zwykły żądanie HTTP zostało wysłane do portu HTTPS”Na serwerze Nginx HTTP. Ten błąd zwykle powstaje, gdy próbujesz skonfigurować Nginx do obsługi żądań HTTP i HTTPS.

Na potrzeby tego przewodnika rozważamy scenariusz, w którym Nginx obsługuje wiele stron internetowych zaimplementowanych za pośrednictwem bloków serwerów (lub hostów wirtualnych w Apache) tylko jedna strona internetowa korzysta z SSL, a reszta nie.

Przeczytaj także: Najlepszy przewodnik po zabezpieczeniu, stwardnienia i poprawie wydajności Nginx

Rozważymy również przykładową konfigurację SSL poniżej (zmieniliśmy rzeczywistą nazwę domeny ze względów bezpieczeństwa), która mówi Nginx, aby słuchał obu portów 80 I 443. I wszystkie żądania w HTTP należy domyślnie przekierować do HTTPS.

Konfiguracja próbki Nginx

serwer Słuchaj 80; Przykład_nazowy Server_name.com www.przykład.com; zwróć 301 https: // www.przykład.com $ request_uri;  serwer Słuchaj 443 SSL http2; Przykład_nazowy Server_name.com www.przykład.com; root/var/www/html/przykład.com/; indeks indeksu.Wskaźnik PHP.Indeks HTML.HTM; #Carset Koi8-R; access_log/var/log/nginx/przykład.com/przykład.com_access_log; error_log/var/log/nginx/przykład.com/przykład.COM_ERROR_LOG BRIST; # SSL/TLS Configs SSL ON; SSL_Certificate/etc/ssl/certs/example_com_cert_chain.crt; SSL_Certificate_Key/etc/ssl/private/example_com.klucz; obejmują/etc/nginx/ssl.D/SSL.conf; lokalizacja / try_files $ URI $ URI / / Index.php?$ query_string;  error_page 500 502 503 504 /50x.html; Lokalizacja = /50x.html root/var/www/html/przykład.com/;  # Proxy Scripty PHP do Apache Słuchanie w 127.0.0.1:80 # #Location ~ \.php $  # proxy_pass http: // 127.0.0.1; # # Przekaż skrypty PHP do serwera FastCGI słuchania w 127.0.0.1: 9000 # Lokalizacja ~ \.php $ root/var/www/html/przykład.com/; fastcgi_pass 127.0.0.1: 9001; #fastcgi_pass Unix:/var/run/php-fpm/php-fpm.skarpetka; indeks fastcgi_index.php; fastcgi_param script_filename $ dokument_root $ fastcgi_script_name; Dołącz fastcgi_params; obejmują/etc/nginx/fastcgi_params;  # Odmów dostępu do .Pliki htaccess, jeśli root dokumentu Apache # zgadza się z jednym # #Location ~ /\.ht  # odmów wszystkich; # 

Korzystając z powyższej konfiguracji, gdy klient spróbuje uzyskać dostęp do Twojej witryny za pośrednictwem portu 80 I.mi http: // przykład.com, Błąd, o którym mowa, zostanie wyświetlony jak w poniższym ujęciu ekranu.

Nginx 404 Błąd złego żądania

Napotykasz ten błąd, ponieważ za każdym razem, gdy Clien próbuje uzyskać dostęp do Twojej witryny za pośrednictwem HTTP, żądanie jest przekierowywane do HTTPS. To dlatego, że Nginx oczekuje, że SSL będzie używany w transakcji, ale oryginalne wymagania t (otrzymane przez port 80) było zwykłe HTTP, narzeka na błąd.

Z drugiej strony, jeśli klient używa https: // przykład.com, Nie napotkają powyższego błędu. Ponadto, jeśli masz skonfigurowane inne strony internetowe, aby nie używać SSL, Nginx spróbuje domyślnie używać HTTPS.

Aby naprawić ten błąd, skomentuj poniższy wiersz w konfiguracji lub ustaw go na wyłączenie.

#ssl on lub ssl off 

Zapisz i zamknij plik. Następnie uruchom ponownie usługę Nginx.

# Systemctl restart nginx lub $ sudo systemctl restart nginx 

W ten sposób możesz włączyć Nginx obsługa zarówno żądań HTTP, jak i HTTPS dla wielu bloków serwerów.

Wreszcie, poniżej znajduje się lista artykułów na temat konfigurowania SSL HTTPS na wspólnych dystrybucjach Linux i FreeBSD.

  1. Konfigurowanie HTTPS za pomocą Certyfikatu SSL SSL dla Nginx na RHEL/CENTOS
  2. Bezpieczny Nginx z darmowym certyfikatem SSL Let's Encrypt SSL na Ubuntu i Debian
  3. Jak zabezpieczyć Nginx za pomocą SSL i zaszyfrowajmy w FreeBSD

To wszystko na teraz. Jeśli znasz jakikolwiek inny sposób rozwiązania tego błędu, daj nam znać za pośrednictwem poniższego formularza opinii.