«Преждевременно закрытое соединение вверх при чтении заголовка ответа вверх» с nginx, PostgreSQL и Mono в приложении Ubuntu MVC4

/ Edit Я сделал предложение ответа на упомянутый выше вопрос, чтобы предоставить права доступа к реестру следующим образом:

sudo mkdir -p /usr/local/etc/mono/registry sudo chmod uog+rw /usr/local/etc/mono/registry 

Это не помогло, так как проблема с плохими шлюзами появилась только после предоставления доступа к реестру с помощью приведенных выше команд (до этого я получил ошибку реестра).

Вопрос : Я хочу развернуть приложение MVC 4, работающее в режиме Mono с nginx, на сервер Ubuntu Azure. Выбрав такой сервер Ubuntu и выполнив сценарий установщика, мне удалось запустить веб-приложение по умолчанию и просмотреть его на oogstplanner.cloudapp.net. Установщик работал следующим образом:

 wget https://bitbucket.org/mindbar/install-mono/raw/master/install-nginx- mono.sh && sudo chmod +x install-nginx-mono.sh && ./install-nginx-mono.sh 

Скрипт установил nginx и mono и установил nginx.conf и другие файлы конфигурации.

То, что я тогда сделал, это удалить эту установку, установить postgresql и настроить базу данных и заменить файлы в $ HOME / www / моим собственным веб-приложением MVC 4, которое работает локально, скопировав его там. Затем при запуске я вижу

502 Bad Gateway”>

ошибка.

Файл журнала /var/log/nginx/error.log говорит (для первого и последующих запросов):

2015/04/03 14:24:36 [error] 1305 # 0: * 6 вверх по течению преждевременно закрытого соединения при чтении заголовка ответа от восходящего streamа, клиент: my.ip.207, server: localhost, request: «GET / Account / Login ? ReturnUrl =% 2f HTTP / 1.1 “, upstream:” fastcgi: //127.0.0.1: 9001 “, хост:” oogstplanner.cloudapp.net ”
2015/04/03 14:26:05 [error] 1305 # 0: * 8 connect () failed (111: Connection failed) при подключении к upstream, client: my.ip.207, server: localhost, request: “GET / HTTP / 1.1 “, upstream:” fastcgi: //127.0.0.1: 9001 “, хост:” oogstplanner.cloudapp.net ”
2015/04/03 14:29:24 [ошибка] 1305 # 0: * 10 connect () не удалось (111: соединение отказано) при подключении к восходящему streamу, клиент: my.ip.58, server: localhost, request: “GET / HTTP / 1.1 “, upstream:” fastcgi: //127.0.0.1: 9001 “, хост:” oogstplanner.cloudapp.net ”
(…)

Таким образом, он видит, что ему нужно перейти в / Account / Login? ReturnUrl! Что-то работает.

Когда я копирую приложение по умолчанию, он работает снова.

Конфигурация:

  • Вот мой /etc/nginx/nginx.conf .
  • Вот мой / etc / nginx / sites-available / mono-default (тот же, что и для сайтов / monodefault)

/ edit У меня есть сильное подозрение, что это связано с базой данных PostgreSQL. Это связано с тем, что я только что перезагрузил сервер и увидел, что это исключение NullReferenceException выбрано NauckIt.PostgreSQLProvider:

То, что я увидел после перезагрузки

Эта ошибка всегда происходит локально один раз , а затем после обновления приложение работает. Но на сервере приложение не работает, но после того, как поставщик PostgreSQL не выбрал исключение NullReferenceException, я получаю ошибку 502. Поэтому я думаю, что плохой шлюз может возникнуть из соединения PostgreSQL.

/ Edit2 Сюжет сгущается: когда я просматриваю базу данных, я вижу (некоторые) сеансы, созданные в таблице Sessions. Я не вижу никакой логики, когда это происходит, и не удалось создать новую. Но иногда между веб-приложением и базой данных была связь.

Вот журнал PostgreSQL после перезагрузки (в 14:25:23) и переход на веб-сайт через браузер (в 14:24:36):

2015-04-03 14:24:23 UTC LOG: система базы данных готова принимать соединения
2015-04-03 14:24:23 UTC LOG: запущен автовакуумный пусковой механизм
2015-04-03 14:24:23 UTC LOG: неполный стартовый пакет
2015-04-03 14:24:36 UTC LOG: не удалось получить данные от клиента: сброс соединения с помощью одноранговой сети

Согласно пользователю reddit:

502 Bad Gateway – это код состояния HTTP и не может быть возвращен postgres, потому что postgres не говорит HTTP. Аналогично, NullReferenceException является исключением Mono и не выбрасывается postgres, так что это тоже не проблема postgres. Ваше приложение пытается отправить некоторые данные в postgres, но сбой, прежде чем он сможет это сделать. Это проблема приложения, а не проблема postgres. Надеюсь это поможет.

Кто-нибудь знает, что здесь не так?

PS У меня есть все шаги, которые я сделал, зарегистрированный в разделе Deployment в файле README .

Проблема может быть вызвана изначально отключением порта http и разрешением только https. Если они не были включены, попробуйте включить http-порт, разрешите только запросы через 127.0.0.1. В дополнение к этому также проверяйте значения « тайм-аута » в настройках конфигурации. Надеюсь это поможет…