Рейтинг:1

Обратный прокси-сервер Apache для узла — в соединении отказано: AH00957

флаг in

Я пытаюсь получить новый облачный сервер, работающий с версией сервера Ubuntu 20.04 по умолчанию, работающей с apache и node. Сервер узла работает без проблем, сообщающих об открытии порта 4006. Однако я считаю, что моя конфигурация apache не является. Запрос будет висеть очень-очень долго. В терминале узла ошибки не отображаются.

Я подтвердил, что на стороне узла все правильно, с помощью следующей команды, которая возвращает полный объект json из apache:

// Работает как положено и возвращает правильные результаты 
curl -H 'Тип содержимого: application/json' -X POST <json>' -H "Хост: https://<https_url>.com" http://127.0.0.1:4006/graphql

Ошибка запроса через некоторое время

502 ошибка прокси

Журнал ошибок Apache

[Вс, 17 октября, 20:58:56.608793 2021] [прокси:ошибка] [pid 1596878] (111)Отказ в подключении: AH00957: HTTP: попытка подключения к [::1]:4006 (localhost) не удалась
[Вс, 17 октября, 20:58:56.608909 2021] [proxy_http:error] [pid 1596878] [client 207.46.13.93:27392] AH01114: HTTP: не удалось установить соединение с серверной частью: localhost

виртуальный хост

<VirtualHost <Server Ip Address>:80>
    ServerName api.aDomain.com
    Redirect permanent / https://api.aDomain.com/
</VirtualHost>
<IfModule mod_ssl.c>
    <VirtualHost <Server Ip Address>:443>
        ServerName api.aDomain.com

        ProxyRequests on
        LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
        LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

        ProxyPass / http://localhost:4006/
        ProxyPassReverse / http://localhost:4006/
    

        #certificates SSL
        SSLEngine on
        SSLCACertificateFile /etc/ssl/api.aDomain.com/apimini.ca
        SSLCertificateFile /etc/ssl/api.aDomain.com/apimini.crt
        SSLCertificateKeyFile /etc/ssl/api.aDomain.com/apimini.key

        ErrorLog ${APACHE_LOG_DIR}/error_api.aDomain.com.log
        CustomLog ${APACHE_LOG_DIR}/access_api.aDomain.com.log combined

    </VirtualHost>
</IfModule>

вывод терминала

[узел] 1.19.4
[nodemon] для перезапуска в любое время введите `rs`
[nodemon] просматривает каталог(и): *.*
[nodemon] просмотр расширений: js,mjs,json
[nodemon] запуск `babel-node -r dotenv/config --inspect=9229 index.js`
Отладчик прослушивает ws://127.0.0.1:9229/c1fcf271-aea8-47ff-910e-fe5a91fce6d2
Для справки см.: https://nodejs.org/en/docs/inspector.
Список браузеров: caniuse-lite устарел. Пожалуйста, запустите следующую команду `npm update`
 Сервер готов по адресу http://localhost:4006.

Узловой сервер

импортировать cors из 'cors'

импортировать очистку из './src/api/routes/scrape'

константный экспресс = требуется ('экспресс')
const { ApolloServer, gql } = require('apollo-server-express')
const { постграфил } = требуется ('постграфил')
const ConnectionFilterPlugin = require('postgraphile-plugin-connection-filter')

константа dbHost = процесс.env.DB_HOST
константа dbPort = процесс.env.DB_PORT
const ИмяБД = process.env.DB_NAME
константа dbUser = процесс.env.DB_USER
константа dbPwd = процесс.env.DB_PWD
константа dbUrl = dbPwd
  ? `postgres://${dbUser}:${dbPwd}@${dbHost}:${dbPort}/${dbName}`
  : `postgres://${dbHost}:${dbPort}/${dbName}`

вар corsOptions = {
  источник: '*',
  optionsSuccessStatus: 200, // некоторые устаревшие браузеры (IE11, различные SmartTV) подавляют 204
}

асинхронная функция main() {
  // Создаем схему, используя язык схем GraphQL
  const typeDefs = gql`
    введите запрос {
      привет: строка
    }
  `

  // Предоставляем функции разрешения для полей вашей схемы
  константные распознаватели = {
    Запрос: {
      привет: () => 'Привет, мир!',
    },
  }

  const server = new ApolloServer({ typeDefs, resolvers })

  постоянное приложение = экспресс()
  app.use (cors (corsOptions))
  приложение.использовать(
    postgraphile(process.env.DATABASE_URL || dbUrl, 'public', {
      appendPlugins: [ConnectionFilterPlugin],
      смотретьPg: правда,
      графика: правда,
      увеличитьGraphiql: правда,
    })
  )
  server.applyMiddleware({приложение})

  //Инструменты очистки
  очистить (приложение)

  постоянный порт = 4006
  ожидайте app.listen({порт})
  console.log(` Сервер готов по адресу http://localhost:${port}`)
}

main () .catch (e => {
  консоль.ошибка(е)
  процесс.выход(1)
})
djdomi avatar
флаг za
Apache пытается подключиться через IPv6, используйте 127.0.0.1 вместо localhost или, что будет лучше, привяжите свое приложение к ipv4 И ipv6 :-) (`попытка подключиться к [::1]:4006 (localhost) не удалась`)
флаг de
Еще одна небольшая проблема (вероятно, не связанная): Здесь `-H "Host: https://.com"` вы не должны указывать `https://`, просто `-H "Host: domain.com"` правильно.
флаг in
Я на самом деле использую IP-адрес сервера. Я должен был сделать это более ясным: D Я обновлю

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

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