Máy chủ chỉ là một máy có phần mềm máy chủ web (như nginx, apache, v.v.).
Không cần thiết. Máy chủ là một hệ thống máy tính được sử dụng để phục vụ các hệ thống khác (máy khách) với nội dung, dữ liệu mà nó xử lý (hoặc đơn giản là lấy từ các nguồn khác) và trả về máy khách.
Nó có thể là một máy chủ Web, nếu nó phục vụ nội dung thông qua giao thức HTTP, hoặc một máy chủ cơ sở dữ liệu, nếu nó lưu trữ dữ liệu và cho phép thao tác dữ liệu theo cách quan hệ (SQL) hoặc không quan hệ, hoặc một máy chủ DNS, nếu nó phục vụ thông tin về tên máy chủ và địa chỉ IP thông qua giao thức DNS, v.v.
Khi chúng tôi lưu trữ một trang web trong các dịch vụ lưu trữ như GoDaddy hoặc dịch vụ đám mây, họ có cung cấp phần mềm máy chủ web cho mọi ứng dụng được triển khai hay sẽ chỉ có một phần mềm máy chủ web cho một máy (máy chủ) và mọi ứng dụng sử dụng nó hoặc chúng tôi (máy khách) ) cần thiết lập phần mềm máy chủ web?
Nó phụ thuộc. Một số cung cấp các máy ảo (hoặc tương tự) với các máy chủ Web được cài đặt sẵn như Apache và bạn "chỉ" phải định cấu hình chúng đúng cách cho ứng dụng của mình. Những người khác (AWS EC2) chỉ cung cấp các máy ảo đơn giản và bạn phải cài đặt cũng như định cấu hình bất kỳ dịch vụ hoặc gói nào (bao gồm cả máy chủ Web) mà bạn có thể cần.
Máy chủ có thể có `n' số lượng phần mềm máy chủ web không?
Đúng. Cùng một máy chủ có thể lưu trữ các công cụ máy chủ Web khác nhau (ví dụ: Apache và Nginx, cho các ứng dụng khác nhau) hoặc thậm chí các phiên bản khác nhau của cùng một công nghệ máy chủ Web (ví dụ: thông qua các bộ chứa) hoặc một công cụ máy chủ Web duy nhất xử lý nhiều ứng dụng (có thể sử dụng máy chủ ảo).
Trong bản ghi DNS, bản ghi của mỗi miền ứng dụng có trỏ đến địa chỉ IP của máy chủ hoặc địa chỉ IP của máy chủ web không?
Nó sẽ trỏ tới bất kỳ địa chỉ IP nào có thể định tuyến và có thể truy cập được từ bên ngoài và bằng cách nào đó được "gắn" với máy chủ Web. Một thiết lập đơn giản có thể là một máy ảo có một địa chỉ IP duy nhất và máy chủ web đang lắng nghe địa chỉ IP đó. Tuy nhiên, máy chủ web cũng có thể lắng nghe nội bộ trên một địa chỉ khác, chẳng hạn như 127.0.0.1 và sử dụng một số kỹ thuật (như NAT) để nhận các yêu cầu HTTP với địa chỉ VM IP làm địa chỉ đích. Và như thế.
Nếu tất cả các miền ứng dụng trong một máy chủ trỏ đến cùng một địa chỉ IP, thì các yêu cầu được định tuyến đến ứng dụng cụ thể như thế nào?
Điều này có thể được thực hiện theo một số cách. Đầu tiên, bạn có thể có các quy trình khác nhau đang nghe trên cùng một địa chỉ IP nhưng trên các cổng khác nhau. Miễn là cổng khác nhau, không có xung đột - http://www.example.com:80 sẽ đến một máy chủ web (hoặc phiên bản máy chủ web) khác với http://www.example.com:8080. Bằng cách sử dụng các cổng khác nhau và buộc mỗi cổng vào một quy trình hoặc "thực thể" quy trình (ví dụ: máy chủ ảo), mỗi yêu cầu được chuyển tiếp đến đúng ứng dụng.
CHỈNH SỬA
Cố gắng trả lời các câu hỏi bổ sung trong các ý kiến.
nếu nhiều ứng dụng được triển khai trên máy chủ dùng chung thay vì máy ảo thì sao? Vì mọi người đều muốn cổng là 443 (mặc định) nếu ứng dụng sử dụng HTTPS, các yêu cầu được định tuyến như thế nào? và địa chỉ IP của bản ghi DNS của miền sẽ trỏ đến là gì?
Nếu nhiều ứng dụng lắng nghe trên cùng một cổng và cùng một IP, các loại thao tác lưu lượng khác có thể được thực hiện. Ví dụ: giả sử cùng một IP được liên kết với ba ứng dụng:
app1.example.com - cổng 443
app2.example.com - cổng 443
app3.example.com - cổng 443
Làm thế nào một yêu cầu HTTP đến cùng một địa chỉ IP và cổng được chuyển hướng đến đúng ứng dụng? Một cách là sử dụng Tiêu đề máy chủ. Nếu một trình duyệt muốn liên hệ với app1.example.com, nó sẽ gửi một yêu cầu HTTP tới cùng một IP và cổng đó với tiêu đề Máy chủ lưu trữ được đặt thành "app1.example.com".Một proxy ngược sẽ nhận yêu cầu đó, đọc giá trị của tiêu đề Máy chủ và chuyển hướng yêu cầu đó tới quy trình được liên kết với "app1.example.com", ngay cả khi quy trình đó lắng nghe trên cùng một IP và cổng như các máy chủ web khác.
Một cách tiếp cận khác dựa trên việc sử dụng máy (VM, baremetal - không thành vấn đề) với nhiều địa chỉ IP. Nếu cùng một máy có nhiều địa chỉ IP, nó có thể lưu trữ các ứng dụng khác nhau trên cùng một cổng nhưng khác địa chỉ mà không cần sử dụng bất kỳ thủ thuật tiêu đề HTTP nào.