我遇到了典型的多服务器 1 IP 问题,除了我使用 ESXi (s1) 托管服务器虚拟机(VM1、VM2)。我想要实现的是:
当有人去example.com他们得到S1-VM1它托管我的博客、网站和所有爵士乐。
但当他们去code.example.com他们得到S1-VM2它将只托管我的代码的热门 gitlab。
变量:
- VM1基于CentOS,VM2是Ubuntu服务器
- 我的带有 Ext IP 的路由器正在处理 DHCP
请让我知道我可以在哪里阅读/去/开始做这件事,因为我完全不确定从哪里开始做这样的事情。这可以像 CentOSs 的 Apache 实现的反向代理一样简单吗?也许类似于这?
更新:
所以我已经部分弄清楚了。以下配置似乎将所有流量从 重定向example.com
到https://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/default
,code.example.com
然后通过运行重新启动 Web 服务器service apache2 restart
。