Як налаштувати блок розташування, щоб завжди повертати один файл у nginx?


12

У своїй програмі я хочу, щоб місцеположення "/" повернуло статичний файл index.html, я хочу, щоб "/ static" обслуговувало статичні файли з папки, і я хочу, щоб усі інші запити поверталися 404 НЕ ЗНАЙДЕНО. Згодом я переспрямую всі інші запити на сервер WSGI.

Наразі це моя конфігурація:

# Dev server.
server {
    listen 1337;
    charset UTF-8;

    location / {
        rewrite ^ static/index_debug.html break;
    }

    location /static {
        alias /home/tomas/projects/streamcore/static;
    }
}

Статична папка працює чудово, але "/" повертається 404 НЕ ЗНАЙДЕНО. Я також спробував:

alias /home/tomas/projects/streamcore/static/index_debug.html;

У блоці розташування, але це повертає 500 ВНУТРІШНЬОЇ ПОМИЛКИ СЕРВЕРА Схоже alias, не подобаються окремі файли. Додатково я спробував:

try_files static/index_debug.html;

Але це зупиняє сервер починати з помилки "недійсна кількість аргументів у директиві try_files". Мабуть, try_filesнасправді потрібно спробувати більше одного файлу, що не є поведінкою, яку я шукаю.

Тому моє запитання таке: Як я так налаштовую блок розташування, щоб завжди повертати статичний файл?


EDIT: Я бачив з інших відповідей, які aliasдійсно повинні прийняти один аргумент як аргумент, тому я спробував:

location = / {
    alias /home/tomas/projects/streamcore/static/index_debug.html;
}

Але я все одно отримую лише 500 Внутрішніх помилок сервера. Журнал помилок для запиту "/" говорить:

[сигнал] 28112 # 0: * 7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" не є каталогом

Чому він намагається відкрити "index_debug.htmlindex.html"? Я indexніде не використовую директиву.


Чи можете виtry_files static/index_debug.html static/index_debug.html;
ceejayoz

@ceejayoz: Пробуючи вашу пропозицію, location =/я отримую 404 НЕ ЗНАЙДЕНО, location /я отримую 500 Внутрішніх помилок сервера .
Hubro

Якщо я не помиляюся, ви пропускаєте директиву щодо індексу ... Будь-який веб-сервер завжди шукатиме файл індексу, надаючи кореневий URI (/), я думаю, ви можете це змінити, додавши:location / { return 404; }
Martino Dino

@MartinoDino: Навіщо мені це потрібно? І де?
Hubro

location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
Martino Dino

Відповіді:


10

Я просто перевірив це, і він працює для мене:

server {
    root /tmp/root;
    server {
        listen 8080;
        location /static {
            try_files $uri =404;
        }
        location / {
            rewrite ^ /static/index_debug.html break;
        }
    }
}

Файл /tmp/root/static/index_debug.htmlіснує звичайно :)

Я можу потрапити на будь-яку URL-адресу і я просто отримаю статичну сторінку.


0

Ви можете використовувати try_files та переспрямування до названого місця за допомогою перезапису. Подобається це:

server {
    root /tmp/root;
    server {
        listen 8080;

        location / {
            try_files $uri $uri/ @index;
        }

        location @index {
            rewrite ^ static/index_debug.html break;
        }
    }
}

Якщо файл існує в /tmp/rootньому, він буде поданий, інакше uri буде переписаний static/index_debug.htmlі він буде поданий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.