asp.net - 如何为 Web 套接字配置 Nginx 反向代理?
问题描述
我在 Ubuntu 上运行 ASP Core 应用程序。
在应用程序前面有用作反向代理的 Nginx 网络服务器,如下所示:
# Part 1 : Redirect http tp https
server {
server_name example.com www.example.com;
listen 80;
listen [::]:80;
return 301 https://www.example.com$request_uri;
}
# Part 2 : Reverse proxy for https requests. Get the app response from localhost:5000
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /home/aspuser/ssl/example.crt;
ssl_certificate_key /home/aspuser/ssl/example.key;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
proxy_pass http://127.0.0.1:5000;
}
}
# Part 3 : Reverse proxy for websockets on port 3000. Get the app response from localhost:5000/ws
server {
listen 3000 ssl;
server_name example.com www.example.com
ssl_certificate /home/aspuser/ssl/example.crt;
ssl_certificate_key /home/aspuser/ssl/example.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:5000/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
第 1 部分和第 2 部分工作正常。应用程序正确显示 ssl 证书。
第 3 部分:Websocket 反向代理不起作用。当我尝试使用以下 Javascript 从 Chrome Dev Tab 发送 websocket 消息时:
var socket = new WebSocket("wss://www.example.com:3000");
socket.onopen = function(e) {
console.log("Connection established");
};
我收到错误:
WebSocket connection to 'wss://www.example.com:3000/' failed: Error in connection establishment: net::ERR_CONNECTION_RESET
相同的应用程序在 localhost 上正常工作(我在 localhost 上得到 websocket 响应),但在 Ubuntu 上发布时不能。(服务器防火墙允许使用端口 3000)。
任何人都可以帮忙吗?
解决方案
我相信你的
proxy_pass http://127.0.0.1:5000/ws;
应该读
proxy_pass http://127.0.0.1:5000/ws/;
我似乎记得当位置以 / 结尾时,转发路径也应该如此。
推荐阅读
- apache - 如何使用本地主机访问 html 文件
- swiftui - SwiftUI 有没有 $ 有什么区别
- c# - 动态查询 - 怎么做
- sql - SQL查询以获取时间戳列中没有小时的数据
- java - 是否可以仅在部署在 Kubernetes 上的 Spring Boot 应用程序的一个副本中添加属性?
- python - 使用 selenium 时无法从链接中获取所有数据
- angular - 角度捕捉(并阻止)点击浏览器上的上一页按钮
- tensorflow - 使用 Keras、Tensorflow 进行多变量、多步 LSTM 时间序列预测
- xslt - 如何使用 for-each-group by 在 XSLT 2.0 中对值进行分组
- python - 来自熊猫数据框嵌套字典的熊猫数据框