我的django和nextjs的开发版本运行良好,但当我在vercel上部署nextjs项目,在ubuntu vps上部署django项目时,它不起作用!
我的django项目使用django通道与前端进行内部通信,并通过websocket发送消息。
这是我的nginx文件:
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
server_name _;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/projectdir;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
location /ws {
proxy_pass http://localhost;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
这是我的gunicorn.service文件
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/projectdir
ExecStart=/home/ubuntu/env/bin/gunicorn
--access-logfile -
--workers 4
--bind unix:/run/gunicorn.sock
--worker-class=geventwebsocket.gunicorn.workers.GeventWebSocketWorker
chatterboxBackend.wsgi:application
[Install]
WantedBy=multi-user.target
这是我的routing.py文件:
from django.urls import re_path
from . import consumers
websocket_urlpatterns = [
re_path(r"^ws/message/(?P<room_name>w+)/$", consumers.ChatConsumer.as_asgi()),
]
这是我项目的.asgi文件
import os
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chatterboxBackend.settings")
django_asgi_app = get_asgi_application()
import message.routing
application = ProtocolTypeRouter(
{
"http": django_asgi_app,
"websocket": AllowedHostsOriginValidator(
AuthMiddlewareStack(URLRouter(message.routing.websocket_urlpatterns))
),
}
)
起初,当我尝试使用JavaScript连接到后端websocket时,
上面写着:连接失败。。。
但是,当我用命令行启动gunikorn服务器时,gunikor日志显示“未找到/ws/message/”
我向ChatGPT和其他工具询问了这个问题,但它仍然不起作用。。。。