curl: запускается на разных серверах, возвращаются разные IP-адреса - PullRequest
0 голосов
/ 20 декабря 2011

Я пытался выяснить, почему моя страница, которая использует библиотеку curl в PHP, работала на моей dev-машине , но не работала на моем удаленном сервере . Одно из подозрений заключается в том, что curl имеет поддержку SSL, как указано в одном из комментариев здесь :

Если ваша установка curl не скомпилирована с поддержкой SSL, вы будете биться головой о стену, пытаясь выяснить, почему curl_exec () не удается или что-то еще делает ...

Итак, я запустил этот сценарий , чтобы выяснить, поддерживается ли SSL на моем dev-компьютере и на удаленном сервере . И моя dev машина и удаленный сервер произвели следующее (похоже, что оба поддерживают SSL):

CURL_VERSION_IPV6 соответствует CURL_VERSION_KERBEROS4 не соответствует CURL_VERSION_SSL соответствует CURL_VERSION_LIBZ соответствует

Однако, когда я запустил curl из командной строки на моем удаленном сервере (тот, на котором мой скрипт не удался), вот что я получил (т.е. curl завис):

curl -v http://<my-domain>/blog/press-release/
* About to connect() to <my-domain> port 80
*   Trying 66.201.45.235... 

Та же самая curl командная строка отлично работала на моей dev-машине , хотя она возвращала другой IP-адрес:

curl -v http://<my-domain>/blog/press-release/
* About to connect() to <my-domain> port 80 (#0)
*   Trying 10.3.1.207... connected

Пожалуйста ... пожалуйста, помогите? Есть ли другой способ выяснить разницу между установленным curl на моем устройстве и удаленным сервером ? Почему они вернули разные адреса?

1 Ответ

2 голосов
/ 20 декабря 2011

Доменное имя (например, my-domain.com) преобразуется в IP-адрес через DNS .

Когда программа пытается получить доступ к сетевому устройству по имени, операционная система связывается с ним.настроил DNS-сервер и запросил у него IP-адрес, соответствующий указанному имени.Затем DNS-сервер ответит либо IP-адресом (или набором IP-адресов - можно настроить имя для разрешения более чем одного IP-адреса), либо сообщением об ошибке, в сущности «Я не смог найтиназвание".Операционная система также будет иметь файл hosts , который представляет собой список сопоставлений домена с IP-адресом, которые статически настроены.Если в файле хоста есть соответствие для запрошенного домена, с DNS-сервером не будет установлено соединение, и вместо него будет использоваться настроенный IP-адрес.

Корпоративная локальная сеть часто имеет собственный внутренний DNS-сервер, который контролирует внутренний домен, и, если она получает запрос на член этого домена, она возвращает IP-адрес локальной сети этого хоста вместоIP-адрес в глобальной сети.

Я полагаю, что ваша проблема заключается в том, что происходит одно из двух:

  • В файле hosts на вашем сервере dev есть настроенная запись для соответствующего домена, котораяявляется внутренней для вашей сети.Я говорю это потому, что адрес, который вы получаете на своем компьютере разработчика, преобразуется в IP-адрес, который находится в диапазоне, обычно зарезервированном для локальных сетей
  • Устройство, с которым вы пытаетесь установить связь, находится в вашем собственном домене, размещенном внутри сети, гдеваша машина разработки находится, а в вашей локальной сети есть DNS-сервер, который контролирует ваш домен, используемый вашей машиной разработки для поиска DNS.

В любом случае, реальная проблема, которую вам нужно решить, заключается в том, что хоствы пытаетесь установить контакт, не принимает соединения от глобальной сети по адресу 66.201.45.235, то есть то, что интернет видит как IP-адрес.Это может быть связано с конфигурацией сервера, брандмауэрами, NAT или другими причинами.

Скорее всего, это не связано с SSL - cURL пытается подключиться к порту 80, который используется длянезашифрованные соединения HTTP и не требует SSL.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...