我正在使用Django频道使用docker compose
和外面的nginx
websocket运行良好,但在安装certbot后,它停止了工作
它返回404,就好像它被当作普通http请求一样
VM253:1 WebSocket connection to 'wss://example.com/ws/results/tjrtudvzanxxqbyt' failed:
瑞香:
"GET /ws/results/tjrtudvzanxxqbyt" 404 2618
我的服务器nginx文件是
upstream language_transcriber{
server localhost:8000;
}
# the nginx server instance
server {
listen 443 default_server;
server_name example.com;
access_log /var/log/nginx/example.com.log;
ssl_certificate_key /etc/nginx/ssl/example.com.private_key.pem;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
root /var/www;
ssl on;
# pass the request to the node.js server with the correct headers
# and much more can be added, see nginx config options
location /ws/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto$scheme;
proxy_set_header X-Url-Scheme $scheme; proxy_redirect off;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://127.0.0.1:8000;
}
location /static/ {
alias /var/www/example.com/static/;
autoindex off;
}
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Url-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://language_transcriber/;
proxy_redirect off;
}
}
这是我的码头组合。yml
version: "3.8"
services:
django:
build: .
container_name: django
command: daphne -b 0.0.0.0 -p 8001 project.asgi:application --access-log=/code/media/daphne.access.log
ports:
- "8000:8001"
volumes:
- ./media:/code/media
environment:
- redis_host=redis://redis:6379/0
celery:
build: .
command: celery -A project worker --concurrency=10 --loglevel=info --pool=gevent -E -Ofair --logfile=/code/media/celery.log
restart: always
stdin_open: true # docker run -i
tty: true # docker run -t
environment:
- redis_host=redis://redis:6379/0
depends_on:
- django
- redis
volumes:
- ./media:/code/media
redis:
image: "redis:alpine"
worker_channels:
build: .
command: python manage.py runworker thumbnails-generate thumbnails-delete
depends_on:
- django
- redis
environment:
- redis_host=redis://redis:6379/0
volumes:
waves-volume:
该应用程序在我的本地主机上运行得很好,但在生产环境中,它只提供http而不是ws