在腾讯云上申请了二级域名,之后想在同一台 VPS 上用同一个 80 端口部署多个网站,比如:www.xxx.cn
、blog.xxx.cn
、trip.xxx.cn
。
默认情况下这三个域名指向三个 IP
,由于我只有一台服务器,所以这三个域名都指向同一个 IP
,域名解析的时候不允许指定端口号。
那我想让这三个域名指向不同的网站该怎么办呢?
使用 Apache
的反向代理可以实现这个功能,如下图所示:
明确了思路后,接下来就是具体的操作了。要完成这个功能,大致可以分为以下几步:
- 腾讯云申请二级域名
- 腾讯云申请免费的二级域名 SSL 证书
因为主域名使用了HTTPS
,因此二级域名也希望使用HTTPS
,如果不想使用HTTPS
可以省略此步骤。 - 配置
Apache
服务器 - 部署后台服务
申请二级域名
登录腾讯云:
cloud.tencent.com
依次打开:控制台->云解析
-
找到你的主域名记录,点击“解析”
-
在打开的页面中,点击“添加记录”,按下图填写相应信息
申请二级域名SSL证书
依次打开:控制台->SSL 证书
-
点击“申请免费证书”按钮,打开证书申请页面,按下图填写申请信息
-
填写完成后,点击“下一步”,在接下来的页面中选择“自动DNS验证”,然后点击“确认申请”按钮,之后就等待审核结果,一般半个小时以内就会审核通过
配置 Apache 服务器
这是最关键也是最麻烦的部分,花费了很多时间在这里才成功。
-
打开
Apache
配置文件conf/httpd.conf
,找到如下几行配置:#LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so
去掉前面的注释符号
#
。 -
打开
Apache
配置文件conf/extra/httpd-vhosts.conf
,在文件最末添加如下内容:<VirtualHost *:80> ServerName blog.xxx.cn ServerAlias blog.xxx.cn ProxyPreserveHost On ProxyRequests Off ProxyPass / http://127.0.0.1:5003/ ProxyPassReverse / http://127.0.0.1:5003/ # 强制HTTP跳转HTTPS RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R] </VirtualHost>
上面这段配置的意思是将来自 80 端口的
blog.xxx.cn
域名的请求转发给http://127.0.0.1:5003/
。http://127.0.0.1:5003/
即是内部服务的发布地址,此处注意最后的 / 不能省略,否则会有路径问题。一开始我的内部服务也使用了HTTPS
,并且还使用了HTTP
自动重定向到HTTPS
,导致怎么弄也弄不成功,最后去掉了HTTP
自动重定向功能就好了。其实,因为是内部服务,并且只监听了本地地址(localhost/127.0.0.1
),所以没有必要使用HTTPS
安全性也能得到保障。最后三行是强制
HTTP
自动重定向到HTTPS
,在此不赘述。 -
打开
Apache
服务器配置文件conf/extra/httpd-ssl.conf
,在文件最末添加如下内容:<VirtualHost *:443> ServerName blog.xxx.cn ServerAlias blog.xxx.cn ProxyPreserveHost On ProxyRequests Off ProxyPass / http://127.0.0.1:5003/ ProxyPassReverse / http://127.0.0.1:5003/ SSLEngine on SSLProtocol all -SSLv3 SSLProxyProtocol all -SSLv3 SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES SSLHonorCipherOrder on SSLCertificateFile "conf/ssl.crt/2_blog.xxx.cn.crt" SSLCertificateKeyFile "conf/ssl.key/3_blog.xxx.cn.key" SSLCertificateChainFile "conf/ssl.csr.blog/1_root_bundle.crt" </VirtualHost>
这段配置和上一步配置的意思差不多,只不过上一步配置是针对
HTTP
请求的,这一步配置是针对HTTPS
配置的。
用到的SSL
证书从腾讯云下载即可,在此不再赘述。 最后重启
Apache
服务器。
部署后台服务
我的后台服务是使用 dotNet Core
开发的,部署可自行上网搜索相关教程,这里只说两点注意事项:
- 发布时不必监听所有地址,只需监听
localhost
即可 - 不必支持
HTTPS
,只需支持HTTP
即可