Virtualhost funktioniert nicht an einem anderen Port


9

Ich versuche, meine Website auf einem einzelnen Server mit centos7.1 zu hosten. Ich kann Virtualhost auf Port, 80 aber wenn ich Port von dort ändere second-site, zeigt 8080es auf first-site. Für URL http://62.210.xx.xx:8080/funktioniert es jedoch korrekt und zeigt auf second-site.

Ich mache das so:

httpd.conf

Listen 80
Listen 8080

also tried 
Listen 0.0.0.0:80
Listen 0.0.0.0:8080
but same

commented out for apache 2.4
#NameVirtualHost 62.210.xx.xx:80
#NameVirtualHost 62.210.xx.xx:8080

ServerAdmin root@localhost

#first-site.com
<VirtualHost 62.210.xx.xx:80>
ServerName first-site.com
ServerAlias www.first-site.com
DocumentRoot /var/www/first-site
</VirtualHost>

#second-site.com
<VirtualHost 62.210.xx.xx:8080>
ServerName second-site.com
ServerAlias www.second-site.com
DocumentRoot /var/www/second-site
</VirtualHost>


netstat -tulpn | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      25253/httpd
tcp6       0      0 :::8080                 :::*                    LISTEN      25253/httpd


/etc/host/
62.210.xx.xx www.first-site.com first-site.com www.second-site.com second-site.com

/usr/sbin/httpd -t
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/httpd/conf/httpd.conf:46
Syntax OK

Aktualisieren

apachectl -S
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, 
using 62.210.xx.xx. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
62.210.xx.xx:8080      m.second-site.com (/etc/httpd/conf/httpd.conf:427)
62.210.xx.xx:80        is a NameVirtualHost
     default server first-site.com (/etc/httpd/conf/httpd.conf:363)
     port 80 namevhost first-site.com (/etc/httpd/conf/httpd.conf:363)
             alias www.first-site.com
     port 80 namevhost image.first-site.com (/etc/httpd/conf/httpd.conf:3                                                                             77)
     port 80 namevhost m.first-site.com (/etc/httpd/conf/httpd.conf:389)
     port 80 namevhost second-site.com (/etc/httpd/conf/httpd.conf:401)
             alias www.second-site.com
     port 80 namevhost image.second-site.com (/etc/httpd/conf/httpd.conf:415)
     port 80 namevhost third-site.com (/etc/httpd/conf/httpd.conf:439)
             alias www.third-site.com
     port 80 namevhost image.third-site.com (/etc/httpd/conf/httpd.conf:453)
ServerRoot: "/etc/httpd"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/etc/httpd/logs/error_log"
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex default: dir="/run/httpd/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex fcgid-pipe: using_defaults
Mutex authdigest-opaque: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex authdigest-client: using_defaults
Mutex fcgid-proctbl: using_defaults
PidFile: "/run/httpd/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="xxxxxxx" id=1000
Group: name="root" id=0

Was ist passiert, wenn Sie die 62.210.xx.xx:8080Adresse direkt versuchen ?
Froggiz

Sie sagten: it points to first virtual hostIn Ihrem ursprünglichen Beitrag ... zeigt es also auf den ersten virtuellen Host, wenn Sie www.second-site.com ausprobieren? Haben Sie eine Firewall, die einige Ports blockieren könnte?
Froggiz

Ja, ich habe die Firewall aktiviert. Ich habe Port 8080 öffentlich hinzugefügt, bevor ich virtualhost erstellt habe.
Tall BoY

Was ist das Ergebnis des Befehls nc -zv 62.210.xx.xx 8080?
Froggiz

Was ist, wenn Sie 62.210.xx.xx:8080und 62.210.xx.xx:80zu *:8080und ändern *:80. Auch nckann netstat. Es gibt verschiedene Netstat. Installieren Sie eine und versuchen Sie, den Port zu öffnen.
Halfgaar

Antworten:


1

Wie Inigo Flores bereits betont hat, ist dies das Standardverhalten von Apache.

