J'essaie d'héberger mon site Web sur un seul serveur exécutant centos7.1. Je suis en mesure de virtualhost sur le port 80
mais quand je change de port de second-site
à 8080
il pointe vers first-site
. Cependant, pour l'URL http://62.210.xx.xx:8080/
son fonctionne correctement, pointant vers second-site
.
Je fais de cette façon:
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
Mise à jour
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
Comme Inigo Flores l'a déjà souligné, il s'agit du comportement par défaut d'Apache.
En tapant second-site.com dans votre navigateur, il se connectera toujours au port 80. Si vous souhaitez accéder à un autre port, vous devez le spécifier dans l'URL comme second-site.com:8080
Si vous souhaitez accéder à votre site comme second-site.com, il est inutile d'utiliser différents ports.
Essayez de faire correspondre l'instruction Listen
à votre VirtualHost
.
Si vous souhaitez uniquement vous lier à l'IP public 62.210.xx.xx, utilisez-le partout.
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>
--ou--
Si vous souhaitez vous lier à toutes les interfaces de ce serveur, utilisez des caractères génériques.
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>
Essentiellement, l'instruction Listen
indique à Apache de se lier à cette IP/port. La spécification de 0.0.0.0:80 n'écouterait que sur les adresses ipv4. Spécifier uniquement le numéro de port se lierait à toutes les interfaces sur le port 80.
De même, lorsque des paquets SYN entrent, l'instruction VirtualHost tente de faire une correspondance en fonction des instructions Listen
.
Vous devez décider si vous utilisez des hôtes virtuels basés sur le nom ou basés sur IP/port. Vous avez actuellement mélangé les deux.
Si vous allez placer des serveurs sur leurs propres ports, vous ne devez pas définir NameVirtualHost
pour ces ports. Lorsque vous définissez cela pour l'hôte et le port sur lesquels la demande arrive, Apache choisit la configuration virtalhost à utiliser sur la base de servername
et serveraliases
.
Je ne sais pas si Apache sera prêt à choisir un hôte virtuel sur la base du nom de domaine lorsque ce bloc virtualhost est défini en utilisant un IP/port différent. Ce que vous décrivez semble être ce qui se passe.
Dans ton /etc/hosts
fichier que vous spécifiez first-site.com
et second-site.com
. Ni l'un ni l'autre ne sont des hôtes virtuels définis, car pour ceux que vous utilisez le www.
préfixe. Si vous utilisez des hôtes virtuels basés sur le nom, vous souhaitez probablement ajouter des directives ServerAlias
à vos blocs virtualhost. Pendant ce temps, votre premier paragraphe utilise un raccourci inutile pour les sites auxquels vous vous référez - vous feriez mieux de le modifier pour référencer les URL exactes avec lesquelles vous rencontrez des problèmes.
Ce que vous rencontrez est le comportement par défaut selon la documentation Apache .
Toute demande adressée à une adresse autre que 172.20.30.50 sera servie depuis le serveur principal. Une demande à 172.20.30.50 avec un nom d'hôte inconnu, ou sans en-tête Host:, sera servie à partir de www.example.com.
Par conséquent, pour pouvoir accéder à l'hôte virtuel second-site.com , vous devez le faire via http: // second-site .com: 8080 / .
Assurez-vous d'inclure ces noms de domaine dans votre fichier hosts
local (par exemple /etc/hosts
, C:\Windows\System32\drivers\etc\hosts
, etc.) si vous n'avez pas encore configuré DNS. Si ce n'est pas une option, vous pouvez également configurer un nom d'hôte dynamique avec DynDNS ou un autre fournisseur et l'utiliser pour votre ServerName/ServerAlias.
62.210.xx.xx est-il l'IP de votre serveur ou une IP NAT avant votre serveur? Vous devez avoir la véritable IP du serveur sur le VirtualHost et celle par laquelle la demande est en cours) si vous avez plusieurs IP sur le serveur.