i5-13600KF @ 6.0GHz || Domoticz on Pi3+Pi4 || PV: 14940 Wp || WP: 12kW LG
Ik neem aan dat een cname het makkelijk maakt om een hele set virtual hosts in een keer te verhuizen wanner het nodig is, anders weet ik het ook even niet
CNAME records are specified in RFC 1034. CNAMEs are handled specially in the domain name system, and have several restrictions on their use. When a DNS resolver encounters a CNAME record while looking for a regular resource record, it will restart the query using the canonical name instead of the original name. When the resolver is told to look for CNAME records, the CNAME is returned, rather than restarting the query. The canonical name that a CNAME points to can be anywhere in the DNS, whether local or on a remote server in a different DNS zone.
For example, if there is a DNS zone as follows:
foo.example.com. CNAME bar.example.com.
bar.example.com. A 192.0.2.23
When an A record lookup for foo.example.com is done, the resolver will see a CNAME record and restart the checking at bar.example.com and will then return 192.0.2.23.
This post is warranted for the full amount you paid me for it.
Move naar Netwerken
Wat Apache vervolgens doet is kijken naar de FQDN (vhost1.example.tld) en aan de hand van je instellingen zoek ie er een site bij. Dus dan gaat ie naar de DocumentRoot van de ServerName/ServerAlias die je bij je Virtual Hosts heb ingesteld
Dus ja, als je Virtual Hosts wel gebruiken zul je inderdaad CNAME's moeten aanmaken, maar als je niet van plan bent meerdere IP adressen (voor bijv. meerdere serverts) aan je Parent Domain te koppelen kan je net zo goed een wildcard gebruiken en dan heb je meteen alle subdomeinen die je als Virtual Host kan gebruiken.
Leg dan eens uit waarom ?Accesteam schreef op dinsdag 24 augustus 2010 @ 22:02:
Waarschijnlijk staat je DNS al zo ingesteld dat je een A-Record voor je Parent Domain hebt. En dan een wildcard CNAME voor alle local hostnames/subdomains die referren naar je Parent Domain. Hierdoor wordt dus zowel www.example.tld als vhost1.example.tld verwezen naar hetzelfde IP adres.
Wat Apache vervolgens doet is kijken naar de FQDN (vhost1.example.tld) en aan de hand van je instellingen zoek ie er een site bij. Dus dan gaat ie naar de DocumentRoot van de ServerName/ServerAlias die je bij je Virtual Hosts heb ingesteld
Dus ja, als je Virtual Hosts wel gebruiken zul je inderdaad CNAME's moeten aanmaken, maar als je niet van plan bent meerdere IP adressen (voor bijv. meerdere serverts) aan je Parent Domain te koppelen kan je net zo goed een wildcard gebruiken en dan heb je meteen alle subdomeinen die je als Virtual Host kan gebruiken.
Ik heb meerdere virtual host draaien zonder cname.
Wildcard ? als ik iets randoms invul valt hij niet terug op het default domein hoor maar dan krijg je
Lijkt me dat die dan gewoon niet gevonden wordt•Internet connectivity has been lost.
•The website is temporarily unavailable.
•The Domain Name Server (DNS) is not reachable.
•The Domain Name Server (DNS) does not have a listing for the website's domain.
•There might be a typing error in the address.
•If this is an HTTPS (secure) address, click Tools, click Internet Options, click Advanced, and check to be sure the SSL and TLS protocols are enabled under the security section
Ik snap dat het vanuit het oogpunt van een migratie van een cname 10x handiger is.
1
2
3
4
5
6
7
| <VirtualHost *:80> ServerName example.com DocumentRoot /var/www </VirtualHost> |
Zoiets.. Waarschijnlijk zullen dan al die random subdomeinen uitkomen in /var/www. Maar verder staan de VirtualHosts en de DNS apart van elkaar. Het is onmogelijk dat Virtual Hosts ineens wel naar een IP adres linken als ze ingesteld zijn, en anders niet.
Doe maar is ping randomsubdomein.jouwdomein.nl in command-prompt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| # --------------------------- fishtest.domein ---------------
<Directory "D:/WebDomains/fishtest.domein">
Order Deny,Allow
Allow from all
</Directory>
<VirtualHost *:80>
ServerAdmin webmaster@fishtest.domein
DocumentRoot "D:/WebDomains/fishtest.domein"
ServerName fishtest.domein
ServerAlias fishtest.domein
ErrorLog "logs/fishtest.domein-error.log"
CustomLog "logs/fishtest.domein-access.log" common
DirectoryIndex index.php
</VirtualHost>
# ---------------------------- fishmail.domein --------------------
<Directory "D:/WebDomains/fishmail.domein">
Order Deny,Allow
Allow from all
</Directory>
<VirtualHost *:80>
ServerAdmin webmaster@fishmail.domein
DocumentRoot "D:/WebDomains/fishmail.domein"
ServerName fishmail.domein
ServerAlias fishmail.domein
ErrorLog "logs/fishmail.domein-error.log"
CustomLog "logs/fishmail.domein-access.log" common
</VirtualHost> |
het werkt wel zoals bedoelt
ping
C:\Documents and Settings\dell>ping blaataap.domein
Ping request could not find host blaataap.domein. Please check the name and
try again.
dit stuk was toch gewoon de adapters waarop die mag luisteren ?C:\Documents and Settings\dell>ping fishtest.domein
Pinging fishtest.domein [85.*] with 32 bytes of data:
Reply from 85.*: bytes=32 time<1ms TTL=64
Reply from 85.*: bytes=32 time=3ms TTL=64
Reply from 85.*: bytes=32 time<1ms TTL=64
Reply from 85.*: bytes=32 time=2ms TTL=64
Ping statistics for 85.*:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 3ms, Average = 1ms
C:\Documents and Settings\dell>
Btw, dit wordt wel bijna een topic hijack zo.... we streven naar hetzelde doel toch ?<VirtualHost *:80>
[ Voor 4% gewijzigd door Fish op 24-08-2010 22:31 ]
er moet een wildcard op je dns... anders resolvt ie nietfish schreef op dinsdag 24 augustus 2010 @ 22:27:
mm doe ik iets fouts met de wildcard ?
het werkt wel zoals bedoelt
dit stuk was toch gewoon de adapters waarop die mag luisteren ?
[...]
Btw, dit wordt wel bijna een topic hijack zo.... we streven naar hetzelde doel toch ?
nu zorg je er alleen voor dat apache op alle interfaces op poort 80 luistert
[ Voor 62% gewijzigd door Rmg op 24-08-2010 22:51 ]
Maar is .domein een placeholder voor je parent domein (bijv. example.com), of is .domein je top-level domein (zoals .com en .net) voor in een lokale omgeving? En pas je je .host-file aan of heb je echt een dns-servertje draaien?
Ik probeer overigens alleen maar je vraag zo goed mogelijk te beantwoorden
Een * A IN xxx.xxx.xxx.xxx record?fish schreef op dinsdag 24 augustus 2010 @ 22:51:
als ik een a record heb waarom heb ik dan een wildcard nodig ?
Het werkt compleet zoals bedoelt
Er wordt gesteld dat het niet zou werken zonder cname, terwijl het bij mij gewoon werkt zonder cname
1
2
3
4
5
6
7
8
9
10
11
12
| $ORIGIN domein-a.
@ IN SOA ns1.nederhost.nl. hostmaster.nederhost.nl.
(2010081502 14400 3600 604800 600)
lala IN A 83.*
localhost IN A 127.0.0.1
@ IN A 85.*
@ IN MX 40 fishmail.domain-b. ; mail
sabnzb IN A 85.*
secure IN A 85.*
webmail IN A 85.*
www IN A 85.* |
wanneer iets anders (onzin) e.g. "ping blaat.domein-a "ping/probeer te resolven zal vind hij deze ook niet vinden. wat ook de bedoeling is
Wat bij mij er op duid dat dat de wildcard niet actief is en dus ook geen verplicht alternatief voor een ontbrekende c-name
[ Voor 13% gewijzigd door Fish op 24-08-2010 23:15 ]
1
2
| $ORIGIN example.com * IN CNAME @ |
Dit voorbeeld zou dus (theoretisch
Maargoed, komt er dus op neer dat zodra je een Virtual Host aanmaakt op een subdomein hij wel ping-able en reachable wordt?...
[ Voor 17% gewijzigd door Accesteam op 24-08-2010 23:24 ]
Ik wil ook helemaal geen wildcard, laten we dat even voorop stellen
Ik heb een dns draaien ja (via nederhost). domein staat idd voor mijn parent domein, geen tld , sorry.Accesteam schreef op dinsdag 24 augustus 2010 @ 22:55:
Als je bij die *:80 een ip-adres zou invullen fixed ie dacht ik op dat IP adres. Maar met je Vhost configuratie is in ieder geval niets mis hoor
Maar is .domein een placeholder voor je parent domein (bijv. example.com), of is .domein je top-level domein (zoals .com en .net) voor in een lokale omgeving? En pas je je .host-file aan of heb je echt een dns-servertje draaien?
Ik probeer overigens alleen maar je vraag zo goed mogelijk te beantwoordenMocht je het hierbij willen laten vind ik het ook prima hoor
we zitten in ieder geval op een lijn wbt de vhost
[ Voor 3% gewijzigd door Fish op 24-08-2010 23:29 ]
DNS zet namen om in adressen.
A record zet een naam om in een IP adres
C-name record zet een naam om in een andere naam (en vervolgens dus weer in een IP adres)
Een domein kan ook een adres hebben. Daarom kun je gewoon naar tweakers.net gaan en hoef je niet www.tweakers.net in te typen. Volgens mij ondersteunen alle DNS servers dit.
De meeste DNS servers (maar zeker niet alle) ondersteunen een wildcard record (een *.domein.tld) record.
Dat is een gewoon A record dat naar een IP adres wijst.
Als men een A record opvraagt dat niet bestaat zou normaal gesproken de DNS server dit gewoon moeten melden. Met zo'n wildcard record zal de DNS server echter gewoon antwoorden dat dikkeluldriebier@domein.nl gewoon bestaat, ook al is dat niet.
Ik ben er vrij zeker van dat niemand bij tweakers ooit dikkeluldriebier.tweakers.net heeft gedefinieerd.
Toch kan ik hem pingen.
Pinging dikkeluldriebier.tweakers.net [213.239.154.35] with 32 bytes of data:
Reply from 213.239.154.35: bytes=32 time=28ms TTL=59
Tweakers heeft dus een wildcard record aangemaakt.
Microsoft heeft dat niet:
ping dikkeluldriebier.microsoft.com
Ping request could not find host dikkeluldriebier.microsoft.com. Please check the name and try again.
Hoe dan ook, DNS zorgt ervoor dat je bij een IP adres uitkomt (of juist niet als dat adres niet bestaat en er is geen wildcard record)
Daarnaast ondersteunen webservers "host headers" die ervoor zorgen dat je meerdere websites achter in 1 IP adres kunt hosten.
In het get/post request staat in de header de URL die de gebruiker in de browser heeft ingetypt.
De webserver pakt die op en kijkt naar de virtual hosts (in apache) en aan de hand daarvan bepaalt hij welke website hij moet laten zien.
Wat betreft de virtual hosts in apache, het is mogelijk om 1 default in te stellen voor het geval iemand een naam intypt die niet gedefinieerd is, maar je kunt dat ook weglaten en dan krijg je een "page cannot be displayed".
Daarnaast kun je gewoon de correcte virtual hosts definieren en apache zal de correcte websites laten zien.
Hieronder een kleine voorbeeld config van apache:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/default"
ServerName iets
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/website1"
ServerName www.domeinnaam1.nl
ServerAlias domeinnaam1.nl *.domeinnaam1.nl
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/website2"
ServerName www.domeinnaam2.nl
ServerAlias domeinnaam2.nl *.domeinnaam2.nl
</VirtualHost>
NameVirtualHost *:80 zorgt ervoor dat ongeacht het IP adres van je server als het maar op poort 80 binnenkomt apache zal kijken naar virtual hosts.
Als je 2 adressen hebt en slechts op 1 adres virtual hosts wil maak je er NameVirtualHost IPAdress1:80 van
<VirtualHost *:80> betekent wederom elk IP adres op je server, als het maar poort 80 is.
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/default" is waar de website staat
ServerName iets het belangrijkste hier is dat je iets achter servername typt (als het maar geen naam is die je echt wilt gebruikt)
</VirtualHost> einde van deze virtual host definitie
Deze definitie moet bovenaan staan en zorgt ervoor dat als men iets intypt wat niet is gedefinieerd men naar een standaard website gaat.
Een soort van wildcard virtualhost.
De andere definities spreken volgens mij voor zich.
DNS en virtual hosts staan dus eigenlijk los van elkaar, alhoewel je in deze situaties (meerdere websites achter 1 IP adres) wel in lijn met elkaar moet instellen.
En terzijde, pingen heeft al helemaal niets met beide te maken, met die uitzondering dat als je een naam pingt dat er eens een dns lookup wordt gedaan naar die naam om het adres te achterhalen.
Vervolgens zal ping wat data via het ICMP protocol naar het IP adres sturen om te kijken of aldaar een echo kan worden verzonden. Maar als er aan de andere kant geen echo verstuurd kan worden (ICMP is helemaal niet geladen,of een firewall houdt het tegen) dan kan zowel DNS als host headers (virtual hosts) nog steeds prima werken.
En op je initiele vraag:
Ik heb een subdomein aangemaakt door in apache conf een VirtualHost bij te maken. Dit werkt prima maar op vele websites staat dat ik ook een DNS c-record moet aanmaken. Waarom werkt het dan toch? En geeft dit performance issues?
Het werkt omdat een cname gewoon wordt doorgezet naar een andere naam (wederom een cname of uiteindelijk een A record) en uiteindelijk kom je bij een IP adres uit.
Je eigen PC hoeft niet telkens de volgende naam uit de cname op te halen, de DNS server doet dat intern en zal altijd meteen een IP adres teruggeven (of niet als je geen wildcard hebt en het record bestaat niet).
Dus ja het is trager (want de DNS server moet door meer slagen heen om het adres te achterhalen) maar deze vertraging is praktisch te verwaarlozen.
Als je meerdere A records aanmaakt, of 1 A record en meerdere cnames die naar dat A record gaan maakt in theorie niet uit.
1 A record en meerdere cnames is makkelijk omdat je bij het verhuizen van de server naar een ander adres slechts enkel het A record hoeft te wijzigen.
Anderzijds zou dat vervelend kunnen zijn als je b.v. 2 servers gaat gebruiken om de load op te delen.
Dan moet je wel meerdere A records hebben.
Ikzelf gebruik altijd enkel A records (en je kunt prima meerdere verschillende A records hebben die toch naar hetzelfde IP adres wijzen).
[ Voor 20% gewijzigd door mookie op 25-08-2010 01:02 ]
mookie
Thanks!
i5-13600KF @ 6.0GHz || Domoticz on Pi3+Pi4 || PV: 14940 Wp || WP: 12kW LG