Corrija o erro “A solicitação HTTP simples foi enviada para a porta HTTPS” no nginx

Corrija o erro “A solicitação HTTP simples foi enviada para a porta HTTPS” no nginx

Neste artigo, mostraremos como resolver o “400 Pedido ruim: a solicitação HTTP simples foi enviada para a porta HTTPS”No servidor HTTP nginx. Este erro normalmente surge quando você tenta configurar o Nginx para lidar com as solicitações HTTP e HTTPS.

Para os fins deste guia, estamos considerando um cenário no qual o Nginx está servindo a vários sites implementados por meio de blocos de servidores (ou hosts virtuais no Apache), apenas um site usa SSL e o resto não.

Leia também: O Guia final para proteger, endurecer e melhorar o desempenho do nginx

Também consideraremos a configuração do SSL da amostra abaixo (mudamos o nome de domínio real por razões de segurança), que diz ao Nginx para ouvir ambas as portas 80 e 443. E todos os pedidos no HTTP devem ser redirecionados para HTTPS por padrão.

Configuração da amostra nginx

servidor ouça 80; Exemplo server_name.com www.exemplo.com; retornar 301 https: // www.exemplo.com $ request_uri;  servidor Ouça 443 SSL HTTP2; Exemplo server_name.com www.exemplo.com; root/var/www/html/exemplo.com/; ÍNDICE ÍNDICE.ÍNDICE PHP.Índice HTML.htm; #charset koi8-r; access_log/var/log/nginx/exemplo.com/exemplo.com_access_log; error_log/var/log/nginx/exemplo.com/exemplo.Erro com_error_log; # SSL/TLS configura SSL ON; ssl_certificate/etc/ssl/certs/exemplo_com_cert_chain.CRT; ssl_certificate_key/etc/ssl/privado/exemplo_com.chave; incluir/etc/nginx/ssl.d/ssl.conf; Localização / Try_files $ URI $ URI / / ÍNDICE.php?$ query_string;  error_page 500 502 503 504 /50x.html; Localização = /50x.html root/var/www/html/exemplo.com/;  # Proxy Os scripts PHP para ouvir Apache em 127.0.0.1:80 # #location ~ \.php $  # proxy_pass http: // 127.0.0.1; # # Passe os scripts PHP para o servidor FastCGI ouvindo em 127.0.0.1: 9000 # Localização ~ \.php $ root/var/www/html/exemplo.com/; fastcgi_pass 127.0.0.1: 9001; #fastcgi_pass unix:/var/run/php-fpm/php-fpm.meia; Índice FastCGI_Index.php; fastcgi_param script_filename $ document_root $ fastcgi_script_name; incluir fastcgi_params; incluir/etc/nginx/fastcgi_params;  # negar acesso a .Arquivos Htaccess, se o documento do Apache # concordar com o # # #location # /\ da nginx ~ /\.ht  # negar tudo; # 

Usando a configuração acima, uma vez que um cliente tenta acessar seu site via porta 80 eu.e http: // Exemplo.com, O erro em questão será exibido como na captura de tela a seguir.

Nginx 404 Erro de solicitação ruim

Você encontra esse erro porque toda vez que um clien tenta acessar seu site via http, a solicitação é redirecionada para https. É porque o nginx espera que o SSL seja usado na transação, mas o requisito original (recebido pela porta 80) foi simples http, que se queixa com o erro.

Por outro lado, se um cliente usar https: // Exemplo.com, Eles não encontrarão o erro acima. Além disso, se você tiver outros sites configurados para não usar o SSL, o nginx tentará usar o HTTPS por padrão para eles, resultando no erro acima.

Para corrigir este erro, comente a linha abaixo em sua configuração ou defina -o como OFF.

#SSL ON ou SSL OFF 

Salve e feche o arquivo. Em seguida, reinicie o serviço Nginx.

# SystemCtl Reiniciar nginx ou $ sudo systemctl reiniciar nginx 

Dessa forma, você pode permitir que o Nginx lide com solicitações HTTP e HTTPS para vários blocos de servidor.

Finalmente, abaixo está uma lista de artigos sobre a criação de SSL HTTPS em distribuições de Linux Common e FreeBSD.

  1. Configurando HTTPS com o certificado Let's Encrypt SSL para Nginx no RHEL/CENTOS
  2. Segure o Nginx com o certificado SSL Let Free Crypts no Ubuntu e Debian
  3. Como proteger o nginx com SSL e vamos criptografar em FreeBSD

É tudo por agora. Se você souber de outra maneira de resolver este erro, informe -nos através do formulário de feedback abaixo.