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

Nginx - обслуживание статических файлов

Что я здесь делаю не так?

Это работает:

location / {
    alias /var/www/static/;
    try_files $uri index.html =404;
}

Но это не так:

location /hello {
    alias /var/www/static/;
    try_files $uri index.html =404;
}

Вот ошибка, которую я получаю:

[error] 14428#0: *1 open() "/usr/share/nginx/html/bundle.js" failed (2: No such file or directory)

Я знаю, что Nginx ищет bundle.js из неправильного каталога. Он должен находиться в папке / var / www / static /.

Я могу исправить это, добавив

root /var/www/static/

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

location /world {
    alias /var/www/another/;
    try_files $uri index.html =404;
}

Ошибка:

[error] 14827#0: *1 open() "/var/www/static/bundle2.js" failed (2: No such file or directory)

bundle2.js должен находиться в папке / var / www / another /, но поскольку я определил root как / var / www / static /, Nginx ищет bundle2.js из неправильной папки.

Вот весь конфиг:

server {
    listen 80;

    root /var/www/static/;

    location /hello {
        alias /var/www/static/;
        try_files $uri index.html =404;
    }

    location /world {
        alias /var/www/another/;
        try_files $uri index.html =404;
    }
}

Как файл запрашивается внутри вашего html файла? Если вы запросите его с косой чертой в начале (<script src="/bundles.js"></script>) он является корневым, что заставляет nginx искать файл в корневом каталоге веб-сайта, который с вашей первой конфигурацией был каталогом по умолчанию. Со второй конфигурацией nginx нашел ее в "/ var / www / static"
Если ваш .js вызывается <script src="bundles.js"></script> (относительный путь) он должен работать.