Вопрос или проблема
Я пытаюсь запустить приложение sveltekit, построенное с помощью адаптера node, на управляемом сервере Hetzner с konsoleH.
Веб-сервер – Apache, и в папке “public_html” у меня есть файл .htaccess со следующими правилами:
RewriteEngine On
RewriteRule ^(.*)$ http://0.0.0.0:3000/ [P,L]
Мне позволено запускать nodejs на сервере, и я поместил папку “build” sveltekit за пределы “public_html” на том же уровне,
поэтому ее путь – “/usr/home/myaccount/build”, тогда как “public_html” – “/usr/home/myaccount/public_html”
Если я запускаю “node build”, сервер node запускается, и приложение обслуживается почти корректно:
Я вижу форму входа, которую я создал, и текст главной страницы, но ни стилей, ни изображений, ни файлов js,
и я получаю много “200 OK” ошибок КРАСНЫМ цветом (NS_ERROR_CORRUPTED_CONTENT) в консоли инструментов разработчика браузера (Firefox). Несколько из них:
GET http://testdomain.com/_app/immutable/entry/start.Bdelxb9Y.js NS_ERROR_CORRUPTED_CONTENT
GET http://testdomain.com/_app/immutable/chunks/BUpY52Oh.js NS_ERROR_CORRUPTED_CONTENT
и так далее, за исключением первого вызова:
GET http://testdomain.com/_app/immutable/assets/app.DrWw3tSc.css [HTTP/1.1 200 OK 44ms]
без дальнейших ошибок
Я возился с базовым путем в svelte.config.js, с относительным опциональным, с чем угодно, что смог придумать, но безуспешно, с различными результатами между ошибками 500 и 404.
Я также пробовал помещать папку “build” в “public_html”, безуспешно.
Может кто-нибудь подсказать и дать мне наводку? Я уверен, что это связано с конфигурацией пути, но в чем дело?
Большое спасибо
Ответ или решение
Ваш вопрос касается проблемы с ошибками типа NS_CORRUPTED_CONTENT при запуске приложения SvelteKit на сервере Hetzner с использованием Apache. Давайте разберем теорию, примеры и возможные применения для решения этой проблемы.
Теория
Когда браузер выводит ошибку NS_CORRUPTED_CONTENT, это обычно связано с тем, что сервер отправляет данные, которые не соответствуют ожидаемому формату. В случае веб-приложений предполагается, что содержимое, типа JavaScript, CSS, или HTML, передается в неизмененном виде. Причины таких ошибок могут быть различными: проблемы с конфигурацией сервера, неправильно настроенные заголовки HTTP или сжатие, кэширования и другие аспекты.
Одной из основных теорий может быть проблема с проксированием в конфигурации .htaccess. Правило переписывания RewriteRule ^(.*)$ http://0.0.0.0:3000/ [P,L]
, скорее всего, пытается проксировать все запросы на ваш Node.js сервер, что может неправильно интерпретировать запросы на статические файлы.
Пример
Рассмотрим ваш случай: SvelteKit приложение запускается, и главная страница отображается, однако стили и скрипты не подгружаются. Это указывает на то, что запросы до серверной части проходят успешно, но при обращении к статическим файлам что-то идет не так.
Один из распространенных примеров таких проблем – неверное проксирование или несоответствие путей. В контексте SvelteKit, статические файлы часто развертываются в подкаталоге, таком как /_app
, и если ваше правило переписывания перенаправляет каждый запрос на корень Node.js-сервера, статические файлы могут быть неправильно обработаны.
Применение
Теперь, когда мы понимаем, что может быть причиной проблемы, давайте рассмотрим шаги для ее решения:
-
Расположение статических файлов: Убедитесь, что статические файлы доступны по прямым путям без проксирования их на Node.js. Это можно настроить путем исключения этих путей из правил переписывания.
-
Обновление .htaccess: Измените .htaccess, чтобы исключить проксирование запросов на статические файлы:
RewriteEngine On # Исключите проксирование для статических файлов RewriteCond %{REQUEST_URI} !^/_app RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|jpeg|gif|ico)$ RewriteRule ^(.*)$ http://0.0.0.0:3000/$1 [P,L]
-
Проверка заголовков HTTP: Убедитесь, что сервер отправляет правильные заголовки
Content-Type
для CSS и JS файлов. Это может быть сделано с помощью настроек Apache или Node.js. -
Логи сервера: Проверьте журналы Apache и Node.js на наличие ошибок или предупреждений, которые могут указывать на проблемы с конфигурацией или зависимостями.
-
Кэширование и сжатие: Если ваш сервер или прокси использует сжатие (например, gzip), убедитесь, что оно настроено правильно и не повреждает файлы.
-
Дебаггинг: Попробуйте запустить сервер на другом порту или временно убрать проксирование, чтобы изолировать непосредственно проблему с сервера или конфигурации SvelteKit.
Следуя вышеуказанным рекомендациям, у вас должно получиться устранить NS_CORRUPTED_CONTENT ошибки и обеспечить корректную работу вашего SvelteKit приложения на сервере Hetzner. Убедитесь, что все элементы конфигурации согласованы друг с другом, чтобы минимизировать риск подобных проблем в будущем.