gpt4 book ai didi

NGinx 将 websocket 从 80 转发到 websocket 端口

转载 作者:行者123 更新时间:2023-12-03 11:35:20 29 4
gpt4 key购买 nike

我将 Nginx 用作 Web 主机和代理,用于在同一设备上运行的 websocket 监听端口 8888。试图找到一种方法让 nginx 在 80 上监听并将 websocket 请求转发到内部端口。无需将新端口暴露在外部。这甚至可能吗?

更新:

这是我目前的配置:

error_log       /var/log/nginx/error_log.log    warn;

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

upstream websocket {
server localhost:8888;
}


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

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html/EncoderAdmin;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;


}

location /ws {
proxy_pass http://localhost:8888;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

}

当我尝试使用 ws://[address]/ws 连接到它时,我得到:

WebSocket 连接到 'ws://[address]/ws' 失败:WebSocket 握手期间出错:意外响应代码:400

最佳答案

是的,假设您可以区分正常的 HTTP 请求和套接字请求是可能的。

最简单的解决方案是将套接字 uri 与 location 匹配。 ,例如对 /ws 的所有请求将被重定向到 localhost:8888 ,任何其他网址到 localhost:8889 .这是一个配置示例

server {
server_name _;

location /ws {
proxy_pass http://localhost:8888;
# this magic is needed for WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}

location / {
proxy_pass http://localhost:8889;
}
}

您还应该记住将 websocket 服务器绑定(bind)到 localhost:8888 而不是 0.0.0.0:8888。这一步不是必需的,但原始端口不会暴露!

关于NGinx 将 websocket 从 80 转发到 websocket 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42491668/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com