Προς το περιεχόμενο

Hostname, ServerName και SERVER_NAME σε Apache server


Προτεινόμενες αναρτήσεις

Δημοσ.

Ψάχνωντας τον Apache server 2.4 παρατηρησα οτι 

 

-Στο http://localhost/info.php εχει Hostname:Port  www.example.com:80 και μετα SERVER_NAME  localhost. 

-Στο httpd.conf εχει ServerName www.example.com:80. 

 

Δεν καταλαβαινω γιατι το ServerName εχει 2 διαφορετικες τιμες σε 2 διαφορετικες τοποθεσιες. Εχω 3 ερωτησεις απο το ολο θεμα, παρακαλω βοηθηστε με να καταλαβω γιατι δεν εχω καταλαβει ακριβως.

 

Διαβαζωντας Link.png Site: εδω Link.png Site: εδω Link.png Site: εδω και Link.png Site: εδω , αν καταλαβα καλα, το SERVER_NAME ειναι μεταβλητη του Apache Environment και ειναι το ονομα που εχει το μηχανακι. Ενω το  ServerName (διαφορετικη γραφη) ειναι μεταβλητη της PHP, μερος του apache2handler και επιστρεφει το hostname το οποιο ειναι www.example.com:80. Γι αυτο Hostname = ServerName = www.example.com != SERVER_NAME.

1- Αυτό είναι ή πάλι δεν κατάλαβα σωστα ; 

 

Απο την άλλη

 

Οταν ανοιξα το host του Apache (C:\Windows\System32\drivers\etc ) το default "127.0.0.1       localhost" ηταν σε σχολιο. Αρα δεν ισχυε. Οποτε πως ηξερε να με παει στο localhost οταν χτυπαγα localhost στο Chrome ; Αν ισχυει οτι "If the main server has no ServerName at this point, then the hostname of the machine that httpd is running on is used instead." ( απο Link.png Site: εδω ) , τοτε θα επρεπε να με παει στο ServerName www.example.com:80, συμφωνα με το httpd.

2- Μηπως τελικα ServerName = SERVER_NAME ; Αλλα ειπα πιο πανω οτι μαλλον δεν ισχυει. Οποτε ξαναγυρναω στο 0 , πιο μπερδεμενος.

 

3- Το www.example.com υπάρχει, μπορεις να πας κανονικα σε αυτο. Οποτε γιατι το χρησιμοποιουν μεσα στο httpd.conf  ; Αφου δε θα πας ποτε εκει. Η τοπικα θα πειραματιζεσαι (localhost) ή θα στησεις κατι δικο σου live. Οποτε γιατι να ειναι εκει ; Γιατι δεν βαζουν παντου localhost ;

 

Ευχαριστω πολυ

  • 2 εβδομάδες αργότερα...
Δημοσ.

Ψάχνωντας τον Apache server 2.4 παρατηρησα οτι 

 

-Στο http://localhost/info.php εχει Hostname:Port  www.example.com:80 και μετα SERVER_NAME  localhost. 

-Στο httpd.conf εχει ServerName www.example.com:80. 

 

Δεν καταλαβαινω γιατι το ServerName εχει 2 διαφορετικες τιμες σε 2 διαφορετικες τοποθεσιες. Εχω 3 ερωτησεις απο το ολο θεμα, παρακαλω βοηθηστε με να καταλαβω γιατι δεν εχω καταλαβει ακριβως.

 

Διαβαζωντας Link.png Site: εδω Link.png Site: εδω Link.png Site: εδω και Link.png Site: εδω , αν καταλαβα καλα, το SERVER_NAME ειναι μεταβλητη του Apache Environment και ειναι το ονομα που εχει το μηχανακι. Ενω το  ServerName (διαφορετικη γραφη) ειναι μεταβλητη της PHP, μερος του apache2handler και επιστρεφει το hostname το οποιο ειναι www.example.com:80. Γι αυτο Hostname = ServerName = www.example.com != SERVER_NAME.

