AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 739926
Accepted
Tall boY
Tall boY
Asked: 2015-12-02 00:09:41 +0800 CST2015-12-02 00:09:41 +0800 CST 2015-12-02 00:09:41 +0800 CST

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

  • 772

我正在尝试将我的网站托管在运行 centos7.1 的单台服务器上。我可以在端口上进行虚拟主机,80 但是当我将端口更改second-site为它时,8080它指向first-site. 但是,对于 URLhttp://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
virtualhost
  • 5 5 个回答
  • 35411 Views

5 个回答

  • Voted
  1. TheCompWiz
    2015-12-04T22:11:25+08:002015-12-04T22:11:25+08:00

    尝试使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。

    • 5
  2. mc0e
    2015-12-04T06:00:05+08:002015-12-04T06:00:05+08:00

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

    如果您要将服务器放在它们自己的端口上,那么您不应该NameVirtualHost为这些端口定义。servername当您为请求到达的主机和端口定义了它时,apache 会根据and选择要使用的 virtalhost 配置serveraliases。

    当使用不同的 IP/端口定义虚拟主机块时,我不清楚 Apache 是否准备根据域名选择虚拟主机。你所描述的听起来可能就是正在发生的事情。

    在您的/etc/hosts文件中,您指定first-site.com和second-site.com. 这些都不是定义的虚拟主机,因为对于那些您使用www.前缀的主机。如果您使用的是基于名称的虚拟主机,您可能希望将ServerAlias指令添加到您的虚拟主机块。同时,您的开头段落对您所引用的网站使用了无用的简写 - 您最好将其更改为引用您遇到问题的确切 URL。

    • 4
  3. Inigo Flores
    2015-12-07T04:00:00+08:002015-12-07T04:00:00+08:00

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

    在此处输入图像描述

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

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

    如果您尚未配置 DNS,请确保将这些域名包含在本地hosts文件中(例如/etc/hosts,等)。C:\Windows\System32\drivers\etc\hosts如果这不是一个选项,您还可以使用 DynDNS 或其他提供商设置动态主机名,并将其用于您的 ServerName/ServerAlias。

    • 3
  4. mick
    2015-12-05T12:03:25+08:002015-12-05T12:03:25+08:00

    62.210.xx.xx 是您服务器的 IP 还是您的服务器之前的 NAT IP?您必须在 VirtualHost 上拥有服务器的真实 IP,如果您在服务器上有很多 IP,您必须拥有发出请求的 IP。

    • 1
  5. Best Answer
    fetch101
    2015-12-09T06:24:02+08:002015-12-09T06:24:02+08:00

    正如 Inigo Flores 已经指出的那样,这是默认的 apache 行为。

    通过在浏览器中输入 second-site.com,它将始终连接到端口 80。如果要访问其他端口,则需要在 url 中指定它,例如 second-site.com:8080

    如果您想访问您的站点,例如 second-site.com,则使用不同的端口是没有意义的。

    • 1

相关问题

  • 阿帕奇虚拟主机

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 中的动态虚拟主机

  • VirtualHost / NameVirtualHost 背后的逻辑是什么

  • 如何设置 Jetty 6 和 Jboss 4.0.5 虚拟主机?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve