Вопрос или проблема
Я сталкиваюсь с ошибкой “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";
}
}
Возможные Причины Ошибки
-
Проблемы с директивой
try_files
:
Директиваtry_files $uri $uri/ /index.html;
сообщает NGINX сначала попытаться найти запрашиваемый URI. Если он не находит ни файл ($uri
), ни директорию ($uri/
), он перенаправляет на/index.html
. Эта конфигурация применима для одностраничных приложений (SPA), но иногда может приводить к циклам, если запрашиваемый URI не соответствует действительно существующему файлу или директории. -
Пути к статическим файлам:
Если вашindex.html
содержит ссылки на статические ресурсы, убедитесь, что пути к статическим файлам корректны. Если они ссылаются на несуществующие ресурсы, это может вызывать дополнительное обращение к NGINX, что приведет к циклом. -
Повторное обращение к корню:
Цикл может возникать, если браузер или клиентский запрос вызывает/
(или аналогичный путь) много раз. Например, если какой-то ресурс вызывает/index.html
, это может бесконечно возвращаться кtry_files
, создавая цикл.
Решение Проблемы
-
Изменение директивы
try_files
:
Попробуйте изменить конфигурациюlocation /
на следующую:location / { try_files $uri $uri/ /index.html =404; }
Директива
=404
говорит NGINX возвращать ошибку 404, если/index.html
не был найден, что может помочь в предотвращении циклов. -
Проверка путей в
index.html
:
Убедитесь в том, что все пути к статическим файлам и ресурсам внутриindex.html
корректны и указывают на существующие файлы. -
Логи и отладка:
Обратите внимание на логи, используйте более подробные настройки журнала для получения дополнительной информации о запросах, которые приводят к ошибке.
Заключение
Ошибки "rewrite or internal redirection cycle" могут быть вызваны различными факторами, связанными с конфигурацией NGINX или вашим приложением. Постарайтесь запустить предложенные решения и протестировать. Пошаговый подход к устранению ошибок и тщательная проверка конфигурации помогут вам устранить проблему и эффективно настроить сервер.