在开发环境下websocket运行正常,使用nginx部署后,报错。
报错信息如下:
2023-08-21 16:54:06,360 ERROR [Failure instance: Traceback: <class 'AttributeError'>: 'NoneType' object has no attribute 'replace'
/usr/local/lib/python3.9/site-packages/autobahn/websocket/protocol.py:2909:processHandshake
/usr/local/lib/python3.9/site-packages/txaio/tx.py:369:as_future
/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py:206:maybeDeferred
/usr/local/lib/python3.9/site-packages/daphne/ws_protocol.py:72:onConnect
--- <exception caught here> ---
/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py:206:maybeDeferred
/usr/local/lib/python3.9/site-packages/daphne/server.py:200:create_application
/usr/local/lib/python3.9/site-packages/channels/routing.py:58:__call__
/usr/local/lib/python3.9/site-packages/channels/security/websocket.py:35:__call__
/usr/local/lib/python3.9/site-packages/channels/security/websocket.py:53:valid_origin
/usr/local/lib/python3.9/site-packages/channels/security/websocket.py:72:validate_origin
/usr/local/lib/python3.9/site-packages/channels/security/websocket.py:73:<genexpr>
/usr/local/lib/python3.9/site-packages/channels/security/websocket.py:97:match_allowed_origin
/usr/local/lib/python3.9/urllib/parse.py:393:urlparse
/usr/local/lib/python3.9/urllib/parse.py:462:urlsplit
]
这是因为,在urllib3.AllowedHostsOriginValidator被破坏了。我解决了这个问题,编辑了我的asgi.py file.
application = ProtocolTypeRouter({
"websocket": AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter(
websocket_urlpatterns
)
)
)
})
# 将上面代码改成
application = ProtocolTypeRouter({
"websocket": AuthMiddlewareStack(
URLRouter(
websocket_urlpatterns
)
)
})