我已经设置了一个托管' angular2-webpack-starter'前端项目和nodejs后端项目。 nginx默认有两个proxy_pass,用于将连接映射到服务器上的正确位置。几乎所有内容都按预期工作。但是sockjs-node/info
的代理存在问题,这让我感到很惊讶。
跑步时我看到:
zone.js:1960 GET https://localhost:3000/sockjs-node/info?t=1490740454197 net::ERR_CONNECTION_CLOSED
这两个代理是:
location ^~ /server/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_pass https://127.0.0.1:9000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ^~ / {
#proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
我已经查看过这个问题的其他几个答案,但无济于事。我尝试在前端添加cors的东西,没有任何意义,这没有任何效果。我尝试关闭proxy_buffering无济于事(正如我所料)。我甚至添加了< underscored_in_headers;'在nginx中,无济于事。
其他人已经使用webpack-dev-server来执行代理,但似乎nginx应该可以轻松处理这个问题,当我在没有webpack-dev-server的情况下进入生产时,我会遇到同样的问题。
如果您遇到过这个问题或有想法,我们将非常感谢您的帮助。
答案 0 :(得分:4)
花了很长时间,但我发现了问题。其他人在开发期间尝试在安全站点上运行时可能会受益。
问题是proxy_pass到' http://127.0.0.1:3000/'。这会导致问题。
更改为:
proxy_pass https://127.0.0.1:3000/;
将webpack.dev.js中的devServer设置为:
https: true,
https: {
key: fs.readFileSync('/etc/apache2/certwork/xxx.key'),
cert: fs.readFileSync('/etc/apache2/certwork/xxx.crt'),
ca: fs.readFileSync('/etc/apache2/certwork/ssl-bundle.crt')
},
解决了这个问题。注意:https:true就足够了,但我希望尽可能接受连接,因此我添加了密钥,证书,ca等。
你仍会看到:
就我而言:
由于与' https://localhost:3000'的连接仍然与域名不匹配。 IE浏览器。 localhost!== parke.dynazu.com。但是一切正常,当我离开webpack-dev-server时,这不会是一个问题。