Neste artigo, mostraremos como resolver o “400 Solicitação inválida: a solicitação HTTP simples foi enviada para a porta HTTPS”No servidor Nginx HTTP. Este erro normalmente surge quando você tenta configurar o Nginx para lidar com solicitações HTTP e HTTPS.
Para o propósito deste guia, estamos considerando um cenário em que o nginx está atendendo a vários sites implementados por meio de blocos de servidor (ou hosts virtuais no Apache) apenas um site usa SSL e o resto não.
Leia também: O guia definitivo para proteger, fortalecer e melhorar o desempenho do Nginx
Também consideraremos o exemplo de configuração SSL abaixo (alteramos o nome de domínio real por motivos de segurança), que diz ao nginx para ouvir ambas as portas 80 e 443. E todas as solicitações em HTTP devem ser redirecionadas para HTTPS por padrão.
servidor {escuta 80; server_name example.com www.example.com; return 301 https://www.example.com$request_uri; } servidor {ouvir 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 erro; # SSL / TLS configs ssl on; ssl_certificate /etc/ssl/certs/example_com_cert_chain.crt; ssl_certificate_key /etc/ssl/private/example_com.key; inclua /etc/nginx/ssl.d/ssl.conf; localização / {try_files $ uri $ uri / /index.php?$query_string; } error_page 500 502 503 504 /50x.html; localização = /50x.html {root /var/www/html/example.com/; } # proxy dos scripts PHP para o Apache ouvindo em 127.0.0.1:80 # #location ~ \ .php $ {# proxy_pass http://127.0.0.1; #} # passa os scripts PHP para o servidor FastCGI escutando em 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; incluem fastcgi_params; inclua / etc / nginx / fastcgi_params; } # nega o acesso aos arquivos .htaccess, se a raiz do documento do Apache # concorda com a do nginx # #location ~ /\.ht {# deny all; #} }
Usando a configuração acima, uma vez que um cliente tenta acessar seu site via porta 80 ou seja http://example.com
, o erro em questão será exibido como na captura de tela a seguir.
Você encontra esse erro porque toda vez que um cliente tenta acessar seu site via HTTP, a solicitação é redirecionada para HTTPS. É porque o nginx espera que SSL seja usado na transação, mas o pedido original (recebido através da porta 80) era HTTP simples, ele reclama do erro.
Por outro lado, se um cliente usa https://example.com
, eles não encontrarão o erro acima. Além disso, se você tiver outros sites configurados para não usar SSL, o nginx tentará usar HTTPS por padrão para eles, resultando no erro acima.
Para corrigir esse erro, comente a linha abaixo em sua configuração ou desative-a.
#ssl em OR. SSL desligado.
Salve e feche o arquivo. Em seguida, reinicie o serviço nginx.
# systemctl restart nginx. OU. $ sudo systemctl reinicie o nginx.
Dessa forma, você pode habilitar o nginx para lidar com solicitações HTTP e HTTPS para vários blocos de servidor.
Finalmente, abaixo está uma lista de artigos sobre como configurar SSL HTTPS em distribuições Linux comuns e FreeBSD.
É tudo por agora. Se você souber de outra maneira de resolver esse erro, informe-nos por meio do formulário de feedback abaixo.