1- Αυτό είναι ή πάλι δεν κατάλαβα σωστα ; 

 

Απο την άλλη

 

Οταν ανοιξα το host του Apache (C:\Windows\System32\drivers\etc ) το default "127.0.0.1       localhost" ηταν σε σχολιο. Αρα δεν ισχυε. Οποτε πως ηξερε να με παει στο localhost οταν χτυπαγα localhost στο Chrome ; Αν ισχυει οτι "If the main server has no ServerName at this point, then the hostname of the machine that httpd is running on is used instead." ( απο Link.png Site: εδω ) , τοτε θα επρεπε να με παει στο ServerName www.example.com:80, συμφωνα με το httpd.

2- Μηπως τελικα ServerName = SERVER_NAME ; Αλλα ειπα πιο πανω οτι μαλλον δεν ισχυει. Οποτε ξαναγυρναω στο 0 , πιο μπερδεμενος.

 

3- Το www.example.com υπάρχει, μπορεις να πας κανονικα σε αυτο. Οποτε γιατι το χρησιμοποιουν μεσα στο httpd.conf  ; Αφου δε θα πας ποτε εκει. Η τοπικα θα πειραματιζεσαι (localhost) ή θα στησεις κατι δικο σου live. Οποτε γιατι να ειναι εκει ; Γιατι δεν βαζουν παντου localhost ;

 

Ευχαριστω πολυ

 

 

Το configuration της php είναι στο php.ini και το configuration του apache είναι στο httpd.conf. Δεν νομίζω ή δεν έχω πέσει στην περίπτωση να σχετίζονται. Ακόμα και αν σχετίζονται αυτό που σε ενδιαφέρει είναι αυτό που υπάρχει στο httpd.conf. Αυτό θα φαίνεται έξω.

Το localhost είναι hardcoded μέσα στα windows (εκεί καταλαβαίνω οτι πάς να κάνεις εγκατάσταση). Σε επίπεδο localnet μπορείς να πεις τον server σου ακόμα και www.google.com. και μέσω εσωτερικού dns ή με προσθήκη στο hosts αρχείο σου να είναι πιστευτό και από το σύστημα σου. Τώρα αν το βγάλεις έξω τον server σου χρειάζεσαι ένα valid fqdn.

  • Like 1
Δημοσ.

Το ServerName είναι directive(=ντιρεκτίβα) του apache και το βρίσκεις μέσα στο httpd.conf και συνήθως είναι το όνομα του virtualhost δηλαδή του web server σου(για περαιτέρω πληροφορίες ψάξε για named vhosts).

To SERVER_NAME είναι (καθολική) μεταβλητη της php (αν κάνεις ένα echo $_SERVER['SERVER_NAME']) θα τυπώσει το σερβερ name.

Το hostname συναντάται σαν έννοια/μεταβλητή συνήθως σε linux/unix περιβάλλον (υπάρχει ολόκληρο αρχείο που δηλώνεις το όνομα του υπολογιστή σου). Επειδή ο apache δημιουργήθηκε ως open source project σε linux/unix για αυτά τα περιβάλλοντα έχει καθιερωθει να αναφέρεται η μεταβλητή στο όνομα του υπολογιστή και όχι στο όνομα του web server.

  • Like 1
Δημοσ.

Sorry αλλα δε κατάφερα να τα ξεμπερδέψω. Ωραία, το SERVER_NAME ειναι global της PHP, μαζί με το POST πχ. Ενω το ServerName ειναι στο περιβάλλον του Apache. 

Αυτό που δεν καταλαβαίνω είναι η διαφορά τους. Το ServerName ειναι το όνομα του μηχανήματος, ενω το SERVER_NAME ειναι αυτό στο οποίο του κάνεις HTTP requests ;

 

Κάτσε trickius, γιατί αν οτι είναι στο httpd.conf θα φαίνεται έξω, τότε εγώ έπρεπε να γράφω στον browser μου www.example.com και οχι localhost. (by default στο httpd.conf ειναι ServerName www.example.com:80)

 

