资讯专栏INFORMATION COLUMN

Nginx 转发 socket 端口配置

ztyzz / 3604人阅读

摘要:常规情况,我们可以在用户页面,直接建立链接,但这样的操作会暴露端口,带来一定的安全隐患,使用进行转发,可以隐藏端口。或者代理服务器可以配置定时发送帧来重置超时及检查链接是否可用。

原文链接:何晓东 博客

Nginx 转发 socket 端口常见场景:在线学习应用,在常规功能之外,增加一个聊天室功能,后端选择 swoole 提供服务提供者,同时不想前端直接 ip:port 方式链接到服务,需要使用 Nginx 进行转发。

常规情况,我们可以在用户页面,直接建立 socket 链接,但这样的操作会暴露端口,带来一定的安全隐患,使用 Nginx 进行转发,可以隐藏端口。额外的问题就是一些 header 参数也需要在转发过程中带给 socket 服务提供者,其他只需要 Nginx 处理一下从常规协议转换到 Websocket 就可以。

其中,"Upgrade" 是 逐跳(hop-by-hop) 头,无法从客户端转发到代理服务器,通过转发代理,客户端可以使用 CONNECT 方法来规避此问题。但是,这不适用于反向代理,因为客户端不知道任何代理服务器,并且需要在代理服务器上进行特殊处理。同时逐跳头包含 "Upgrade" 和 "Connection" 都无法传递,则需要在转换为 Websocket 的时候带上这两个参数:例如:

location /chat/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

进阶:让转发到代理服务器的 "Connection" 头字段的值,取决于客户端请求头的 "Upgrade" 字段值。例如:

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ""      close;
    }

    server {
        ...

        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }

注意:示例中的 http://backend 为一组负载均衡的服务器,只有单台服务器的,可以写成 proxy_pass http://127.0.0.1:9501; 这样的。

此外,默认情况下,在 60 秒内未传送任何数据的链接将被关闭,时间可以使用 proxy_read_timeout 指令来延长。或者代理服务器可以配置定时发送 ping 帧来重置超时及检查链接是否可用。

参考链接: Nginx Websocket proxying

来点更多力量吗? 当然来 买吧,要吃饭的鸭

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40448.html

相关文章

  • Nginx 转发 socket 端口配置

    摘要:常规情况,我们可以在用户页面,直接建立链接,但这样的操作会暴露端口,带来一定的安全隐患,使用进行转发,可以隐藏端口。或者代理服务器可以配置定时发送帧来重置超时及检查链接是否可用。 原文链接:何晓东 博客 Nginx 转发 socket 端口常见场景:在线学习应用,在常规功能之外,增加一个聊天室功能,后端选择 swoole 提供服务提供者,同时不想前端直接 ip:port 方式链接到服务...

    luodongseu 评论0 收藏0
  • nginx架构

    摘要:反向代理反向代理反向代理负载均衡鉴权限流等逻辑架构在逻辑上分为入口层,模块化的功能处理层,系统调用层。多个共同监听事件并处理,反向代理会把请求转发给后端服务。 一.概述 本文将深入剖析nginx的架构。 第一部分介绍nginx现有框架,用典型的4+1视图阐述,包括逻辑架构,开发架构,运行架构,物理架构,功能用例,nginx为单机服务,不考虑物理架构。其中功能用例概述nginx功能;逻辑...

    smartlion 评论0 收藏0
  • nginx架构

    摘要:反向代理反向代理反向代理负载均衡鉴权限流等逻辑架构在逻辑上分为入口层,模块化的功能处理层,系统调用层。多个共同监听事件并处理,反向代理会把请求转发给后端服务。 一.概述 本文将深入剖析nginx的架构。 第一部分介绍nginx现有框架,用典型的4+1视图阐述,包括逻辑架构,开发架构,运行架构,物理架构,功能用例,nginx为单机服务,不考虑物理架构。其中功能用例概述nginx功能;逻辑...

    fuyi501 评论0 收藏0
  • php+nginx项目中的权限

    摘要:权限情况此时只需要拥有文件的权限即可。脚本文件步骤访问时,为了能够把正确的脚本处理结果返回给客户端,需要进行配置告诉是非静态文件,需要脚本解析器进行处理后才能返回内容。 php+nginx项目中的权限 nginx/php-fpm 进程权限 主进程用户为启动的用户 子进程 nginx的用户为nginx.conf中配置的用户 php-fpm的用户为php-fpm.conf中配置的用户...

    Lin_YT 评论0 收藏0
  • php+nginx项目中的权限

    摘要:权限情况此时只需要拥有文件的权限即可。脚本文件步骤访问时,为了能够把正确的脚本处理结果返回给客户端,需要进行配置告诉是非静态文件,需要脚本解析器进行处理后才能返回内容。 php+nginx项目中的权限 nginx/php-fpm 进程权限 主进程用户为启动的用户 子进程 nginx的用户为nginx.conf中配置的用户 php-fpm的用户为php-fpm.conf中配置的用户...

    魏宪会 评论0 收藏0

发表评论

0条评论

ztyzz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<