Nginx

nginx 和 php |無法解析主機名並與 FQDN 建立連接

  • July 16, 2014

我不知道是什麼導致了這個問題,nginx configs 或 php 或其他任何東西,但:

當下面列出的這些 php 函式的主機值設置為像**http://www.domain.comwww.domain.com這樣的FQDN時,我無法建立連接,但是如果我將主機名 ip 例如192.2.8.1****問題都消失了**。

例如:@fsockopen($host, $port, $errno, $errstr, 10) 
**不會**在 $host = "www.somedomain.com" 時建立連接
$host = "192.2.2.1" 時成功連接

到目前為止,列出的函式遇到了同樣的問題

  • @fsockopen
  • @file_get_contents
  • 當主機為“www.somedomain.com”時phpmailer無法通過SMTP發送電子郵件但當主機為“192.2.2.1”時成功發送郵件

在我將我的 FQDN 指向我的伺服器之前,所有這些都執行良好,當我進行測試時

,它都適用於我執行 wammp 伺服器的電腦和同一應用程序的 ip 和域,我

不是 100% 確定但我猜這個問題是在我將我的域和 DNS 指向伺服器之後提出的?!

**注意:**此案例與伺服器配置有關,我提供了 php 參考以更好地描述此案例

‘downvoters 現在可以放鬆了,我已經完全改變了描述’ 。

行 !終於在這個問題上苦苦掙扎了一周之後:

首先,這似乎是一個世紀以來非常流行的問題!

https://bugs.php.net/bug.php?id=11058

https://www.google.com/search?hl=es&ie=UTF-8&oe=UTF-8&q=php+php_network_getaddresses%3A+getaddrinfo+failed&meta=&gws_rd=ssl

有些人自己找到了單獨的解決方案,但絕對不是 PHP 錯誤。

這個問題可以涵蓋的內容:

  • 如果您無法連接到**@fsockopen**
  • 如果無法使用**@file_get_contents獲取內容**
  • 如果您的 php 腳本無法發送電子郵件或連接到SMTP 伺服器
  • 如果您無法 ping 您的域或無法找到 ping:不存在的域
  • 如果你不能敲你的伺服器 ip 並且getaddrinfo() 失敗
  • 如果您直接對php_network_getaddresses有問題
  • 如果您的 Wordpress 拋出錯誤無法連接到 tcp://mydomain.com:80。錯誤 #0:php_network_getaddresses:getaddrinfo 失敗:不知道這樣的主機。

–可能導致這些問題的因素—————————————— ——–

$$ X $$

首先要檢查的是檢查您的php.ini並確保啟用了這些屬性

allow_url_fopen = 打開
allow_url_include = 開啟

$$ X $$

創建一個 phpinfo() 文件 [ phpinfofile.com 以防萬一] 並檢查是否啟用了這些擴展

OpenSSL
插座

特別是對於通過禁用 PHP_OpenSSL 擴展執行 xammp 或 wammp 的 Windows 使用者,您可能無法通過 @fsockopen 進行連接

$$ X $$

現在重要的部分是去resolv.conf 通過執行打開你的 resolv.conf

須藤納米 /etc/resolv.conf
  1. 刪除評論,如果開頭有評論行完全刪除
  2. 更改名稱伺服器,即使它們很好,只需更改它們的順序,如果有舊記憶體,這有助於清除 DNS 記憶體

$$ X $$

強烈確保您的**/etc/resolv.conf 不是**指向某些目錄的符號連結,這些目錄通常位於 /run/resolvconf/ 或 etc .. 您可以執行

**ls -la /etc/resolv.conf**

看看結果是什麼,如果是這樣的話

-rw-r----- 1 root root ` ` /etc/resolv.conf --------> /run/resolvconf/resolv.conf

如果您有 ftp 訪問權限,請下載您的 /etc/resolv.conf,然後將伺服器上的目前文件重命名為 /etc/resolv.conf—–bk 行(僅用於備份),然後上傳您從系統下載到伺服器 /etc/

或者如果您無權訪問 ftp,請執行這些命令

sudo cp /etc/resolv.conf /etc/resolv.conf.bak
須藤 rm /etc/resolv.conf
須藤納米 /etc/resolv.conf
將您的名稱伺服器放在新文件上

前任:
名稱伺服器 8.8.8.8
名稱伺服器 8.8.4.4

並按 Ctr + X 保存,然後鍵入“Y”並輸入
chmod a+r /etc/resolv.conf

在這種情況下,我的問題是!

$$ X $$

確保所有使用者都可以訪問您的 reslv.conf

chmod a+r /etc/resolv.conf

結果應該是

-rw-r--r-- 1根根<size> <date> 

執行ls -la /etc/resolv.conf後

$$ X $$

下一次執行

sudo nano /etc/network/interfaces

找到dns-nameservers並確保名稱伺服器看起來不錯(最好將任何名稱伺服器放在 /etc/resolv.conf 文件中 - 例如:dns-nameservers 8.8.8.8 8.8.4.4

到目前為止,這就是我在這個問題上發現的所有內容,我試圖讓任何人都可以理解它,抱歉對你所熟知的事情的煩人引用
如果其他人有更多關於這個問題的內容,請分享。

引用自:https://serverfault.com/questions/612992