web-dev-qa-db-fra.com

Virtualhost ne fonctionne pas sur un port différent

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
9
Tall boY

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.

1
fetch101

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.

4
TheCompWiz

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.

4
mc0e

Ce que vous rencontrez est le comportement par défaut selon la documentation Apache .

enter image description here

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.

3
Inigo Flores

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.

1
mick