Wenn Sie second-site.com in Ihren Browser eingeben, wird immer eine Verbindung zu Port 80 hergestellt. Wenn Sie auf einen anderen Port zugreifen möchten, müssen Sie ihn in der URL wie second-site.com:8080 angeben

Wenn Sie wie second-site.com auf Ihre Site zugreifen möchten, macht es keinen Sinn, verschiedene Ports zu verwenden.


Ok, ich habe es jetzt verstanden, portbasiertes Hosting funktioniert mit Domain.com: Port-Typ-URL, nicht mit Domain.com. Ich hatte den Eindruck, dass ich auf verschiedenen Ports mit Domain.com-Typ-URL hosten kann, danke, dass ich es klargestellt habe. Dies macht alle Antworten richtig, aber ich werde Ihre akzeptieren, da es mir klar gemacht hat, was wie funktioniert. Danke
Tall BoY

Ich finde es verwirrend, dass diese Antwort anstelle meiner akzeptiert wurde.
Inigo Flores

@InigoFlores Benutzer können jede gewünschte Antwort akzeptieren, auch falsche Antworten.
Michael Hampton

4

Sie müssen entscheiden, ob Sie namenbasierte Virtualhosts oder IP / Port-basierte verwenden. Sie haben derzeit die beiden zusammen vermischt.

Wenn Sie Server an ihren eigenen Ports platzieren möchten, sollten Sie NameVirtualHostdiese Ports nicht definieren . Wenn Sie dies für den Host und den Port definieren, auf dem die Anforderung eingeht, wählt Apache die Virtalhost-Konfiguration aus, die auf der Grundlage von servernameund verwendet werden soll serveraliases.

Mir ist nicht klar, ob Apache bereit ist, einen virtuellen Host auf der Grundlage des Domänennamens auszuwählen, wenn dieser virtuelle Hostblock unter Verwendung einer anderen IP / eines anderen Ports definiert wird. Was Sie so beschreiben, könnte das sein, was passiert.

In Ihrer /etc/hostsDatei geben Sie first-site.comund an second-site.com. Keiner dieser Hosts ist als virtueller Host definiert, da Sie für diese das www.Präfix verwenden. Wenn Sie namensbasierte virtuelle Hosts verwenden, möchten Sie ServerAliasIhren virtualhost-Blöcken vermutlich Anweisungen hinzufügen. In der Zwischenzeit wird in Ihrem ersten Absatz eine nicht hilfreiche Abkürzung für die Websites verwendet, auf die Sie verweisen. Sie sollten diese besser ändern, um auf die genauen URLs zu verweisen, mit denen Sie Probleme haben.


wwwGemäß Ihren Anweisungen habe ich Prifix in der Host-Datei und ServerAliasim VirtualHost-Block hinzugefügt und entfernt NameVirtualHost, aber das Problem ist immer noch, dass dieselbe zweite Site auf die erste verweist.
Tall BoY

Können Sie mir ein Beispiel für einen auf richtigen Namen basierenden virtuellen Host an verschiedenen Ports zeigen?
Tall BoY

Für das namenbasierte virtuelle Hosting müssen Sie keine unterschiedlichen Ports verwenden. Portbasierte virtuelle Hosts benötigen die NameVirtualHostDirektive nicht. Es gibt heutzutage nicht viele gute Gründe, portbasiertes virtuelles Hosting zu verwenden.
mc0e

4

Versuchen Sie, die ListenAussage an Ihre anzupassen VirtualHost.

Wenn Sie nur an die öffentliche IP 62.210.xx.xx binden möchten, verwenden Sie sie überall.

Listen 62.210.xx.xx:80
Listen 62.210.xx.xx:8080

<VirtualHost 62.210.xx.xx:80>
  ServerName first-site.com
  ServerAlias www.first-site.com
  DocumentRoot /var/www/first-site
</VirtualHost>

<VirtualHost 62.210.xx.xx:8080>
  ServerName second-site.com
  ServerAlias www.second-site.com
  DocumentRoot /var/www/second-site
</VirtualHost>

--oder--

