代码之家  ›  专栏  ›  技术社区  ›  mohamed naser

Django通道连接失败(nginx+daphne+certbot+docker-compose)

  •  0
  • mohamed naser  · 技术社区  · 3 年前

    我正在使用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

    0 回复  |  直到 3 年前
    推荐文章