Ошибка переписывания или внутренний цикл перенаправления при внутреннем перенаправлении на “/index.html” в NGINX, даже когда у меня есть index.html в корневом каталоге.

Вопрос или проблема

Я сталкиваюсь с ошибкой “rewrite or internal redirection cycle while internally redirecting to “/index.html”” в NGINX, даже когда у меня уже есть index.html в корневом каталоге. Вот как я все настроил:

– Я склонировал свой репозиторий UI и сохранил его в /var/www/yourfrontend/ProjectJ_UI с файлами и папками node_modules, package-lock.json, package.json, public, src.

– Я выполнил $npm run build в каталоге, содержащем package.json, чтобы создать папку сборки с файлом index.html.

– После этого в моей конфигурации NGINX я написал следующий код:

# Конфигурация HTTP (перенаправление на HTTPS)
server {
    listen 80;
    server_name avery-insights.icu www.avery-insights.icu;

    # Перенаправить все HTTP-запросы на HTTPS
    return 301 https://$host$request_uri;
}

# Конфигурация HTTPS
server {
    listen 443 ssl;
    server_name avery-insights.icu www.avery-insights.icu;

    ssl_certificate /etc/nginx/ssl-key/avery-insights.icu.pem;
    ssl_certificate_key /etc/nginx/ssl-key/avery-insights.icu.key;

    # Настройки SSL (при необходимости отрегулируйте)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    # Конфигурация бэкенда для Node.js
    location /node/ {
        proxy_pass http://0.0.0.0:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    # Конфигурация бэкенда для Flask
    location /flask/ {
        proxy_pass http://0.0.0.0:7000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    root /var/www/yourfrontend/ProjectJ_UI/build;
    index index.html;
    location / {
        try_files $uri $uri/ /index.html;
    }
    location /static/ {
        expires 1y;
        add_header Cache-Control "build";
    }
}

И я получил rewrite or internal redirection cycle while internally redirecting to "/index.html" в sudo tail -f /var/log/nginx/error.log

Редактирование: Я проверил другие посты в интернете по этой теме, и люди сказали добавить =404 после try_files, но это только тогда, когда у меня нет index.html в корневом каталоге, верно? В моем случае все настроено, если я не упустил что-то здесь.

Пожалуйста, помогите и спасибо заранее.

Ответ или решение

Ошибка "Цикл внутренней переадресации" в NGINX: Решение проблемы

Когда вы сталкиваетесь с ошибкой "rewrite or internal redirection cycle while internally redirecting to ‘/index.html’" в NGINX, это может быть довольно запутанным. Вы уже проверили, что файл index.html существует в папке /var/www/yourfrontend/ProjectJ_UI/build, и у вас настроена переадресация с HTTP на HTTPS. Давайте подробно разберем вашу конфигурацию и возможные причины проблемы.

Анализ конфигурации NGINX

Вы представили следующую конфигурацию NGINX:

server {
    listen 80;
    server_name avery-insights.icu www.avery-insights.icu;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name avery-insights.icu www.avery-insights.icu;

    ssl_certificate /etc/nginx/ssl-key/avery-insights.icu.pem;
    ssl_certificate_key /etc/nginx/ssl-key/avery-insights.icu.key;

    # Backend configuration for Node.js
    location /node/ {
        proxy_pass http://0.0.0.0:5000;
        ...
    }

    # Backend configuration for Flask
    location /flask/ {
        proxy_pass http://0.0.0.0:7000;
        ...
    }

    root /var/www/yourfrontend/ProjectJ_UI/build;
    index index.html;

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

    location /static/ {
        expires 1y;
        add_header Cache-Control "build";
    }
}

Возможные Причины Ошибки

  1. Проблемы с директивой try_files:
    Директива try_files $uri $uri/ /index.html; сообщает NGINX сначала попытаться найти запрашиваемый URI. Если он не находит ни файл ($uri), ни директорию ($uri/), он перенаправляет на /index.html. Эта конфигурация применима для одностраничных приложений (SPA), но иногда может приводить к циклам, если запрашиваемый URI не соответствует действительно существующему файлу или директории.

  2. Пути к статическим файлам:
    Если ваш index.html содержит ссылки на статические ресурсы, убедитесь, что пути к статическим файлам корректны. Если они ссылаются на несуществующие ресурсы, это может вызывать дополнительное обращение к NGINX, что приведет к циклом.

  3. Повторное обращение к корню:
    Цикл может возникать, если браузер или клиентский запрос вызывает / (или аналогичный путь) много раз. Например, если какой-то ресурс вызывает /index.html, это может бесконечно возвращаться к try_files, создавая цикл.

Решение Проблемы

  1. Изменение директивы try_files:
    Попробуйте изменить конфигурацию location / на следующую:

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

    Директива =404 говорит NGINX возвращать ошибку 404, если /index.html не был найден, что может помочь в предотвращении циклов.

  2. Проверка путей в index.html:
    Убедитесь в том, что все пути к статическим файлам и ресурсам внутри index.html корректны и указывают на существующие файлы.

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

Заключение

Ошибки "rewrite or internal redirection cycle" могут быть вызваны различными факторами, связанными с конфигурацией NGINX или вашим приложением. Постарайтесь запустить предложенные решения и протестировать. Пошаговый подход к устранению ошибок и тщательная проверка конфигурации помогут вам устранить проблему и эффективно настроить сервер.

Оцените материал
Добавить комментарий

Капча загружается...