Làm thế nào để bạn có một địa chỉ IP và nhiều trang web?


27

Làm thế nào tôi có thể có nó khi tôi có một địa chỉ IP nằm trên Internet nhưng có nhiều tên web? Ví dụ: khi một công ty lưu trữ có IP dùng chung nhưng tôi nhận được tên miền không giới hạn (cùng với mọi người khác trên hộp đó).

Tôi có một hộp trên Internet nhưng tôi muốn trỏ đến một máy khác chứa một trang web khác khi ai đó gõ vào www khác ... (nó nằm ngay bên cạnh nó trong một hộp khác). Có phải đó là tất cả các tên miền phụ? Cảm ơn bạn.

Tôi là công ty lưu trữ

Câu trả lời:


36

Đây là một phần của giao thức HTTP 1.1.

Cụ thể, giao thức HTTP 1.1 bao gồm một tiêu đề gọi là "máy chủ:" chỉ định trang web nào trên một máy chủ cụ thể mà máy khách đang cố truy cập.

Vì vậy, nếu snoopy.net và woodstock.org đều chia sẻ 192.0.32.10 và trình duyệt của bạn đang cố lấy nội dung từ http://snoopy.net/doghouse yêu cầu http cụ thể sẽ như sau:

GET /doghouse HTTP/1.1
Host: snoopy.net

Nếu url mong muốn là http://woodstock.org/seedsyêu cầu sẽ như thế nào

GET /seeds HTTP/1.1
Host: woodstock.org

Trong cả hai trường hợp, sẽ có một ổ cắm tcp giữa máy tính của bạn và cổng 80 của máy chủ. Máy chủ sẽ biết lấy nội dung từ /var/www/snoopy.net hoặc /var/www/woodstock.org/ dựa trên tiêu đề Máy chủ.

Sẽ có các tiêu đề khác cho cookie và các nội dung khác như loại trình duyệt và nội dung được phép, nhưng tiêu đề "Máy chủ" cụ thể là thứ cho phép máy chủ web biết trang web ảo nào mong muốn.

Có nhiều hơn trong RFC2616 .

Đây cũng là lý do tại sao các trang https * phải *** có địa chỉ IP của riêng họ - việc trao đổi khóa ssl và xác minh chứng chỉ diễn ra trước khi giao dịch http, vì vậy máy chủ http sẽ không biết cung cấp chứng chỉ cho "woodstock. org "hoặc" snoopy.net "khi nhận được kết nối https trên cổng 443 của 192.0.32.10.


chỉnh sửa

** trong các nhận xét Grawity chỉ ra rằng có các tiện ích mở rộng cho SSL trong thông số TLS cho phép máy chủ biết người dùng đang truy cập trang web nào và hầu hết các trình duyệt web hiện đại đều có các tiện ích mở rộng này, do đó cũng phải hơi quá mạnh.


Vì vậy, máy chủ web sẽ thấy tiêu đề đó và di chuyển nó đến trang web chính xác? Bạn có thể có nhiều trang web trên cùng một cổng như vậy không?
johnny

1
Đó chính xác là những gì nó dành cho. Một "máy chủ" như apache, có cổng 80 trong 192.0.32.10 có nhiều mục DNS, mỗi mục là một "trang web". Máy chủ biết trang web mong muốn dựa trên tiêu đề "máy chủ".
chris

3
DNS được cấu hình để làm cho cả hai tên trỏ đến cùng một địa chỉ IP, nơi máy chủ đang lắng nghe. Máy chủ nhận các kết nối trên cùng một IP và cổng, nhưng sau đó, khi trình duyệt nói với nó "Tôi muốn SiteA.com", nó biết rằng nó cần đưa ra một nội dung khác so với khi được yêu cầu cho SiteB.com.
Massimo

2
Để rõ ràng hơn nữa: hai trang web được phân biệt ở cấp độ giao thức HTTP, không phải ở cấp độ TCP / IP. Giống như khi ai đó gọi điện đến văn phòng của bạn và yêu cầu nói chuyện với John hoặc Susan: số điện thoại này giống nhau, nhưng nhiều người có thể sử dụng nó.
Massimo

1
Hầu hết các trình duyệt web và máy chủ hiện nay đều hỗ trợ Chỉ định Tên Máy chủ TLS, loại bỏ yêu cầu một địa chỉ IP trên mỗi trang web.
grawity

12

Có một thứ mà tất cả các trình duyệt hiện đại gửi cùng với yêu cầu, được gọi là Tiêu đề "Máy chủ:".

Yêu cầu thực tế mà firefox gửi cho trang này là:

Chủ nhà: superuser.com
Tác nhân người dùng: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Tắc kè / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
Chấp nhận: văn bản / html, ứng dụng / xhtml + xml, ứng dụng / xml; q = 0.9, * / *; q = 0.8
Ngôn ngữ chấp nhận: en-us, en; q = 0,5
Mã hóa chấp nhận: gzip, giảm phát
Bộ ký tự chấp nhận: ISO-8859-1, utf-8; q = 0.7, *; q = 0.7
Giữ sống: 300
Kết nối: giữ mạng

