Nginx配置Websocket

1 前言
软工大作业的服务器实现了一个自动聊天机器人的功能,经过测试在Django自带服务器中没有问题,但是在部署到Nginx后,出现了Nginx不能成功转发的问题。
经过调研后,发现是之前一直使用位于8080端口的uwsgi服务器接收从nginx监听的80端口发送来的请求,而对于websocket请求,应当使用asgi服务器来处理,因此使用uwsgi无法正常的处理websocket请求,从而出现错误。

对于wsgi和asgi,可以简单的介绍:
WSGI,全称Web服务器网关接口(Python Web Server Gateway Interface, WSGI),是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
WSGI是基于http协议模式开发的,不支持websocket。
ASGI,是异步网关协议接口,解决了python中的WSGI不支持当前的web开发中的一些新的协议标准,同时ASGI支持原有模式和websocket的扩展,即ASGI是WSGI的扩展。

 

nginx 配置多个server

http {
    server {
        listen       80;
        server_name  example.com;
        root         /var/www/example.com;
        location / {
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  blog.example.com;
        root         /var/www/blog.example.com;
        location / {
            index  index.html index.htm;
        }
    }
}

在上面的示例中,我们定义了两个server块,分别对应example.com和blog.example.com两个虚拟主机。每个server块都有自己的listen、server_name和root配置,用于指定监听端口、域名和网站根目录。location块用于指定请求的处理方式,例如index文件和其他配置。

需要注意的是,如果有多个server监听同一个端口,nginx会根据server_name来匹配请求,找到匹配的虚拟主机进行处理。如果没有匹配的虚拟主机,则会使用默认的server块进行处理。因此,在配置多个server时,需要确保server_name唯一。

 检查配置是否正确:

 

posted @ 2024-01-04 10:06  瘋耔  阅读(22)  评论(0编辑  收藏  举报
跳至侧栏