纯HTTP请求被发送到HTTPS端口(Nginx)

goqiplq2  于 2022-09-20  发布在  Nginx
关注(0)|答案(4)|浏览(426)

首先,我的问题不同。

我已经使用了listen 443 default ssl;listen 443 ssl;,并注解掉了#,但似乎什么都不起作用。端口80工作正常,但在端口443上收到此错误。

目前,这是nginx的默认文件。

server {
    listen   80;
    listen   443 ssl;
   #listen   443 default ssl;
    server_name  .******.org;
    keepalive_timeout    70;

   #ssl  on;
    ssl_certificate   /etc/ssl/private/lol/www.*******.crt;
    ssl_certificate_key   /etc/ssl/private/lol/www.********.key;
    ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers          RC4:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

ssl_protocols上,我也尝试只使用SSLv3 TLSv1,但它是一样的。我的nginx版本是1.2.1。我已经浏览了很多网站,甚至在这里,但我认为我的问题不能用不同极客提到的任何方法来解决。

所以我终于来到了这里。有什么建议吗?

附注:我正在使用CloudFlare,但我已经关闭了通用SSL,因为我想使用其他SSL。

hpcdzsge

hpcdzsge1#

您应该编写两个服务器块,一个用于http,一个用于HTTPS,如下所示:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/public/;
    index index.html;
    #other settings
}

server {
    listen 443;
    server_name localhost;

    root /var/www/public/test/;
    index index.html;

    ssl on;
    ssl_certificate /etc/nginx/certs/wss.pem;
    ssl_certificate_key /etc/nginx/certs/wss.pem;
    #other settings
}

我已经使用default nginx设置进行了尝试,两个端口都工作正常。

gab6jxml

gab6jxml2#

如果您在使用Google Compute Engine/Google HTTP负载均衡器时遇到此问题...确保您的示例组设置了http:80和https:443的单独命名端口。否则它将随机选择一个端口。

在我的例子中,这是由于最初设置HTTP负载均衡器时它还处于测试阶段。然后,当我添加另一个负载均衡器时,它刷新了设置,并开始随机失败。

它失败的几率为50%,因为我只在端口80的vhost上设置了Nginx,而它试图将HTTP请求推送到Web盒上的端口80。

csga3l58

csga3l583#

您收到的错误很可能是因为您向SSL端口发送了一个未加密的HTTP请求。

像这样的东西

wget http://example.com:443/

这是一个客户端问题(服务器只是告诉您,它拒绝回答需要加密的通道上的非加密消息)

bis0qfac

bis0qfac4#

这是客户的问题。

我也有同样的问题。原来URL中的HTTPS前缀被删除了。

在浏览器中,检查网络流量以验证浏览器发送的是http请求,而不是HTTPS。发现问题!

使用HTTPS手动键入所需的URL以成功检索页面。

现在,您可以着手对您的客户应用有针对性的修复程序了。

相关问题