mad-prof, αν το ServerName είναι apache directive, τοτε χρησιμεύει σε configuration για τον apache σα λογισμικό και σα μηχάνημα ;. Θα χρησιμοποιήσω το ServerName μέσα στο httpd.conf για να πω οτι θέλω ο apache να κάνει κάτι. Θα χρησιμοποιήσω το SERVER_NAME για να σεταρω κατι στα requests που έρχονται απ έξω ;

 

Γενικότερα, το ServerName www.example.com:80, που ειναι ενα κανονικό site , γιατι είναι εκεί, αφου δεν το καλείς και δε το αλλάζεις ποτέ; Όποτε χρειαστώ να αλλάξω κάτι, να πάω στον σερβερ, να φορτώσω ενα αρχείο, σε οσα configuration directives εχω δει, πάντα το localhost βάζουν , ποτέ το example.com. (πχ default name-based vhost ειναι ServerName localhost)

 

Επίσης , οταν άνοιξα πρώτη φορά το host του Apache (C:\Windows\System32\drivers\etc ) το "127.0.0.1       localhost" ηταν σε σχόλιο. Αρα πως γινοταν ο συσχετισμός;

 

Εκει που πάω να τα ξεχωρίσω, τα μπερδεύω πάλι και η ύπαρξη του example.com δε μου βγάζει νόημα.

 

Πάω να χτυπήσω το κεφάλι μου στο τοίχο.

Δημοσ.

Sorry αλλα δε κατάφερα να τα ξεμπερδέψω. Ωραία, το SERVER_NAME ειναι global της PHP, μαζί με το POST πχ. Ενω το ServerName ειναι στο περιβάλλον του Apache. 

Αυτό που δεν καταλαβαίνω είναι η διαφορά τους. Το ServerName ειναι το όνομα του μηχανήματος, ενω το SERVER_NAME ειναι αυτό στο οποίο του κάνεις HTTP requests ;

 

 

Δεν υπάρχει διαφορά απλά με το SERVER_NAME έχεις έναν ευκολο τρόπο να καλεις σε σκριπτς τη μεταβλητη χωρίς να θυμάσαι απέξω το όνομα του vhost ή να το γράφεις hardcoded σε scripts. Είναι για να σε διευκολύνει όταν προγραμματίζεις.

 

 

mad-prof, αν το ServerName είναι apache directive, τοτε χρησιμεύει σε configuration για τον apache σα λογισμικό και σα μηχάνημα ;. Θα χρησιμοποιήσω το ServerName μέσα στο httpd.conf για να πω οτι θέλω ο apache να κάνει κάτι. Θα χρησιμοποιήσω το SERVER_NAME για να σεταρω κατι στα requests που έρχονται απ έξω ;

 

Σα λογισμικό αλλά και σαν vhost (ενας pc μπορει να έχει πολλά apache instances και να φιλοξενει πολλά sites/vhosts αλλά τυπικά ενω έχει μόνο ένα hostname μπορεί να έχει πολλά aliases).

 

 

Γενικότερα, το ServerName www.example.com:80, που ειναι ενα κανονικό site , γιατι είναι εκεί, αφου δεν το καλείς και δε το αλλάζεις ποτέ; Όποτε χρειαστώ να αλλάξω κάτι, να πάω στον σερβερ, να φορτώσω ενα αρχείο, σε οσα configuration directives εχω δει, πάντα το localhost βάζουν , ποτέ το example.com. (πχ default name-based vhost ειναι ServerName localhost)

Επίσης , οταν άνοιξα πρώτη φορά το host του Apache (C:\Windows\System32\drivers\etc ) το "127.0.0.1       localhost" ηταν σε σχόλιο. Αρα πως γινοταν ο συσχετισμός;

 

Τυπικά όταν δίνεις ένα όνομα στο pc σου αυτό είναι για την ip address ή καλύτερα το network interface που είναι ορατό απο άλλες συσκευες και "μιλάει" με άλλα ip δικτυα. Το 127.0.0.1 είναι ένα virtual interface που υπάρχει σε όλα τα pc και  δεν είναι routable στον έξω κόσμο, είναι απλά ένα dummy iface που παίρνει πάντα σε όλα τα pc το όνομα localhost.

  • Like 1
