虚拟主机不能在不同的端口上工作

我试图在运行centos7.1的单个服务器上托pipe我的网站。 我能够在端口80上的虚拟主机,但是当我将second-site端口更改为8080它指向first-site 。 但是,对于URL http://62.210.xx.xx:8080/其正常工作,指向second-site

我正在这样做:

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 

更新

 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 

正如Inigo Flores所指出的,这是默认的apache行为。

通过在您的浏览器中键入second-site.com,它将始终连接到端口80.如果您想要访问不同的端口,则需要在url中指定它,如second-site.com:8080

如果你想访问你的网站,像second-site.com,使用不同的端口是没有意义的。

试着让Listen语句匹配你的VirtualHost

如果您只想绑定到公共IP 62.210.xx.xx,则无处不在。

 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> 

– 要么 –

如果要绑定到该服务器上的所有接口,请使用通配符。

 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> 

从本质上说, Listen语句告诉Apache绑定到该IP /端口。 指定0.0.0.0:80只会监听ipv4地址。 仅指定端口号将绑定到端口80上的所有接口。

同样,当SYN数据包进来时,VirtualHost语句会根据Listen语句尝试匹配。

您需要决定是否使用基于名称的虚拟主机或基于IP /端口的虚拟主机。 你现在已经把两个混在一起了。

如果你打算把服务器放在自己的端口上,那么你不应该为这些端口定义NameVirtualHost 。 当你为请求到的主机和端口定义的时候,apache根据servernameserveraliasesselectvirtalhostconfiguration使用。

我不清楚Apache是​​否准备select基于域名的虚拟主机,而这个虚拟主机块是使用不同的IP /端口定义的。 你所描述的听起来可能是发生了什么事情。

/etc/hosts文件中指定first-site.comsecond-site.com 。 这些都不是定义的虚拟主机,因为那些你使用www. 字首。 如果您使用的是基于名称的虚拟主机,那么您可能希望将ServerAlias指令添加到您的虚拟主机块。 同时,您的开头段落对您所指向的网站使用了一个毫无帮助的简写forms – 您最好更改以引用您遇到问题的确切url。

62.210.xx.xx是服务器的IP地址还是服务器之前的NAT IP地址? 您必须拥有VirtualHost上的服务器的真实IP地址,以及在服务器上有多个IP的情况下请求所在的IP地址。

您遇到的是按照Apache文档的默认行为。

在这里输入图像说明

任何对172.20.30.50以外的地址的请求将由主服务器提供。 来自www.example.com的请求172.20.30.50具有未知的主机名,或者没有主机:头。

因此,为了能够访问second-site.com虚拟主机,您必须通过http://second-site.com:8080/完&#x6210; 。

如果您还没有configurationDNS,请确保您在本地hosts文件(如/etc/hostsC:\Windows\System32\drivers\etc\hosts等)中包含这些域名。 如果这不是一个选项,您也可以使用DynDNS或其他提供程序设置dynamic主机名,并将其用于您的ServerName / ServerAlias。