Назад | Перейти на главную страницу

111: В соединении отказано при подключении к восходящему каналу Django: supervisord Nginx

Я новичок в процессах на стороне сервера, и другие вопросы, касающиеся этой темы, имеют разные стеки, чем я, поэтому было довольно сложно найти полезные ответы.

Очень возможно, что я делаю глупую ошибку с IP-адресами в блоке сервера, но, опять же, поскольку я новичок, это не очевидно.

Я запускаю приложение Django 2.1 в Digital Ocean, используя Nginx и supervisor. Мое приложение использует Django channels который использует daphne поэтому я использую supervisor (asgi вместо того uwsgi).

Я также зарегистрировался в Let's Encrypt, чтобы получить сертификат SSL.

Supervisor и Nginx работают, и я вижу

502 Bad Gateway когда я ввожу свое доменное имя.

Журнал nginx показывает

2019/02/26 15:51:40 [error] 20187#20187: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 86.xxx.xxx.14, server: myapp.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8000/", host: "www.myapp.com"

sudo /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf показывает

2019-02-26 15:52:39,429 CRIT Supervisor running as root (no user in config file)
2019-02-26 15:52:39,430 WARN Included extra file "/etc/supervisor/conf.d/appname_asgi.conf" during parsing
2019-02-26 15:52:39,431 INFO Creating socket tcp://127.0.0.1:8000
2019-02-26 15:52:39,431 INFO Closing socket tcp://127.0.0.1:8000
Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.

Очевидно, что другая программа использует port 8000.

тем не мение sudo netstat -nlp | grep 8000 ничего не возвращает.

файл конфигурации / etc / nginx / sites-enabled / myapp:

upstream myapp {
    server 127.0.0.1:8000;
}

server {
    server_name myapp.com www.myapp.com;

    location = /favicon.ico { access_log off; log_not_found off; }

    location / {
        try_files $uri @proxy_to_app;
    }

    location /static/ {
        root /home/me/myapp/src/myapp;
    }

    location /media/  {
        root /home/me/myapp/src/myapp;
        include /etc/nginx/mime.types;
    }

    location @proxy_to_app {
        proxy_pass http://myapp;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_redirect off;
        proxy_set_header Host $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;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/myapp.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/myapp.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}


server {
    if ($host = www.myapp.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = myapp.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name myapp.com www.myapp.com;
    return 404; # managed by Certbot

/etc/supervisor/conf.d/myapp_asgi.conf

[fcgi-program:asgi]
# TCP socket used by Nginx backend upstream
socket=tcp://127.0.0.1:8000

# Directory where your site's project files are located
directory=/home/me/myapp/src/myapp

# Each process needs to have a separate socket file, so we use process_num
# Make sure to update "mysite.asgi" to match your project name
command=daphne -u /home/me/daphne/run/daphne%(process_num)d.sock --f$

# Number of processes to startup, roughly the number of CPUs you have
numprocs=4

# Give each process a unique name so they can be told apart
process_name=asgi%(process_num)d

# Automatically start and recover processes
autostart=true
autorestart=true

# Choose where you want your log to go
stdout_logfile=/home/me/daphne/logs/asgi.log
redirect_stderr=true

sudo netstat -peanut

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      112        2954261     11650/redis-server 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          3495386     19401/nginx -g daem
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          15750       1564/sshd       
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      0          3499269     19401/nginx -g daem
tcp        0    356 xxx.xx.xxx.76:22        xx.xx.xxx.14:52521     ESTABLISHED 0          3417368     13924/1         
tcp        0      0 xxx.xx.xxx.76:22        xx.xx.xxx.14:52528     ESTABLISHED 0          3418136     14131/2         
tcp6       0      0 :::6379                 :::*                    LISTEN      1000       2954691     11712/redis-server 
tcp6       0      0 :::80                   :::*                    LISTEN      0          3495387     19401/nginx -g daem
tcp6       0      0 :::22                   :::*                    LISTEN      0          15761       1564/sshd     

Я был бы признателен, если бы кто-нибудь мог рассмотреть это, поскольку, как я уже сказал, я уверен, что проблема очевидна для кого-то с более высоким уровнем навыков в этой области.

Большое спасибо.

Решил, изменив на

command=/home/Env/myapp/bin/daphne -u /run/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers mysite.asgi:application

так что он смог выполнить daphne команда