回答編集履歴

1

DNS設定とネットワーク設定について再回答(コメントより)

2018/01/14 06:52

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -1,12 +1,106 @@
1
- PHP問題ではなく、DNSルーティングの問題なような気がします。まず、OSのネットワク設定の問題なのかApacheかPHPの問題なのか切分ける必要がると思います。まは、CentOSのターミナルで下記コマンドで確認してみるとよいかと思います
1
+ **Googleページスクレイピングはポリシ違反なのでやめましょう**(←とりあしておきます
2
2
 
3
3
 
4
4
 
5
- 下記で時間かからないのであればApacheかPHPの問題です。ただ私も似たような環境ですが特に問題ありません。Apacheなら例えば`KeepAlive, HostnameLookups`をOFFにしてみるとよいと思います。
5
+ コメントによるとやはりネットワーク設定に問題あると思ますので回答を書き換えました。まずはDNS設定に問題があるのかその他ネットワーク設定に問題るのか確認してみるとよいす。
6
+
7
+
8
+
9
+ たぶん名前解決に時間がかかっていると思われるので、下記コマンドで確認してみてください。**下記どれでも遅い場合はその他ネットワーク設定に問題があるはずです。**
10
+
11
+
12
+
13
+ #### DNS確認
14
+
15
+
16
+
17
+ 1. GoogleなどのパブリックDNSをIP直指定で名前解決をしてみます(名前解決が**ない**ので早いはず)
18
+
19
+ 1. **example.com** に直接IP直指定でPINGをうってみます(名前解決が**ない**ので早いはず)
20
+
21
+ 1. 現在のDNS設定で名前解決してみます(名前解決が**ある**ので遅いはず)
22
+
23
+ 1. 現在のDNS設定でPINGをうってみます(名前解決が**ある**ので遅いはず)
6
24
 
7
25
 
8
26
 
9
27
  ```bash
28
+
29
+ #(↓早いはず)google-public-dns-a.google.com:8.8.8.8
30
+
31
+ dig example.com @8.8.8.8
32
+
33
+
34
+
35
+ #(↓早いはず)example.com:93.184.216.34
36
+
37
+ ping -c 1 93.184.216.34
38
+
39
+
40
+
41
+ #(↓遅いはず)プロバイダのDNSを使って名前解決する
42
+
43
+ dig example.com
44
+
45
+
46
+
47
+ #(↓遅いはず)プロバイダのDNSを使ってPING
48
+
49
+ ping -c 1 example.com
50
+
51
+ ```
52
+
53
+
54
+
55
+
56
+
57
+ #### resolv.conf
58
+
59
+
60
+
61
+ 上記から、DNS設定に問題がある場合は、直接外部プロバイダのDNSを指定するのではなく、ルーターから名前解決できるようにしてください。CentOSにプライベートIPを振っているようなので、多分 **192.168.0.1, 192.168.1.1** のようなプライベートIPアドレスです。ネットワーク設定に問題のないWindowsなどで確認してみてください。
62
+
63
+
64
+
65
+ そして、たぶん必要ないと思われるので`domain, search`はコメントアウトしてください。これらはざっくりいうとドメインの補完機能です。
66
+
67
+
68
+
69
+ 例えば、現在の設定でいうと`http://something.tojox1.kt.home.ne.jp`を`http://something`だけでアクセスできるようにする機能です。この機能が必須でdomainもsearchも同じなら、**domain** だけ残すようにします。複数ドメインが必要な場合は **search** のみにします。
70
+
71
+
72
+
73
+ **/etc/resolv.conf**
74
+
75
+ ```
76
+
77
+ #domain tojox1.kt.home.ne.jp
78
+
79
+ #search tojox1.kt.home.ne.jp tojox2.kt.home.ne.jp #←複数ドメインの場合
80
+
81
+ nameserver ルーターのIPアドレス
82
+
83
+ ```
84
+
85
+
86
+
87
+ そして下記コマンドでネットワークを再起動してからDNSのレスポンスを確認してみます。
88
+
89
+
90
+
91
+ ```bash
92
+
93
+ sudo service network restart
94
+
95
+ #OR
96
+
97
+ #sudo /etc/init.d/network restart
98
+
99
+
100
+
101
+ #名前解決の応答を確認
102
+
103
+ dig www.google.co.jp
10
104
 
11
105
  curl -L https://www.google.co.jp
12
106
 
@@ -14,34 +108,38 @@
14
108
 
15
109
 
16
110
 
111
+
112
+
17
- `/etc/resolv.conf`で複数のDNS設定をしていて、最初のほうに書いてあるDNS応答が長かったり、失敗していると結果的にDNSのレスポンスは帰ってきますが、非常に長く感じられます。
113
+ #### パブリックDNS
18
114
 
19
115
 
20
116
 
21
- **Googleのスクレピングはポリシー違反なで公スクレイピングするよう質問はやめたほういいと思います。**
117
+ たまにプロバDNS応答速度が非常不安定場合あります。その場合はパブリックDNSに変更してみます。
22
118
 
23
119
 
24
120
 
25
- Googleの検索機能を使いたければ、ちゃんとAPIがあるのでそちらを使うようにしてください。(無料では制限があり、有料版は今年3月で終了予定らしいです。)
121
+ - [GoogleパブリックDNS](https://developers.google.com/speed/public-dns/docs/using)
26
122
 
27
- [https://webtan.impress.co.jp/e/2017/03/28/25352](https://webtan.impress.co.jp/e/2017/03/28/25352)
123
+ - [ベリサインパブリックDNS](https://www.verisign.com/ja_JP/security-services/public-dns/index.xhtml)
28
124
 
29
125
 
30
126
 
31
- `stackoverflow`の記事では、TCPコネクションの`keep-alive`の間中待たされるので遅いとありましたが、私の環境では特に遅くはありません。記事によると下記のようにすれば解決できたとあります。
32
127
 
128
+
33
- [https://stackoverflow.com/questions/3629504/php-file-get-contents-very-slow-when-using-full-url](https://stackoverflow.com/questions/3629504/php-file-get-contents-very-slow-when-using-full-url)
129
+ #### ネットワーク設定
34
130
 
35
131
 
36
132
 
37
- ```php
38
-
39
- $context = stream_context_create(['http' => ['header' => 'Connection: close\r\n']]);
40
-
41
- $content = file_get_contents('http://www.something.co.jp/', false, $context);
133
+ ネットワークアダプタやルーターに問題がある場合は下記を参考にしてみてください。基本的にネットワークアダプタに問題がある場合はルーターや同じネットワーク上のWindowsマシンからのレスポンスも遅いはずです。
42
-
43
- ```
44
134
 
45
135
 
46
136
 
137
+ - CentOSで使ってないネットワークアダプタを無効にする
138
+
139
+ - CentOSのネットワークアダプタを固定IPに変更する(DHCPの場合)
140
+
141
+ - CentOSやルーターのプライベートネットワーク向けのIPv6サポートを無効にしてみる
142
+
47
- なお、日本`http://google.com`とすると必ず`http://www.google.co.jp`リダイレクトされます。
143
+ - CentOSSELinuxやiptablesが有効なっている場合はOFFにしてみる
144
+
145
+ - ルーターの設定を確認してみる(ルーティング設定やパケットフィルタなど)