根据主机名进行 Apache 重定向

根据主机名进行 Apache 重定向

我有多个主机名解析到一台机器,例如:

  • build.mydomain.com
  • www.mydomain.com
  • jira.mydomain.com
  • 我的域名

是否可以设置 apache 以将请求重定向到每个不同的主机名?

例如:

  • build.mydomain.com -> build.mydomain.com:8111,
  • www.mydomain.com -> www.mydomain.com:8080
  • 我的域名.com -> www.我的域名.com:8080

DNS 记录设置为全部指向同一台机器,我只想根据主机名重定向到正确的端口。

干杯,

编辑:

机器是 Debian 和 Apache2

编辑2:

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAlias mydomain.com
    redirect 301 / http://www.mydomain.com:8080/
</VirtualHost>

<VirtualHost *:80>
    ServerName build.mydomain.com
    redirect 301 / http://build.mydomain.com:8111/
</VirtualHost>

答案1

您是否正在运行多个 Apache 实例,每个实例都监听不同的端口?为什么?虚拟主机将处理所有事情。

http://httpd.apache.org/docs/2.2/vhosts/name-based.html

答案2

按照以下文档操作规范主机名这导致<If>指示

<If "%{HTTP_HOST} == 'build.mydomain.com' && %{SERVER_PORT} -eq 80">
    RedirectMatch permanent /.* http://build.mydomain.com:8111
</If>

<If "%{HTTP_HOST} == 'www.mydomain.com' && %{SERVER_PORT} -eq 80">
    RedirectMatch permanent /.* http://www.mydomain.com:8080
</If>

...

答案3

实际上,我怀疑使用重定向是否是您要尝试执行的操作的成功策略。我建议使用 mod_proxy 创建一个反向代理,它将隐藏您构建系统的方式。

如果可以选择的话,我会使用更轻量、更方便配置的东西,比如 Perlbal。

相关内容