Δημοσ.

Ok thanks και πάλι.

 

Γενικότερα, δεν καταλαβαίνω πως ενώ το "127.0.0.1 localhost" ήταν σε σχόλιο (άρα σαν να ην υπάρχει), παρόλα αυτά ο σερβερ ήξερε που να με πάει όταν έγραφα localhost στο browser. Αρα κάπου αλλού γινετε ο συσχετισμός 127.0.0.1 = localhost ;

Επισης γιατί by default στο httpd.conf το ServerName ειναι www.example.com:80, αφού ποτέ δε βάζεις το ServerName = www.example.com:80

 

Thanks

Δημοσ.

Σου είπα παραπάνω οτι το 127.0.0.1 είναι hardcoded στο λειτουργικό.

 

Τι ακριβώς θές να κάνεις; Πες με απλά λόγια για να σε βοηθήσουμε.

  • 2 εβδομάδες αργότερα...
Δημοσ.

Long time no see

Τίποτα δε θέλω να κάνω, απλά σκαλιζω τον Apache για να τον μάθω καλύτερα και κάποια πράγματα με μπερδεύουν.

 

1. Το όνομα του σερβερ ειναι localhost με ΙΡ 127.0.0.1. Ετσι είναι και στα windows by default στημένο το virtual interface / localnet. Ο Apache, by default εχει SERVER_NAME = Hostname = localhost, γ' αυτό η αντιστοίχηση γινετε έτσι κ αλλιώς, ακόμα και αν στο Host του apache είναι σχόλιο.

 

2. H SERVER_NAME της PHP αναλαμβάνει τα requests γ αυτο ξέρει / εμφανίζει το όνομα του σερβερ.

 

3. Το hostname ειναι το όνομα του apache, ενώ μπορεί να έχει διάφορα ServerName, ανάλογα με τα vhosts, πχ name-based vhosts : ServerName localhost και μετα ορίζω ένα άλλο ως ServerName otherlocalhost. Ok.

3.1. Γιατι όμως στο httpd.conf έχουν by default ServerName www.example.com:80 και λέει κιόλας οτι "# ServerName gives the name and port that the server uses to identify itself.". Να το πω αλλιώς, αυτό δεν θα έπρεπε να μπερδεύει τα πράγματα ; Αφου είναι δηλωμένο εκεί, αμα βαζω www.example.com στον browser θα έπρεπε να με βγάζει και αυτό localhost. Oχι στο example.com

 

Σε οτιδήποτε απο τα παραπάνω κάνω λάθος, παρακαλώ πείτε μου. 

 

Επίσης, αν "το 127.0.0.1 είναι hardcoded στο λειτουργικό" και το "127.0.0.1 είναι ένα virtual interface που υπάρχει σε όλα τα pc και  δεν είναι routable στον έξω κόσμο, είναι απλά ένα dummy iface που παίρνει πάντα σε όλα τα pc το όνομα localhost" 

μπορείτε να μου πείτε παρακαλώ, που θα δω αυτή την αντιστοίχηση στο λειτουργικό μου; Υπάρχει κάποιο αρχείο ή κάποια ρύθμιση των windows που να δω αυτή την αντιστοίχηση, έτσι απο περιέργεια, για να το καταλάβω καλύτερα και να έχω μια πιο ολοκληρωμένη εικόνα ; 

 

Ευχαριστώ πολύ

Δημοσ.

Φίλε δε μπορώ να στο κάνω πιο λιανα. Η καλύτερη λύση αν ενδιαφέρεσαι να σετάρεις και να κάνεις host websites σε apache είναι να διαβάσεις κάποιο βιβλίο εξειδικευμένο. Αυτα που σου λέω είναι συσωρευμένες γνώσεις απο βιβλία γύρω απο λίνουξ και apache αλλά και απο την εμπειρία μου γύρω στα 10 χρόνια πάνω σε λίνουξ και κάποια λιγότερα με web servers.

