如何使用 nginx 和 SSL 代理通过 Uvicorn 或 Daphne 代理 WSGI 和 ASGI?
How to proxy both WSGI and ASGI via Uvicorn or Daphne with nginx and SSL proxy?
我有一个使用 Django Channels (websockets) 的小项目,它在本地运行良好。我已经使用 letsencrypt-companion-container
docker 图像将 SSL 添加到基于 docker 的部署中,它公开 443,处理所有 SSL,然后将 requests/responses vi 端口 80 导入我的 A/WSGI 适配器(uvicorn 或 daphne)。
在 SSL 下,我的客户端代码在 JS 控制台中出现此错误:
`WebSocket connection to 'wss://my_server.com/ws/echo/' failed: Error during WebSocket handshake: Unexpected response code: 404`
我不清楚为什么。我该怎么做?
这是我的 nginx.conf,如果有帮助:
upstream wsgi {
server web:8000;
}
upstream asgi {
server web:8000;
}
server {
listen 0.0.0.0:80;
location / {
proxy_pass http://wsgi;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /ws {
proxy_pass http://asgi;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
location /staticfiles/ {
alias /home/app/web/staticfiles/;
}
}
我遇到了类似的问题,我的 Django 服务器出现了 403 错误。检查 this 并设置我的 ALLOWED_HOSTS = "*"
后,服务器正常工作。
老实说,这对我来说不是最佳做法,但虽然我发现了更好的方法,但它是启动服务器和 运行.
的一种方法
还要确保在 nginx
中包含 this configuration
我有一个使用 Django Channels (websockets) 的小项目,它在本地运行良好。我已经使用 letsencrypt-companion-container
docker 图像将 SSL 添加到基于 docker 的部署中,它公开 443,处理所有 SSL,然后将 requests/responses vi 端口 80 导入我的 A/WSGI 适配器(uvicorn 或 daphne)。
在 SSL 下,我的客户端代码在 JS 控制台中出现此错误:
`WebSocket connection to 'wss://my_server.com/ws/echo/' failed: Error during WebSocket handshake: Unexpected response code: 404`
我不清楚为什么。我该怎么做?
这是我的 nginx.conf,如果有帮助:
upstream wsgi {
server web:8000;
}
upstream asgi {
server web:8000;
}
server {
listen 0.0.0.0:80;
location / {
proxy_pass http://wsgi;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /ws {
proxy_pass http://asgi;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
location /staticfiles/ {
alias /home/app/web/staticfiles/;
}
}
我遇到了类似的问题,我的 Django 服务器出现了 403 错误。检查 this 并设置我的 ALLOWED_HOSTS = "*"
后,服务器正常工作。
老实说,这对我来说不是最佳做法,但虽然我发现了更好的方法,但它是启动服务器和 运行.
的一种方法还要确保在 nginx
中包含 this configuration