3

У меня есть сайт, созданный в виртуальной коробке. Я могу получить к нему доступ из браузера на моей машине, но у меня возникают проблемы с доступом к нему через CURL, когда SSH подключен к коробке.

Когда я пытаюсь, curl зависает до отображения ответа и выхода.

Вот что я запускаю: curl -vvv site1.dev/

Это вывод, который он дает:

* Hostname was NOT found in DNS cache
*   Trying 192.168.10.10...
* Connected to site1.dev (192.168.10.10) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: site1.dev
> Accept: */*
> 
< HTTP/1.1 200 OK
* Server nginx/1.9.7 is not blacklisted
< Server: nginx/1.9.7
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Cache-Control: no-cache
< Date: Fri, 08 Apr 2016 16:47:30 GMT
< 
* Connection #0 to host site1.dev left intact
hi

Часть запроса отправляется сразу же, но ответ зависает на несколько секунд (выглядит как 120ish), а затем завершается curl с этим сообщением: * Connection #0 to host site1.dev left intact

Затем следует соответствующий текст ответа "привет".

Я немного растерялся - любые указатели были бы оценены.

Редактировать 11 апреля: я пробовал wget и вижу аналогичный результат (ответ зависает). Я подозреваю, что это проблема конфигурации сети.

В случае, если это уместно, вот некоторые настройки порта для виртуальной коробки.

==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 80 => 8000 (adapter 1)
    default: 443 => 44300 (adapter 1)
    default: 3306 => 33060 (adapter 1)
    default: 5432 => 54320 (adapter 1)
    default: 22 => 2222 (adapter 1)

РЕДАКТИРОВАТЬ 12 апреля:

Так... Я решил уничтожить эту бродячую коробку и начать все заново ... это решило проблему.

Я подозреваю, что я изменил / сломал что-то в течение последних нескольких месяцев. Запуск заново с настройками ванильного бокса исправил эту проблему.

2 ответа2

1

Возможно, nginx настроен для разрешения IP-адресов входящих запросов и требует времени для разрешения входящего соединения, прежде чем фактически ответить на запрос.

Пара указателей, однако, вы должны проверить следующее на 192.168.10.10.

  1. Проверьте правильность имен серверов в /etc/resolv.conf
  2. Если параметры разрешения # 1 верны для основного и дополнительного серверов имен, убедитесь, что 192.168.10.10 имеет возможность разрешать хосты. (простой nslookup для google.com является хорошим тестом для этого, если время ожидания истекло, то это может быть частью проблемы)
  3. Убедитесь, что ваш сервер nginx имеет возможность запрашивать серверы имен внешне или внутренне через брандмауэр (порт 53 tcp /udp)
  4. Найдите возможные параметры разрешения в параметрах конфигурации nginx и, если применимо, установите время ожидания разрешения и перезапустите nginx.
  5. Если проблема все еще остается, попытайтесь добавить хост соединения с входящим запросом в /etc /hosts на 192.168.10.10.

Дайте мне знать, как это работает для вас ..

Спасибо за публикацию.

1

Примечание: Вы можете получить более подробную информацию о времени, используя time curl -vvv site1.dev/ .

Я отмечаю, что ответ сервера содержит Connection: keep-alive , что означает, что сервер настроен на использование HTTP keep-alive :

Постоянное соединение HTTP, также называемое поддержанием активности HTTP или повторным использованием соединения HTTP, представляет собой идею использования одного соединения TCP для отправки и получения нескольких запросов / ответов HTTP, в отличие от открытия нового соединения для каждой отдельной пары запрос / ответ. Более новый протокол HTTP / 2 использует ту же идею и развивает ее, позволяя мультиплексировать несколько одновременных запросов / ответов по одному соединению.

Поэтому сервер поддерживает соединение открытым в ожидании обслуживания большего количества запросов. Таким образом, браузер может использовать одно и то же TCP-соединение для получения HTML-страницы и немедленно запрашивать связанные изображения без необходимости устанавливать новые соединения.

Страница man curl.1 указывает параметр --no-keepalive :

Отключает использование сообщений keepalive в TCP-соединении, так как по умолчанию curl их разрешает.

Вы также можете настроить параметры аналогично модулю сервера nginx ngx_http_core_module keepalive_timeout :

Syntax:   keepalive_timeout timeout [header_timeout];
Default:  keepalive_timeout 75s;
Context:  http, server, location

Первый параметр устанавливает время ожидания, в течение которого клиентское соединение keep-alive будет оставаться открытым на стороне сервера. Нулевое значение отключает клиентские соединения keep-alive. Необязательный второй параметр устанавливает значение в поле заголовка ответа «Keep-Alive: timeout = time». Два параметра могут отличаться.

Поле заголовка «Keep-Alive: timeout = time» распознается Mozilla и Konqueror. MSIE самостоятельно закрывает соединения keep-alive примерно через 60 секунд.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .