如何使用webpack-dev-server代理代理到ssl端点

时间:2016-02-28 17:53:16

标签: javascript ssl proxy webpack webpack-dev-server

当我尝试代理此http://localhost:9000/rpc请求时,我会收到:

cannot proxy to https://example.appspot.com:80 
  (write EPROTO  101057795:error:140770FC:SSL routines:
  SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:)

webpack-dev-derver config:

devServer: {
    contentBase: "./",
    hostname: 'localhost',
    port: 9000,
    proxy: {
        '/rpc': {
            target: 'https://example.appspot.com',
            secure: false,
            changeOrigin: true     // **Update-2 SOLVED**
        }
    }
}

我使用fetchfetch('/rpc' ...发出请求,使用Windows 10专业版来运行webpack。

没有代理:fetch('https://example.com/rpc' ... SSL请求正常。

更新。我不得不使用SSL端口443 (参见Steffen的回答) 现在使用:https://example.appspot.com:443

但仍未使用secure: true。控制台日志显示:

cannot proxy to https://example.appspot.com:443 
(Hostname/IP doesn't match certificate's altnames: "Host: localhost. 
is not in the cert's altnames: DNS:*.appspot.com, DNS:*.thinkwithgoogle.com,
DNS:*.withgoogle.com, DNS:*.withyoutube.com, DNS:appspot.com,
DNS:thinkwithgoogle.com, DNS:withgoogle.com, DNS:withyoutube.com")

使用secure: false。控制台报告:404 (Not Found)

使用changeOrigin: true

更新:已解决。文档here

1 个答案:

答案 0 :(得分:4)

        target: 'https://example.com:80',

端口80不太可能用于HTTPS。通常使用端口443

SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:)

端口80上的服务器很可能没有用HTTPS回复,但有一些HTTP错误,因为来自客户端的消息是TLS握手的开始,而不是预期的HTTP请求。但客户端期望回复TLS握手而不是HTTP错误。这就是你得到这个错误的原因。

  

没有代理:抓取(' https://example.com/rpc' ... SSL请求正常。

这是因为您在这种情况下使用https://example.com而不是https://example.com:80。因为您没有提供明确的端口,所以它将使用https的默认端口,即443。