У меня есть интерфейс React (созданный с помощью create-реагировать-приложение) и экспресс-сервер, с удаленной базой данных MySQL. Все работает нормально, когда я работаю как локально, обслуживая интерфейс на localhost:3000
и передавая запросы HTTP на localhost:3306
, который также является портом, который прослушивает приложение Express. Запросы отправляются на localhost:3000/api/endpoint
, и снова это работает.
Я сейчас пытаюсь перенести эту настройку в рабочий режим на моем сервере. Я использую общий сервер и Node настроен через Cpanel (хотя у меня есть доступ по SSH). Я не "запускаю" сторону React на сервере так, как в процессе разработки, а скорее создаю файлы сборки и помещаю их в каталог, соответствующий домашней странице моего домена.
Допустим, мой домен foo.com. Моя хостинговая компания посоветовала мне запустить Node на порту 50000 (например, когда я попробовал 3306, он сказал, что он уже используется). В настоящее время каждый запрос к моему API, похоже, приводит к 404: он пытается запросить foo.com/api/endpoint
и терпит неудачу. У меня вопрос: как правильно направить эти запросы в мой бэкэнд? Я знаю, что опция proxy
в React package.json на самом деле не предназначена для использования в производстве, так что я должен использовать вместо этого, и что это должно быть установлено? Есть ли что-то еще, что я должен ожидать настроить на сервере?
Обновление
Хорошо, сейчас я пытаюсь обойти менеджер узлов Cpanel изапустить вещи вручную. Моя структура документов на сервере выглядит следующим образом:
/home/user
|--- /project
| |--- /backend
| |--- (Node server.js, etc.)
| |--- /client
| |--- (React src, components, etc.)
|--- /public_html
|--- (React build files)
|--- .htaccess
Я считаю, что файлы сборки React должны быть в public_html
, чтобы сервер отображал их на моей домашней странице. Следовательно, в настоящее время я НЕ обслуживаю файлы сборки из моего бэкэнда (хотя @MattCarlotta предложил мне сделать это ниже; я готов сделать это, если это будет необходимо. Само приложение React, кажется, работает нормальножить на 3ecologies-seedbank.com, но, возможно, мне также нужно сообщить серверу Node о расположении public_html
?).
Другие ресурсы привели меня к мысли, что часть ответа лежит в файле .htaccess
. Мой в настоящее время выглядит следующим образом (включая некоторый код, сгенерированный Cpanel):
# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php56” package as the default “PHP” programming language.
<IfModule mime_module>
AddHandler application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
RewriteEngine On
RewriteRule ^/public_html$ http://127.0.0.1:50000/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/public_html/(.*)$ http://127.0.0.1:50000/$1 [P,L]
Я не совсем понимаю, что нужно сделать, это перенаправить запросы со страниц на public_html
в мое приложение Node, которое прослушиваетпорт 50000
. Это имеет смысл для меня, потому что, когда я запускаю задний и передний локально, мне нужно прокси-запросы от localhost:3000
(передний) до localhost:3306
(задний).
Я запустил приложение Node поверх SSH с простым node server.js
. Он может подтвердить, что прослушивает порт 50000
и подключается к базе данных. Тем не менее, каждый запрос к API от внешнего интерфейса все равно приводит к 404
. Кажется, он все еще не достигает серверной части.
Если это поможет, я нахожусь на общем сервере с Apache 2.4.41 и Cpanel 82.0 (сборка 17).
TL; DR Каков производственный эквивалент установки proxy
в React для отправки запросов на серверную часть узла?