将 code.domain.com 转发到特定服务器?

将 code.domain.com 转发到特定服务器?

我遇到了典型的多服务器 1 IP 问题,除了我使用 ESXi (s1) 托管服务器虚拟机(VM1、VM2)。我想要实现的是:

当有人去example.com他们得到S1-VM1它托管我的博客、网站和所有爵士乐。

但当他们去code.example.com他们得到S1-VM2它将只托管我的代码的热门 gitlab。

变量:

  1. VM1基于CentOS,VM2是Ubuntu服务器
  2. 我的带有 Ext IP 的路由器正在处理 DHCP

请让我知道我可以在哪里阅读/去/开始做这件事,因为我完全不确定从哪里开始做这样的事情。这可以像 CentOSs 的 Apache 实现的反向代理一样简单吗?也许类似于

更新: 所以我已经部分弄清楚了。以下配置似乎将所有流量从 重定向example.comhttps://sub.example.com。如果有人愿意仔细检查一下并给我一些关于为什么会发生这种情况的反馈并建议进行调整,我会很兴奋,因为现在是假期,我有足够的时间来玩我的服务器。

<VirtualHost 192.0.2.1:80>
  ServerName sub.example.com
  Redirect permanent / http://sub.example.com/
</VirtualHost>
<VirtualHost 192.0.2.1:443>
  ServerName sub.example.com
  ErrorLog logs/sub.example.com-error_log
  CustomLog logs/sub.example.com-access_log combined
  SSLEngine On
  SSLCertificateFile /etc/httpd/conf.d/ssl/server.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/server.key
  #SSLCACertificateFile /etc/httpd/conf.d/ssl/rapidssl.crt
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://192.168.1.252/
  ProxyPassReverse / http://192.168.1.252/
</VirtualHost>

**更新2:**所以我此时遇到的错误与 SSL 有关。我将上面的配置修改为以下内容:

<VirtualHost 192.0.2.1:80>
  ServerName sub.example.com
  Redirect permanent / http://sub.example.com/
  ProxyPass / http://192.168.1.252
  ProxyPassReverse / http://192.168.1.252
</VirtualHost>
<VirtualHost 192.168.1.252:443>
  ServerName sub.example.com
  ErrorLog logs/sub.example.com-error_log
  CustomLog logs/sub.example.com-access_log combined
  SSLEngine off
  SSLCertificateFile /etc/httpd/conf.d/ssl/server.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/server.key
  #SSLCACertificateFile /etc/httpd/conf.d/ssl/rapidssl.crt
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://192.168.1.252/
  ProxyPassReverse / http://192.168.1.252/
</VirtualHost>

我这样做是根据日志的预感,日志中没有具体说明,没有匹配的 RSA 密钥或其他内容。使用上面的配置,面向公众的服务器正在将请求重定向sub.example.com到内部服务器 HTTP 网站。但现在,例如,当我执行诸如example.com/blog代理错误之类的操作时,其他一切都会上升:

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /blog.

Reason: DNS lookup failure for: 192.168.1.252blog 

有什么想法吗?

答案1

因此,为此您需要使用反向代理。反向代理允许您访问一个外部 IP 后面的多台服务器。确保您的 CNAME 记录设置正确,主机为 ,code值为example.com

我跟着引导,松散。我的操作系统是 CentOS 7.1。

首先,确保安装了 Apache/httpd。如果已经存在,则可以跳过此步骤。

sudo yum install httpd

对主服务器进行基本配置,然后继续启用对其他服务器的访问。我们需要编辑httpd.conf文件来进行重定向:

vi /etc/httpd/conf/httpd.conf

添加此内容以完成实际工作:

<VirtualHost *:80>
        ServerName code.example.com
        ProxyPass / http://S1-VM2:80/
        ProxyPassReverse / http://S1-VM2:80/
</VirtualHost>

然后我们需要重启Apache服务:service httpd restart

最后,您需要设置 Ubuntu Web 服务器。对于ServerName输入/etc/apache2/sites-available/defaultcode.example.com然后通过运行重新启动 Web 服务器service apache2 restart

相关内容