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 8080
es 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
virtualhost
apache-2.4
Großer Junge
quelle
quelle
62.210.xx.xx:8080
Adresse direkt versuchen ?it points to first virtual host
In 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?nc -zv 62.210.xx.xx 8080
?62.210.xx.xx:8080
und62.210.xx.xx:80
zu*:8080
und ändern*:80
. Auchnc
kannnetstat
. Es gibt verschiedene Netstat. Installieren Sie eine und versuchen Sie, den Port zu öffnen.Antworten:
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.
quelle
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
NameVirtualHost
diese 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 vonservername
und verwendet werden sollserveraliases
.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/hosts
Datei geben Siefirst-site.com
und ansecond-site.com
. Keiner dieser Hosts ist als virtueller Host definiert, da Sie für diese daswww.
Präfix verwenden. Wenn Sie namensbasierte virtuelle Hosts verwenden, möchten SieServerAlias
Ihren 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.quelle
www
Gemäß Ihren Anweisungen habe ich Prifix in der Host-Datei undServerAlias
im VirtualHost-Block hinzugefügt und entferntNameVirtualHost
, aber das Problem ist immer noch, dass dieselbe zweite Site auf die erste verweist.NameVirtualHost
Direktive nicht. Es gibt heutzutage nicht viele gute Gründe, portbasiertes virtuelles Hosting zu verwenden.Versuchen Sie, die
Listen
Aussage an Ihre anzupassenVirtualHost
.Wenn Sie nur an die öffentliche IP 62.210.xx.xx binden möchten, verwenden Sie sie überall.
--oder--
Wenn Sie an alle Schnittstellen auf diesem Server binden möchten, verwenden Sie Platzhalter.
Im Wesentlichen weist die
Listen
Anweisung 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
Listen
Anweisungen , eine Übereinstimmung zu erzielen .quelle
www.second-site.com
die auf diewww.first-site.com
Arbeit mit 62.210.xx.xx zeigt: 8080first-site.com
, es gibt keine anderenListen
Anweisungen. Auch warum muss ich eine "Standard"Was Sie erleben, ist das Standardverhalten gemäß der Apache-Dokumentation .
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
hosts
Datei (zB/etc/hosts
,C:\Windows\System32\drivers\etc\hosts
usw.) , 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.quelle
http://second-site.com:8080
nur mit arbeitenip:8080
, auch alle Domains sind in local enthalten/etc/hosts
.ServerName
auf second-site.com gesetztVirtualHost
?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
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.
quelle
ifconfig
gibt mir diesinet 62.210.xx.xx netmask 255.255.255.0 broadcast 62.210.xx.255
undhostname -i ::1 27.0.0.1