Είναι κατανοητό ότι έχεις απορίες αλλά ειλικρινά πρέπει να ασχοληθείς για να καταλάβεις (το καταλαβαίνω είναι δύσκολο και εγω στην αρχή δε καταλαβαινα τίποτα).

  • Like 1
  • 6 μήνες μετά...
Δημοσ.
Στις 9/10/2017 στις 9:38 ΠΜ, kordoni είπε

Long time no see

Τίποτα δε θέλω να κάνω, απλά σκαλιζω τον Apache για να τον μάθω καλύτερα και κάποια πράγματα με μπερδεύουν.

1. Το όνομα του σερβερ ειναι localhost με ΙΡ 127.0.0.1. Ετσι είναι και στα windows by default στημένο το virtual interface / localnet. Ο Apache, by default εχει SERVER_NAME = Hostname = localhost, γ' αυτό η αντιστοίχηση γινετε έτσι κ αλλιώς, ακόμα και αν στο Host του apache είναι σχόλιο.

2. H SERVER_NAME της PHP αναλαμβάνει τα requests γ αυτο ξέρει / εμφανίζει το όνομα του σερβερ.

3. Το hostname ειναι το όνομα του apache, ενώ μπορεί να έχει διάφορα ServerName, ανάλογα με τα vhosts, πχ name-based vhosts : ServerName localhost και μετα ορίζω ένα άλλο ως ServerName otherlocalhost. Ok.

3.1. Γιατι όμως στο httpd.conf έχουν by default ServerName www.example.com:80 και λέει κιόλας οτι "# ServerName gives the name and port that the server uses to identify itself.". Να το πω αλλιώς, αυτό δεν θα έπρεπε να μπερδεύει τα πράγματα ; Αφου είναι δηλωμένο εκεί, αμα βαζω www.example.com στον browser θα έπρεπε να με βγάζει και αυτό localhost. Oχι στο example.com

Σε οτιδήποτε απο τα παραπάνω κάνω λάθος, παρακαλώ πείτε μου. 

Επίσης, αν "το 127.0.0.1 είναι hardcoded στο λειτουργικό" και το "127.0.0.1 είναι ένα virtual interface που υπάρχει σε όλα τα pc και  δεν είναι routable στον έξω κόσμο, είναι απλά ένα dummy iface που παίρνει πάντα σε όλα τα pc το όνομα localhost" 

μπορείτε να μου πείτε παρακαλώ, που θα δω αυτή την αντιστοίχηση στο λειτουργικό μου; Υπάρχει κάποιο αρχείο ή κάποια ρύθμιση των windows που να δω αυτή την αντιστοίχηση, έτσι απο περιέργεια, για να το καταλάβω καλύτερα και να έχω μια πιο ολοκληρωμένη εικόνα ; 

Ευχαριστώ πολύ

άλλο πράγμα το Apache και άλλο το  php.

PHP SERVER_NAME: μεταβλητή στο php που δίνει το όνομα του server που εκτελεί το script. Το όνομα δηλαδή που έχει η url

πχ http://the-server.com/index.php -> SERVER_NAME = the-server.com

Apache ServerName: λέει στο apache που να στείλει  μια url που περιεχέι το ServerName 

παράδειγμα

<VirtualHost *:80>
    ServerName test-server-1.com
    DocumentRoot "/www/domain-1"
</VirtualHost>

 

<VirtualHost *:80>
    ServerName test-server-2.com
    DocumentRoot "/www/domain-2"
</VirtualHost>

Έχει δυο τιμές για δυο virtual servers και στέλνει τα requests στο folder domain-1 ή domain-2

όπου εκτελεί το php για το ένα ή για το άλλο server. Η τιμή της μεταβλητής SERVER_NAME στο php εξαρτάτε από το αν το script είναι στο folder domain-1  ή στο domain-2

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...