Нет статических файлов - основной хост .net на сервере NGINX Ubuntu 18.04 с пользовательским доменом - PullRequest
0 голосов
/ 02 июля 2019

Проблема: Статические файлы не загружены (404)

Описание: Размещение приложения .net core MVC на nginx через обратный прокси-сервер.Он настроен на поддержку SSL с сертификатами letsencrypts и настроен таким образом, чтобы он мог размещать несколько веб-сайтов, добавляя их конфигурации в папку sites-available.

Файл конфигурации:

server {
        listen   80;
        listen [::]:80;
        server_name mydomain.com *.mydomain.com;

        location / {
                proxy_pass              http://localhost:5000;
                proxy_http_version      1.1;
                proxy_set_header        Upgrade $http_upgrade;
                proxy_set_header        Connection keep-alive;
                proxy_set_header        Host $host;
                proxy_cache_bypass      $http_upgrade;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;
                root /var/www/mydomain.com/htdocs;
        }

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

}

Попытки: Я пробовал с различными вариантами настройки root и try_files.Также попытался добавить именованный отдельный раздел location, чтобы связать его через прокси для try_files.Чтобы проверить, есть ли файлы в первую очередь, я запустил curl в папку с файлами на localhost:5000, и она определенно есть.

Текущее состояние: Сайт делаетзагрузка при посещении домена, но он выбрасывает 404 для каждого статического файла.У меня в разделе конфигурации приложения app.UseStaticFiles();, чтобы не пропустить.

1 Ответ

1 голос
/ 03 июля 2019

Это потому, что вы указали только 1 правило в качестве обратного прокси-сервера, даже если вы указали свойство root, оно никогда не используется. Нам нужно использовать 2 правила, которые одно обрабатывает 404 из другого:

server {
    listen   80;
    listen [::]:80;
    server_name mydomain.com *.mydomain.com;

    location / {
        root /var/www/mydomain.com/htdocs;
        error_page 404 @app;
    }

    location @app {
        proxy_pass              http://localhost:5000;
        proxy_http_version      1.1;
        proxy_set_header        Upgrade $http_upgrade;
        proxy_set_header        Connection keep-alive;
        proxy_set_header        Host $host;
        proxy_cache_bypass      $http_upgrade;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
    }

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

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

И тогда вы сможете удалить UseStaticFiles из вашего приложения.

...