приложение uwsgi uwsgi flask и nginx дают 404 не найдено

#nginx #flask #uwsgi

#nginx #flask #uwsgi

Вопрос:

Я застрял. Я хочу развернуть приложение python dash на своем vps. Я начал с приложения flask, следуя этому руководству: https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04

Итак, я создал сервис myproject. Проверка состояния, похоже, в порядке: журнал

Моя конфигурация nginx:

 server {

    listen       443 ssl http2;
    #listen [::]:443 ssl http2;
    server_name  www.mysite.com mysite.com;
    root         /var/www/wordpress;
    index        index.php;

    access_log   /var/log/nginx/wordpress.log;
    error_log    /var/log/nginx/wordpress_error.log  error;

    ssl_certificate_key /etc/nginx/ssl/www.XXX.key;
    ssl_certificate     /etc/nginx/ssl/www.XXX.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security max-age=31536000;


    location / {
        try_files $uri $uri/ =404;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }


    location /shiny/ {
       rewrite ^/shiny/(.*)$ /$1 break;
       proxy_pass http://127.0.0.1:3838;
       proxy_redirect http://127.0.0.1:3838 $scheme://$host/shiny/;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection $connection_upgrade;

       proxy_temp_file_write_size 64k;
       proxy_connect_timeout 10080s;
       proxy_send_timeout 10080;
       proxy_read_timeout 10080;
       proxy_buffer_size 64k;
       proxy_buffers 16 32k;
       proxy_busy_buffers_size 64k;
       proxy_redirect off;
       proxy_request_buffering off;
       proxy_buffering off;
    }
    location /rstudio/ {

       rewrite ^/rstudio/(.*)$ /$1 break;
       proxy_pass http://127.0.0.1:8787;
       proxy_redirect http://127.0.0.1:8787 $scheme://$host/rstudio/;
       #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       #proxy_set_header X-Real-IP $remote_addr;
       #proxy_set_header Host $http_host;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection $connection_upgrade;
       proxy_http_version 1.1;
       #proxy_redirect off;
       proxy_buffering off;
       #proxy_set_header Upgrade $http_upgrade;
       #proxy_set_header Connection "upgrade";
       proxy_read_timeout 86400;
    }


   location /myproject/ {
        uwsgi_pass unix:/home/XXX/XXX/python_dash/myproject/myproject.sock;
        include uwsgi_params;
        }

}
 

Но когда я перехожу к mysite.com/myproject / Я получаю:
введите описание изображения здесь

Однако он отличается от обычного nginx (появляется в ответ на орфографическую ошибку):

введите описание изображения здесь

Значит, что-то происходит. Это также видно в статусе службы myproject. Каждый раз, когда я пытаюсь получить к нему доступ, внизу отображается строка:

 [pid: 1696|app: 0|req: 1/1] 213.134.X.XX () {58 vars in 1334 bytes} [Fri Dec  3 13:22:08 2021] GET /myproject/ => generated 232 bytes in 40 msecs (HTTP/2.0 404) 2 headers in 87 bytes (2 switches on core 0)
 

мой myproject.ini:

 [uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 666
vacuum = true

die-on-term = true
 

Можете ли вы дать мне подсказку? Я застрял на этом и не могу его решить…

С наилучшими пожеланиями, Томаш

Комментарии:

1. Я подозреваю, что ваше приложение flask возвращает 404, можете ли вы попробовать запустить: curl -vL --no-buffer -XGET --unix-socket /home/XXX/XXX/python_dash/myproject/myproject.sock http://localhost/myproject/

2. Таек, вот ответ: Примечание: Ненужное использование -X или —request, GET уже выведено. * Попытка /home/lemur/Knight_Frank/python_dash/myprojec:0… * Подключен к локальному хосту (myproject.sock) порт 80 (# 0)> GET /myproject/ HTTP/ 1.1 > Хост: локальный хост> Пользовательский агент: curl / 7.68.0 > Принять: / > * Пустой ответ от сервера * Соединение # 0 с локальным хостом хоста осталось нетронутым curl: (52) Пустоответ с сервера

3. @Taek, есть идеи, как продолжить?

4. Извините, понятия не имею. Возможно, попробуйте отладку с помощью proxy_pass через http вместо сокета.

Ответ №1:

Наконец-то нашел его!

@app.route должен совпадать с местоположением в конфигурации nginx

итак, в моем случае, когда:

 location /myproject/
 

маршрут приложения должен быть:

 @app.route("/myproject/")
 

Помните о завершающем «/», потому что, если вы не добавите его, он вернет not found, если вы введете завершающий «/» в адресной строке (например https://website.com/myproject / не будет работать, только https://website.com/myproject )

Аналогичная ситуация с python dash, но на этот раз @app.route (или @server.route) не работает. Вам нужно добавить route_pathname_prefix=»/myproject/» в dash.Тире (…).

Я не понимаю, почему это так работает, но это работает.