Flask + Gunicorn + Nginx, ошибка 404 при использовании proxy_pass из блока местоположения, отличного от root - PullRequest
0 голосов
/ 25 марта 2020

Я хотел бы взять пользовательский ввод, выполнить несколько строк Python и отобразить результаты в Интернете. Как и ожидалось, это рутинная работа.

У меня есть домен, указывающий на сервер в DigitalOcean, и я следую этому руководству: https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04

I Я смог пройти курс обучения, и он работает, однако я бы, конечно, хотел, чтобы мой сайт не был полностью переопределен фразой «Привет!». Я хотел бы отобразить результаты не в root расположении, например https://example.com/myproject/.

Домен, который я уже защищал с помощью Let's Encrypt & CertBot.

Я использую один nginx конфигурационный файл, называемый default - остальная часть урока я точно следовал. Кажется, проблема в директиве proxy_pass. Когда я перемещаю его в блок / location, он работает, и моя страница индекса перезаписывается «Hello there!». Когда я перемещаю proxy_params и proxy_pass в блок / myproject / location, я получаю ошибку 404. Я пробовал несколько вещей и пытался лучше понять блоки местоположения, но безрезультатно.

Вот файл конфигурации Nginx:

# Default server configuration
#
server {

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.php;

    server_name example.com www.example.com;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    location /myproject/ {
        include proxy_params;
        proxy_pass http://unix:/home/adude/myproject/myproject.sock;
    }

    # pass the PHP scripts to FastCGI server
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    location ~ /\.ht {
        deny all;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.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

}

Любая помощь будет в значительной степени оценили. Спасибо!

1 Ответ

0 голосов
/ 25 марта 2020

Разобрался. Мне нужно было изменить декоратор @ app.route в файле .py напрямую на правильный, и я думаю, что крайне важно указать методы GET и POST.

from flask import Flask
app = Flask(__name__)

@app.route("/myproject/", methods=['GET','POST','PUT'])
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

...