ServerName và ServerAlias ​​hoạt động như thế nào?


62

Đây là phần sau của cấu hình máy chủ ảo mà tôi cần làm rõ thêm về:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin example@example.com
  ServerName  141.29.495.999
  ServerAlias example.com
...

Đây là và ví dụ cấu hình, tương tự như những gì tôi hiện có (hiện tại tôi không có tên miền).

<VirtualHost *:80>- Cho phép các cài đặt sau cho tất cả các yêu cầu HTTP được thực hiện trên cổng 80 đến IP mà máy chủ này có thể được liên hệ. Ví dụ: nếu máy chủ có thể được truy cập trên nhiều IP, bạn có thể hạn chế chỉ thị này chỉ một thay vì cả hai.

ServerName- Nếu phần máy chủ của yêu cầu HTTP khớp với tên này, thì cho phép yêu cầu. Thông thường đây sẽ là một tên miền ánh xạ tới IP, nhưng trong trường hợp này, máy chủ yêu cầu HTTP phải khớp với IP này.

ServerAlias - Tên thay thế được chấp nhận bởi máy chủ.

Phần khó hiểu đối với tôi là, trong kịch bản trên, nếu tôi đặt ServerAlias mytestname.comvà sau đó thực hiện một yêu cầu HTTP mytestname.com, thì có phải có một bản ghi DNS trỏ đến IP của máy chủ để hoạt động không? Trong trường hợp nào, ServerAlias ​​về cơ bản chỉ là các mục EXTRA ServerName?

Giả sử tôi có một mục nhập DNS như vậy foobar.com = 141.29.495.999nhưng sau đó tôi đã có ServerName = 141.29.495.999ServerAliastrống, điều đó có nghĩa là mặc dù foobar.com được giải quyết đúng IP, bởi vì không có tham chiếu nào để chấp nhận foobar.com trong ServerNamehay ServerAlias?

Hoặc một cái gì đó. Tôi đang bối rối.


1
Bạn đã quên một số từ trong đoạn 2 đến cuối. :-)
ThatGraemeGuy

Câu trả lời:


105

Hãy nghĩ về nó như thế này:

DNS là thư mục điện thoại / trang vàng. Khi ai đó muốn gọi điện thoại của bạn, họ có thể tra cứu tên của bạn và lấy số điện thoại của bạn và gọi điện thoại đó. DNS cũng làm như vậy nhưng đối với máy tính - khi ai đó muốn đến, www.example.comhọ hỏi DNS cho địa chỉ IP và sau đó họ có thể liên hệ với máy tính có địa chỉ IP đó. Đó là những gì giải quyết có nghĩa. Giải quyết một địa chỉ IP hoàn toàn không liên quan gì đến Apache; Đây đúng là một câu hỏi DNS.

Các ServerNameServerAliaslà giống như danh sách điện thoại nội bộ của công ty. Máy chủ web của bạn là tổng đài; nó sẽ chấp nhận tất cả các kết nối đến máy chủ. Sau đó, máy khách / người gọi sẽ cho họ biết họ đang tìm tên gì và nó sẽ tìm trong cấu hình Apache để biết cách xử lý tên đó.

Nếu tên không được liệt kê là ServerName / ServerAlias ​​trong cấu hình apache, apache sẽ luôn cung cấp cho họ Virtualhost đầu tiên được liệt kê. Hoặc, nếu hoàn toàn không có Virtualhost, nó sẽ cung cấp cùng một nội dung cho dù tên máy chủ được đưa ra trong yêu cầu.

ETA: Vì vậy, từng bước cho một kết nối bình thường:

  1. Bạn gõ http://www.example.comvào trình duyệt của bạn.
  2. Máy tính của bạn yêu cầu trình phân giải DNS của nó nên sử dụng địa chỉ IP nào khi muốn nói chuyện www.example.com.
  3. Máy tính của bạn kết nối với địa chỉ IP đó và nói rằng nó muốn nói chuyện www.example.com(đó là Host:tiêu đề trong HTTP).
  4. Máy chủ web xem xét cấu hình của nó để tìm hiểu phải làm gì với yêu cầu nội dung từ đó www.example.com. Bất kỳ một trong những điều sau đây có thể xảy ra:
    • www.example.comđược liệt kê dưới dạng ServerNamehoặc ServerAliascho một VirtualHost- nếu vậy, nó sẽ sử dụng cấu hình cho Virtualhost đó để phân phối nội dung.
    • Máy chủ hoàn toàn không có Virtualhost nào - nếu vậy, nó sẽ sử dụng cấu hình trong httpd.conf của nó để phân phối nội dung.
    • Máy chủ có Virtualhost nhưng www.example.comkhông được liệt kê trong bất kỳ ứng dụng nào - nếu vậy, Virtualhost đầu tiên trong danh sách sẽ được sử dụng để phân phối nội dung.

Vì vậy, nếu phần lưu trữ của yêu cầu HTTP là www.example.com, DNS sẽ phân giải địa chỉ IP cho tên đó và phần lưu trữ yêu cầu HTTP thực sự sẽ là một IP; Khi đến máy chủ, apache cũng sẽ biết rằng yêu cầu được yêu cầu www.example.comvà nếu có ServerNamehoặc ServerAliaschỉ thị cho tên miền đó, nó có thể phục vụ root tài liệu không?
njp

Không - phần yêu cầu HTTP vẫn là tên máy chủ. Tôi sẽ làm rõ hơn một chút.
Jenny D nói Phục hồi Monica

The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.. Tôi đã thử nghiệm điều này. Điều đó đúng nhưng tôi không chắc đây là Virtualhost đầu tiên. Cảm ơn bạn đã thông tin. +1
SMMousavi

19

Nếu bạn không xác định Tên máy chủ, thì apache2 sẽ cố gắng đoán nó từ / etc / hosts. ServerAlias ​​là tùy chọn. Trường hợp sử dụng thông thường nhất là ở đâu

ServerName example.com
ServerAlias www.example.com

Tùy thuộc vào bạn (không phải công việc của apache2) để đảm bảo rằng các yêu cầu đến IP máy chủ web, ví dụ: đăng ký tên miền và thiết lập bản ghi DNS. Một cách rất phổ biến để làm như vậy (để kiểm tra & phát triển) mà không có bản ghi tên miền và dns là đặt tệp máy / etc / hosts cục bộ của bạn để example.com trỏ đến IP của máy chủ của bạn.

192.168.0.12 example.com
192.168.0.12 www.example.com

0

Tôi thực sự khuyên bạn nên đọc tài liệu chính thức về chủ đề này: https://httpd.apache.org/docs/2.4/vhosts/name-basing.html

nó nói "Nếu không tìm thấy ServerName hoặc ServerAlias ​​phù hợp trong tập hợp các máy chủ ảo chứa kết hợp địa chỉ IP và cổng kết hợp cụ thể nhất, thì máy chủ ảo được liệt kê đầu tiên phù hợp sẽ được sử dụng." . Vì vậy, trong trường hợp của bạn nếu bạn truy cập "foobar.com", mục nhập Virtualhost đầu tiên bằng cách nào đó khớp với IP 141,29.495.999 sẽ được httpd sử dụng

Tài liệu tương tự nói rằng "Nhiều máy chủ muốn có thể truy cập được bằng nhiều tên. Điều này có thể thực hiện được với lệnh ServerAlias". Vì vậy, bạn có thể coi ServerAlias ​​đơn giản là các mục ServerName bổ sung.

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.