Làm thế nào để đi đến một trang web trên một máy chủ được chia sẻ bởi địa chỉ IP của nó?


18

Tôi có một vài câu hỏi, xin vui lòng giúp đỡ:

Nắm tay, tôi có thể truy cập Google tìm kiếm chỉ bằng cách gõ http://74.125.224.211, bởi vì đây là địa chỉ IP được trả về bởi nslookup.

Tuy nhiên, tôi không thể làm như vậy với các địa chỉ IP được trả về từ www.yahoo.com. Làm cách nào để đến trang tìm kiếm Yahoo bằng IP của nó?

Một ví dụ khác, http://www.allaboutcircuits.comsẽ giải quyết 68.233.243.63bằng máy chủ DNS, nhưng nếu tôi truy cập http://68.233.243.63, tôi nhận được "Xin chào thế giới!".

Thứ hai, vì một số lý do, có vấn đề với trình phân giải DNS với dịch vụ lưu trữ web của tôi (nó sẽ không được sửa !!) . Vì vậy, các lệnh như

get_file_contents("http://www.allaboutcircuits.com");

sẽ trở lại php_network_getaddresses: getaddrinfo failed: Name or service not known

Làm thế nào để tôi khắc phục điều này với địa chỉ IP,

68.233.243.63

Ý tôi là, bằng cách nào đó đính kèm tham số tên máy chủ HTTP vào get_file_contents()?

Tôi muốn giải quyết vấn đề này theo cách riêng của tôi (trong mã của tôi), không có sự cố / điều chỉnh nào sẽ được thực hiện bởi quản trị viên máy chủ.


9
Đọc về các máy chủ ảo và cách một máy chủ duy nhất có thể lưu trữ nhiều trang web.
wallyk

Tôi cho rằng có một số lý do bạn không thể chỉ sử dụng tên miền?
Isaac Rabinovitch

@Isaac Rabinovitch: user1502776 nói rằng "có vấn đề với trình phân giải DNS với dịch vụ lưu trữ web của tôi (nó sẽ không được sửa !!)" và "Tôi muốn giải quyết vấn đề này theo cách riêng của tôi (trong mã của tôi), không khắc phục sự cố / điều chỉnh sẽ được thực hiện bởi quản trị viên máy chủ. "
Bavi_H

3
Nếu quản trị viên máy chủ của bạn là ngu ngốc, bạn cần phải đi tìm một nhà cung cấp lưu trữ web khác.
Michael Hampton

Câu trả lời:



10

Như wallyk đã nói, đó là máy chủ ảo

Lấy ví dụ này cho apache

<VirtualHost *:80>
ServerName example2.com
DocumentRoot C:/www/example2.com
</VirtualHost>

<VirtualHost *:80>
ServerName example.com
DocumentRoot C:/www/example.com
</VirtualHost>

Trong c: \ www \ example.com tạo một tệp chỉ mục có nội dung "Xin chào thế giới! Example.com"

trong c: \ www \ example2.com tạo một tệp chỉ mục có nội dung "Hellow World! example2.com"

Và thay đổi tập tin máy chủ của bạn thành

127.0.0.1 example.com
127.0.0.1 example2.com

Sau đó truy cập http://example.com, sau đó truy cập http://example2.com

Vì vậy, đó là cách bạn có thể có nhiều trang web trên một ip

Vì vậy, về cơ bản câu trả lời là, không bạn sẽ không thể có được trang web đó từ ip.


Tôi nhận được điểm chỉ IP là không đủ. Nhưng có lệnh PHP nào sử dụng IP và tên máy chủ mà tôi cung cấp để tìm nạp các trang web từ xa không? Lệnh không nên truy vấn DNS.
user1502776

