ServerName ve ServerAlias ​​nasıl çalışır?


62

Daha fazla açıklamaya ihtiyacım olan sanal bir ana bilgisayar yapılandırmasının aşağıdaki kısmı:

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

Bu ve şu anda sahip olduğumdakine benzer bir config örneği (şu anda bir etki alanı adım yok).

<VirtualHost *:80>- Bu sunucuya ulaşılabilen IP-80 bağlantı noktalarında yapılan tüm HTTP istekleri için aşağıdaki ayarlara izin verin. Örneğin, sunucuya birden fazla IP üzerinden erişilebiliyorsa, bu yönergeyi her ikisinden de yalnızca biriyle sınırlayabilirsiniz.

ServerName- HTTP isteğinin ana kısmı bu adla eşleşiyorsa, isteğe izin verin. Normalde bu, bir IP ile eşleşen bir etki alanı adı olur, ancak bu durumda HTTP istek ana bilgisayarı bu IP ile eşleşmelidir.

ServerAlias - Sunucu tarafından kabul edilen alternatif isimler.

Benim için kafa karıştıran kısım, yukarıdaki senaryoda, ServerAlias mytestname.combir HTTP isteği belirler ve sonra yaparsam mytestname.com, bunun çalışması için sunucunun IP'sine işaret eden bir DNS kaydı olması gerekir mi? Bu durumda, ServerAlias ​​sadece temel olarak EKSTRA ServerName girişleri midir?

Bunun DNS girişi böyle olduğunu varsayalım foobar.com = 141.29.495.999ama sonra vardı ServerName = 141.29.495.999ve ServerAliasiçinde foobar.com kabul etmek atıf yoktur çünkü boştu, yani foobar.com rağmen doğru IP şekilde çözüme kavuşturulacağını anlamına geleceğini ServerNameya ServerAlias?

Ya da başka birşey. Kafam karıştı.


1
Son paragrafta bazı kelimeleri unuttun. :-)
ThatGraemeGuy 14

Yanıtlar:


105

Bunun gibi düşünün:

DNS telefon rehberi / sarı sayfalardır. Birisi telefonunuzu aramak istediğinde, adınızı arayabilir ve telefon numaranızı alabilir ve bu telefonu arayabilir. DNS de aynısını yapar, ancak bilgisayarlar için - birileri gitmek istediğinde www.example.comIP adresi için DNS ister ve bu IP adresine sahip olan bilgisayarla iletişim kurabilir. Yani ne gidermek demektir. Bir IP adresini çözümlemek için Apache ile hiçbir ilgisi yoktur; bu kesinlikle bir DNS sorudur.

ServerNameVe ServerAliasdaha bir şirketin dahili telefon listesinde gibidir. Web sunucunuz santraldir; sunucuya gelen tüm bağlantıları kabul eder. Daha sonra müşteri / arayan onlara hangi ismi aradıklarını söyleyecek ve bu adı nasıl kullanacaklarına dair Apache konfigürasyonuna bakacak.

Ad apache yapılandırmasında bir ServerName / ServerAlias ​​olarak listelenmemişse, apache her zaman listelenen ilk VirtualHost'u verecektir. Veya, hiçbir VirtualHost yoksa, istekte hangi ana bilgisayar adının verildiğine bakılmaksızın aynı içeriği verir.

ETA: Normal bir bağlantı için adım adım

  1. Daktilo http://www.example.comtarayıcınıza.
  2. Bilgisayarınız DNS çözümleyicisine, konuşmak istediğinde hangi IP adresine kullanması gerektiğini sorar www.example.com.
  3. Bilgisayarınız bu IP adresine bağlanır ve konuşmak istediğini söyler www.example.com(bu Host:, HTTP’nin başlığı).
  4. Web sunucusu, içerik isteğiyle ne yapılacağını bulmak için yapılandırmasına bakar www.example.com. Aşağıdakilerden herhangi biri olabilir:
    • www.example.coma olarak ServerNameveya a ServerAliasiçin listelenir VirtualHost- öyleyse, içeriği sunmak için o VirtualHost yapılandırmasını kullanır.
    • Sunucunun hiç VirtualHosts'u yok - öyleyse, içeriği sunmak için httpd.conf dosyasındaki yapılandırmayı kullanır.
    • Sunucunun VirtualHosts'u var ancak www.example.comhiçbirinde listelenmiyor - öyleyse, listedeki ilk Virtualhost içeriği sunmak için kullanılacak.

Bu nedenle, eğer bir HTTP isteğinin ana bilgisayar kısmı ise www.example.com, DNS bu isim için IP adresini çözer ve HTTP isteği ana bilgisayar kısmı aslında bir IP olacaktır; sunucuyu ulaştıktan sonra, apache de istek istedi bilecek www.example.comve bir varsa ServerNameveya ServerAliasbu etki alanı adı için yönergesini, bu belge kökü hizmet edebilir?
njp

Hayır - HTTP istek kısmı hala ana bilgisayar adıdır. Biraz daha açıklığa kavuştururum.
Jenny D

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.. Bunu test ettim. Doğru ama ilk Virtualhost olduğundan emin değilim. Bilgi için teşekkür ederim. +1
SMMousavi

19

SunucuAdı tanımlamazsanız, apache2 bunu / etc / hosts dosyasından tahmin etmeye çalışacaktır. ServerAlias ​​isteğe bağlıdır. En yaygın kullanım durumu nerede

ServerName example.com
ServerAlias www.example.com

Taleplerin web sunucusu IP'sine erişmelerini sağlamak, örneğin bir etki alanı kaydetmek ve DNS kayıtlarını ayarlamak size bağlıdır (apache2'nin işi değil). Etki alanı ve dns kayıtları olmadan (test ve geliştirme için) bunu yapmanın çok yaygın bir yolu, yerel makine / etc / hosts dosyanızı ayarlamak, böylece example.com sunucunuzun IP'sini gösterir.

192.168.0.12 example.com
192.168.0.12 www.example.com

0

Konuyla ilgili resmi belgeleri okumanızı şiddetle tavsiye ediyorum: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

"En eşleşen IP adresini ve bağlantı noktası kombinasyonunu içeren sanal ana bilgisayar kümesinde eşleşen bir SunucuAdı veya SunucuAlias ​​bulunmazsa, kullanılacak olanla eşleşen ilk listelenen sanal ana bilgisayar" yazıyor . . Bu durumda, "foobar.com" a erişirseniz, IP 141.29.495.999 ile bir şekilde eşleşen ilk VirtualHost girişi httpd tarafından kullanılır.

Aynı belge "Pek çok sunucuya birden fazla adla erişilebilir olmak istiyor. Bu, ServerAlias ​​yönergesiyle mümkündür" diyor. Böylece ServerAlias'ı basitçe ek ServerName girişleri olarak kabul edebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.