Như bạn thấy,

Chủ nhà: superuser.com
bit xác định trang web trong câu hỏi.

Trong IIS và Apache, bạn có thể định cấu hình Trang web ảo chỉ chấp nhận yêu cầu từ một kết hợp IP / Máy chủ lưu trữ cụ thể.

Đối với vấn đề cụ thể của bạn, bạn sẽ phải đọc về cách công ty lưu trữ cụ thể của bạn muốn bạn yêu cầu cấu hình.


Điều này cũng cần đề cập rằng bạn cần đặt nhiều mục DNS cho địa chỉ IP của mình.
Tadeusz A. Kadłubowski

@Tadeusz: Có thể thiết lập các mục DNS ký tự đại diện, vì vậy điều này không thực sự cần thiết.
John Gietzen

6

Kỹ thuật lưu trữ nhiều tên miền / tên miền phụ trên một địa chỉ IP / máy chủ lưu trữ được gọi là máy chủ ảo . Yêu cầu http get chứa tên miền mà các yêu cầu dành cho phép máy chủ web khớp với yêu cầu với một tên miền ảo cụ thể.

Nếu bạn có nhiều máy chủ vật lý bên trong chỉ với một IP bên ngoài thì bạn sẽ muốn xem xét việc thiết lập proxy ngược để chuyển tiếp các yêu cầu đến đúng địa chỉ IP / máy bên trong.


hoặc bạn có thể các máy chủ http khác trên các cổng khác nhau tất nhiên.
Chopper3

Vâng, đó cũng là một lựa chọn. Nhưng mọi người không quen với việc chỉ định một cổng khi họ nhập url nên tôi sẽ bảo lưu giải pháp đó cho một vài tình huống như giao diện quản trị viên.
3dinfluence

3

Tính năng trên máy chủ web của bạn thường được gọi là 'máy chủ ảo'. Khi bạn trỏ các mục dns để trỏ đến một địa chỉ IP đó (như được đề cập trong các câu trả lời khác), máy chủ sẽ cung cấp các trang web khác nhau tùy thuộc vào máy chủ được yêu cầu.

Theo như chỉ vào một hộp khác đi. Bạn có thể định cấu hình chuyển hướng trong hầu hết các máy chủ web nếu bạn muốn nhận được truy vấn trước. Nếu bạn đang nói về tên miền phụ thì tất cả những gì bạn làm là trỏ từng tên miền phụ đến một địa chỉ IP khác nhau.

tức là host.com -> IP 1 rồi www.host.com -> IP 2 và mail.host.com -> IP 3

Nếu bạn muốn câu trả lời cụ thể hơn, bạn cần nói phần mềm máy chủ web nào trên hệ điều hành bạn đang chạy.

Bạn có thể thấy ServeFault là một nơi tốt hơn cho câu hỏi này.


1

Nói ngắn gọn...

Một - Đặt các mục DNS cho các tên miền khác nhau của bạn để tất cả trỏ đến hộp của bạn.

Hai - Theo mô tả của người khác, hãy thiết lập máy chủ web của bạn (bạn không nói cái nào) khớp với tên máy chủ được yêu cầu.

Bằng cách đó, tất cả các yêu cầu cho tất cả các tên miền của bạn sẽ đến cùng một máy và cấu hình của nó sẽ lấy miền được yêu cầu và chuyển nó đến đúng thư mục chứa nội dung của trang web đó.


0

Tôi nghe có vẻ như từ câu hỏi của bạn giống như bạn có một máy chủ vật lý riêng cho trang web thứ hai. Trong trường hợp đó, bạn sẽ không thể sử dụng một địa chỉ IP duy nhất cho hai máy chủ. Bạn có thể a) lấy địa chỉ IP công cộng thứ hai cho máy chủ thứ hai hoặc b) thiết lập proxy thông minh chuyển tiếp yêu cầu đến các máy chủ khác trên mạng nội bộ của bạn dựa trên tiêu đề máy chủ. Tôi khá chắc chắn rằng b) là có thể nhưng tôi không có ý tưởng thực sự về cách thức hoạt động của nó, vì vậy bạn sẽ phải hỏi người khác nếu đó là những gì bạn đang cố gắng làm.


0

Nếu tôi đang đọc đúng câu hỏi của bạn, bạn có hai máy tính khác nhau chia sẻ địa chỉ IP thông qua NAT (Dịch địa chỉ mạng) không? Nếu vậy, bạn sẽ phải có một trang web nghe trên một cổng khác (không phải 80) - không có cách nào tốt để tôi biết bộ định tuyến gửi yêu cầu đến các máy tính khác nhau dựa trên siêu dữ liệu "Máy chủ" HTTP. Tốt hơn hết là bạn chỉ nên lấy địa chỉ IP thứ hai cho máy chủ thứ hai của mình.

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.