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

Как загрузить статические файлы в настройках Nginx + Flask, если приложение сопоставлено с подкаталогом

У меня есть базовый сайт html, работающий в домене (скажем, example.com), и я хочу запустить приложение фляги в подкаталоге (например: example.com/test), приложение фляги работает на порту 5433 с использованием разработки фляги по умолчанию сервер.

Для этого я использовал следующую конфигурацию nginx

location /test {
        rewrite /test(.*) $1 break;
        proxy_pass http://localhost:5433;
        proxy_redirect     default;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    location /static/{
        alias /home/hrishi/www/example.com/test/app/static/;
    }

Я могу получить доступ к приложению, используя URL-адрес example.com/test/, но статические файлы не загружаются (дает ошибку 404), несмотря на псевдоним.

Как я могу это исправить?

Обновить: добавление всего серверного блока в соответствии с инструкциями

 server {

    listen   *:80 default_server; ## listen for ipv4; this line is default and implied
    #listen   [::]:80; # listen for ipv6

    root /home/hrishi/www/example.com/;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name example.com;

    # Logging
    access_log  /home/hrishi/log/example.com/access.log;
    error_log   /home/hrishi/log/example.com/error.log notice;

    location / {
        #try_files $uri $uri/ /index.html;
        try_files $uri $uri/ /index.php;
    }

    location /doc {
        autoindex on;
    }

    location /test {
        rewrite /test(.*) $1 break;
        proxy_pass http://localhost:5433;
        proxy_redirect     default;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }


    location /static/{
        alias /home/hrishi/www/example.com/test/app/static/;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /home/hrishi/www/example.com/error/;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    try_files $uri =404;
    #    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #    fastcgi_pass unix:/var/run/php5-fpm.sock;
    #    fastcgi_index index.php;
    #    include fastcgi_params;
    #}

    # serve static files directly
    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
        expires           max;
    }

}

Это связано с этим:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    expires           max;
}

Поскольку местоположения регулярных выражений имеют приоритет над местоположениями с префиксом. Я постыдно буду продвигать свой пост, который вы должны прочитать: Nginx rewite rules 403 ошибка.

Вам нужно будет либо превратить ваш прежний блок местоположения с префиксом в блок местоположения регулярного выражения, либо использовать блок местоположения регулярного выражения для расширений файлов с группой захвата и использовать последний в директиве псевдонима.