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唯一。
检查配置是否正确: