Рейтинг:0

Приложение express js с обратным прокси-сервером nignx «перенаправляло вас слишком много раз».

флаг cn

я использую pm2 для запуска моего приложения MERN как процесса, когда я набираю завиток http://локальный:3000 в консоли вывод действительно из моего приложения. но обратный прокси nginx не работает. приложение работает на vps и подключено к доменному имени. но меня слишком много раз перенаправляли. из браузера.

сервер.js

постоянный ПОРТ = 3000
постоянное приложение = экспресс()

постоянный маршрутизатор = экспресс. Маршрутизатор ()

const {постоянный, магазин} = createPersistor()

const serverRenderer = (req, res, next) => {

 app.get('/*', function (req, res) {
   res.sendFile(path.join(__dirname, '../build/index.html'), функция (ошибка) {
     если (ошибка) {
       рез.статус(500).отправить(ошибка)
     }
   })
 })

 постоянный контекст = {}

 fs.readFile(path.resolve('./build/index.html'), 'utf8', (ошибка, данные) => {
   если (ошибка) {
     console.error(ошибка)
     return res.status(500).send('Произошла ошибка')
   }
   вернуть res.send(
     данные.заменить(
       '<div id="root"></div>',
       `<div ID="корень">
       ${ReactDOMServer.renderToString(
         <Магазин поставщика={магазин}>
           <StaticRouter location={req.url} context={context}>
             <PersistGate loading={null} persistor={persistor}>
               <Приложение />
             </PersistGate>
           </Статикмаршрутизатор>
         </Провайдер>
       )}
       </div>`
     )
   )
 })
}

router.use('^/$', serverRenderer)

роутер.использовать(
  express.static(path.resolve(__dirname, '..', 'сборка'))
)

app.use(маршрутизатор)

app.listen(ПОРТ, () => {
  console.log(`SSR работает на порту ${PORT}`)
})

nginx/сайты-доступно/по умолчанию:

сервер {
слушать 80 default_server;
слушать [::]:80 default_server;

имя_сервера 198.51.100.255;
вернуть 302 $схема://mysite.com$request_uri;

место расположения / {
    # Сначала пытаемся обслужить запрос как файл, затем
    # в качестве каталога, затем вернуться к отображению 404.
    try_files $uri $uri/ =404;
    proxy_pass http://localhost:3000;
    прокси_http_версия 1.1;
    proxy_set_header Обновить $http_upgrade;
    proxy_set_header Соединение «обновление»;
    proxy_set_header Хост $host;
    proxy_cache_bypass $http_upgrade;
 }
}

и журнала ошибок нет.

примечание: я еще не настроил SSL.

Michael Hampton avatar
флаг cz
Действительно, вы перенаправляете все запросы в nginx на один и тот же URL без каких-либо условий. Зачем вы настроили этот редирект?
флаг cn
@MichaelHampton, чтобы я мог запускать свое приложение через порт 3000 и nginx через порт 80 в качестве веб-сервера. и обслуживать мое приложение через обратный прокси.
Michael Hampton avatar
флаг cz
Это не имеет смысла. Нет никакой причины для этого перенаправления, и это очевидная причина проблемы.
флаг cn
@MichaelHampton, у вас есть какие-либо предложения или ресурсы о том, как я могу сделать это должным образом?
Michael Hampton avatar
флаг cz
Удалите недопустимую переадресацию.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.