Wenn Sie an alle Schnittstellen auf diesem Server binden möchten, verwenden Sie Platzhalter.

Listen 80
Listen 8080

<VirtualHost *:80>
  ServerName first-site.com
  ServerAlias www.first-site.com
  DocumentRoot /var/www/first-site
</VirtualHost>

<VirtualHost *:8080>
  ServerName second-site.com
  ServerAlias www.second-site.com
  DocumentRoot /var/www/second-site
</VirtualHost>

Im Wesentlichen weist die ListenAnweisung Apache an, an diese IP / diesen Port zu binden. Wenn Sie 0.0.0.0:80 angeben, werden nur IPv4-Adressen abgehört. Die Angabe nur der Portnummer würde an alle Schnittstellen an Port 80 gebunden.

Wenn SYN-Pakete eingehen, versucht die VirtualHost-Anweisung auf der Grundlage der ListenAnweisungen , eine Übereinstimmung zu erzielen .


Wenn sich der Server hinter einem NAT befindet, verwenden Sie nicht die öffentliche IP. Verwenden Sie die IP, die dem Server physisch zugewiesen ist.
TheCompWiz

Versucht in beide Richtungen, funktioniert immer noch nicht mit URL, www.second-site.comdie auf die www.first-site.comArbeit mit 62.210.xx.xx zeigt: 8080
Tall BoY

Sind Sie sicher, dass Sie aufgrund Ihrer Ausgabe von apachectl -S keine anderen "Listen" -Anweisungen haben? Haben Sie auch versucht, eine "Standard" -Site einzurichten, die auf eine 404-Seite verweist?
TheCompWiz

1
Standard-Site ist first-site.com, es gibt keine anderen ListenAnweisungen. Auch warum muss ich eine "Standard"
-Site

3

Was Sie erleben, ist das Standardverhalten gemäß der Apache-Dokumentation .

Geben Sie hier die Bildbeschreibung ein

Jede Anfrage an eine andere Adresse als 172.20.30.50 wird vom Hauptserver bearbeitet. Eine Anfrage an 172.20.30.50 mit einem unbekannten Hostnamen oder keinem Host: -Header wird von www.example.com zugestellt.

Um den virtuellen Host von second-site.com zu erreichen , müssen Sie dies über http://second-site.com:8080/ tun .

Stellen Sie sicher , dass Sie diesen Domain - Name in Ihrer lokalen umfassen hostsDatei (zB /etc/hosts, C:\Windows\System32\drivers\etc\hostsusw.) , wenn Sie nicht DNS noch konfiguriert haben. Wenn dies keine Option ist, können Sie auch einen dynamischen Hostnamen bei DynDNS oder einem anderen Anbieter einrichten und für Ihren Servernamen / ServerAlias ​​verwenden.


Nicht http://second-site.com:8080nur mit arbeiten ip:8080, auch alle Domains sind in local enthalten /etc/hosts.
Tall BoY

Haben Sie in Ihrer Definition ServerNameauf second-site.com gesetztVirtualHost ?
Inigo Flores

Ja, ich habe Servername und Serveralias festgelegt, wie in Frage unter VirtualHost-Definition beschrieben
Tall BoY

ok, jetzt funktioniert es mit http://second-site.com:8080, aber ich möchte nicht auf diese Weise auf die Website zugreifen, ich möchte auf eine Website wiehttp://second-site.com
Tall boY

Stellen Sie einfach den zweiten virtuellen Host so ein, dass er in Port 80 als erster empfangsbereit ist.
Inigo Flores

1

Ist 62.210.xx.xx die IP Ihres Servers oder eine NAT-IP vor Ihrem Server? Sie müssen die reale IP des Servers auf dem VirtualHost haben und die, über die die Anforderung eingeht, wenn Sie viele IP auf dem Server haben.


Wie finde ich die echte IP des Servers? ifconfiggibt mir dies inet 62.210.xx.xx netmask 255.255.255.0 broadcast 62.210.xx.255undhostname -i ::1 27.0.0.1
Tall BoY
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.