4
Mặc dù điều này có thể chính xác về mặt kỹ thuật, nó không giải quyết được câu hỏi. Câu hỏi đặt ra là làm thế nào để yêu cầu một trang web cụ thể có tên máy chủ đã biết từ máy chủ có IP đã biết, mà không tự động giải quyết địa chỉ IP thông qua DNS, sử dụng tập lệnh PHP. Nó không hỏi làm thế nào để tìm một tên máy chủ tương ứng với một IP nhất định. Nhận xét của wallyk có liên quan hơn, bởi vì liên kết của anh ấy bao gồm thông tin về Hosttiêu đề cần thiết cho một máy chủ để phân biệt giữa các trang web mà nó lưu trữ và phục vụ chính xác.
Bob

5

Bạn nói rằng bạn muốn chỉ định thủ công cả tên máy chủ và địa chỉ IP, thay vì dựa vào máy chủ DNS ngoài tầm kiểm soát của bạn. Nhìn vào các bình luận tại tài liệu file_get_contents , tôi thấy các bình luận viên đã giải quyết các vấn đề tương tự bằng cách tạo một bối cảnh có chứa tiêu đề Host: cần thiết. Một cái gì đó như thế này:

$context = stream_context_create(array('http' => array('header' => 'Host: www.allaboutcircuits.com')));
$data = file_get_contents('http://68.233.243.63/', 0, $context);

Tất nhiên, lưu ý rằng nhược điểm của việc chỉ định thủ công cả tên máy chủ và địa chỉ IP là nếu địa chỉ IP thay đổi trong tương lai (ví dụ: nếu trang web chuyển sang nhà cung cấp dịch vụ lưu trữ mới), mã của bạn có thể ngừng hoạt động cho đến khi bạn tự cập nhật địa chỉ IP.


2

Chỉ riêng địa chỉ IP là không đủ để xác định duy nhất trang web bạn muốn truy cập khi nhiều máy chủ ảo đang chạy trên cùng một cổng / máy chủ. Trong trường hợp đó, bạn cần chỉ định tiêu đề Máy chủ trong yêu cầu HTTP xác định tên máy chủ. Bạn có thể làm điều này trực tiếp qua telnet đến cổng 80:

$ telnet 68.233.243.63 80
Trying 68.233.243.63...
Connected to 68.233.243.63.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.allaboutcircuits.com

nơi bạn nhập lệnh telnet và các dòng GET và Host, sau đó lấy mã nguồn HTML được trả về từ máy chủ.

Hoặc bạn có thể sử dụng curl nơi bạn đặc biệt thêm tiêu đề (với -Hcờ).

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"

1

Thứ hai, vì một số lý do, có vấn đề với trình phân giải DNS với dịch vụ lưu trữ web của tôi (nó sẽ không được sửa !!)

Bạn có thể sử dụng một máy chủ DNS khác ở phía máy khách, trong trường hợp đó không phải là máy chủ lưu trữ web 8.8.8.8 và 8.8.8.6 được điều hành bởi Google và 4.4.4.2 là chế độ chờ phổ biến. Namebench sẽ cho phép bạn tìm thấy nhanh nhất. Ngoài ra, bạn có thể sử dụng một dịch vụ ủy quyền nào đó (tôi tự chạy trên VPS hoặc sử dụng Tor, nhưng có các tùy chọn khác).

Vì đây là PHP, nên một tùy chọn thậm chí còn dễ dàng hơn là chạy mã trên hệ thống khác. Không thể duy trì.


Nghe có vẻ như anh ta đang ở trên một số máy chủ được chia sẻ và không thể sửa đổi DNS, đó là lý do tại sao anh ta có cảnh báo "Tôi muốn giải quyết vấn đề này theo cách riêng của tôi (trong mã của tôi), sẽ không có sự cố / điều chỉnh nào được thực hiện bởi quản trị viên máy chủ. " Tôi không nghĩ anh ta có thể sửa đổi DNS. . .
ernie

1
Anh ta có thể sử dụng một máy chủ dns thay thế ở phía máy khách để kiểm tra. Nếu máy chủ web của anh ta không thiết lập vhost đúng cách, anh ta cần một máy chủ web khác.
Journeyman Geek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.