如何修复这些 SockJS ssl 错误?
How can I fix these SockJS ssl errors?
使用 vue-cli 3,我有一个 vue 应用程序在开发模式下呼啸而过。我调用 npm 运行 服务,我看到...
DONE Compiled successfully in 431ms
16:26:43
App running at:
- Local: http://localhost:8080/mobileapp/v/
- Network: http://172.18.55.202:8080/mobileapp/v/
(路径/mobileapp/v/
来自一个baseUrl配置变量。域notilusdev.dimosoftware.com/mobileapp指向iis中的一个vdir,对/mobileapp/v/的请求是反向代理到 webpack-dev-server)
在浏览器中,应用程序启动没有问题。然后它开始向 https://172.18.55.202:8080/sockjs-node/info?t=1529072806971
发送请求。这些请求失败,因为该端口上没有 ssl。我什至不想将 ip 作为站点的 public 地址。 Webpack(或sockjs)如何构造这个url?为什么它只给我一个直接的 http link 就认为这个端口上有 ssl?如果它基于地址栏协议的协议,为什么它会忽略地址栏主机名。我可以配置什么来使这些请求成功?
Web 套接字从配置的 URL 推断架构。
您需要明确向 devServer 配置提供 key/cert/pem?
以支持此功能。否则,它将尝试使用自签名证书,当然,这在您的情况下不起作用。
devSever: {
...,
key: fs.readFileSync('/path/to/server.key'),
cert: fs.readFileSync('/path/to/server.crt'),
ca: fs.readFileSync('/path/to/ca.pem'),
}
这将使用正确的 SSL 并解决您的问题。
旁注
您也不能决定不使用 https
进行 websocket 连接。但是,您可以完全不使用 HTTPS,如果您不想通过此操作,只需像往常一样使用 localhost:8081
。
这是一场斗争,但现在正在奏效...
在vue.config中的devServer
对象中添加一个public
属性。
我需要的 属性 是 public
,而不是 publicPath
,关键在于 vue 将忽略 configureWebpack{ devServer: {
中的配置更改。您需要使用顶级 devServer
属性.
所以我的工作 vue.config.js 是...
module.exports = {
baseUrl: process.env.NODE_ENV === 'production'
? '/production-sub-path/'
: '\/mobileapp\/v\/',
devServer :{
public : 'notilusdev.dimosoftware.com',
host : '0.0.0.0',
disableHostCheck : true
}
}
然后我需要通过 express 反向代理 https 和 wss:// 请求,终止 express 中的 ssl,但那是另一回事了。
使用 vue-cli 3,我有一个 vue 应用程序在开发模式下呼啸而过。我调用 npm 运行 服务,我看到...
DONE Compiled successfully in 431ms
16:26:43
App running at:
- Local: http://localhost:8080/mobileapp/v/
- Network: http://172.18.55.202:8080/mobileapp/v/
(路径/mobileapp/v/
来自一个baseUrl配置变量。域notilusdev.dimosoftware.com/mobileapp指向iis中的一个vdir,对/mobileapp/v/的请求是反向代理到 webpack-dev-server)
在浏览器中,应用程序启动没有问题。然后它开始向 https://172.18.55.202:8080/sockjs-node/info?t=1529072806971
发送请求。这些请求失败,因为该端口上没有 ssl。我什至不想将 ip 作为站点的 public 地址。 Webpack(或sockjs)如何构造这个url?为什么它只给我一个直接的 http link 就认为这个端口上有 ssl?如果它基于地址栏协议的协议,为什么它会忽略地址栏主机名。我可以配置什么来使这些请求成功?
Web 套接字从配置的 URL 推断架构。
您需要明确向 devServer 配置提供 key/cert/pem?
以支持此功能。否则,它将尝试使用自签名证书,当然,这在您的情况下不起作用。
devSever: {
...,
key: fs.readFileSync('/path/to/server.key'),
cert: fs.readFileSync('/path/to/server.crt'),
ca: fs.readFileSync('/path/to/ca.pem'),
}
这将使用正确的 SSL 并解决您的问题。
旁注
您也不能决定不使用 https
进行 websocket 连接。但是,您可以完全不使用 HTTPS,如果您不想通过此操作,只需像往常一样使用 localhost:8081
。
这是一场斗争,但现在正在奏效...
在vue.config中的devServer
对象中添加一个public
属性。
我需要的 属性 是 public
,而不是 publicPath
,关键在于 vue 将忽略 configureWebpack{ devServer: {
中的配置更改。您需要使用顶级 devServer
属性.
所以我的工作 vue.config.js 是...
module.exports = {
baseUrl: process.env.NODE_ENV === 'production'
? '/production-sub-path/'
: '\/mobileapp\/v\/',
devServer :{
public : 'notilusdev.dimosoftware.com',
host : '0.0.0.0',
disableHostCheck : true
}
}
然后我需要通过 express 反向代理 https 和 wss:// 请求,终止 express 中的 ssl,但那是另一回事了。