Директива щодо індексу nginx не працює


1

У наведеному нижче фрагменті конфігурації для nginx:

server {
        listen 443;
        listen [::]:433;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        server_name example.com;

        root /var/www/example.com;
        index index.html;
        error_page 502 = @fallback;
        error_page 404 = @not_found;

        location / {
            #try_files /index.html $uri =404; # A
            try_files $uri =404;              # B
        }

        location /service/ {
            rewrite ^/service/(.*)$ /$1 break;

            proxy_set_header X-Load-Balancer "a";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://127.0.0.100:42424;
        }

        location @fallback {
            try_files /502.html =500;
        }

        location @not_found {
            try_files /404.html =500;
        }
}

Чому Правильно подано index.html (який знаходиться в /var/www/example.com/), але B не робить і призводить до того, що на сторінці розміщується 404.html сторінка?

Відповіді:


1

try_filesДиректива обробляє кожен член в порядку, поки не знайде файл , який існує.

Якщо файл /var/www/example.com/index.htmlіснує, перший термін у випадку (A) завжди буде успішним, і URI буде внутрішньо змінено на /index.html. indexДиректива не бере. Також case (A) завжди поверне /index.htmlфайл.

У випадку (B) try_filesшукає лише файли, а не каталоги. Якщо ви хочете try_filesзіставити каталог і обробити його зі значенням indexдирективи, використовуйте термін із заднім числом /. Наприклад:

try_files $uri $uri/ =404;

Докладніше див. У цьому документі .


Отримав! Я пам'ятаю, як читав, що indexдиректива працює на URI з кінцевими косою рисою, але я не одразу зрозумів, що фактичне обслуговування виконується компанією try_files. Це має сенс. Дякую!
rrrrrrrrrrrrrrrr

1
Вам не потрібно try_filesреалізовувати index. Але якщо у вас є try_filesзаява, вам потрібно додати $uri/термін, інакше indexвін буде відключений у цьому блоці.
Річард Сміт

О, добре. Це десь зазначено в документації?
rrrrrrrrrrrrrrrr


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