关键词:

URL转发 / URL显性转发 / URL隐性转发 / URL隐性转发服务器拒绝连接
域名:端口模式如何映射到二级域名
Docker映射端口如何以域名形式访问

项目场景:

在阿里云服务器的Ubuntu系统中,基于Apache2+Docker搭建的服务器,其访问形式为域名:端口模式
例如:利用Docker搭建的服务器,并将服务器8555端口映射至Docker容器。同时在阿里云上开放8555端口的访问权限。假设服务器域名已经备案,且其地址为www.example.com

那么访问本次Docker搭建的服务器,其url网址则为www.example.com:8555


问题描述:

在让客户访问某个网站时,我们期望的客户能以产品(二级域名)+主域名的形式访问,这样有利于客户记住网站地址。
很显然,www.example.com:8555这种域名:端口的访问形式非常不利于记忆和传播。为了解决这一尴尬的现象,就需要使用阿里云服务器上的URL转发。
URL转发包括显性转发和隐性转发。
首先,需要管理员在阿里云操控台上,进入域名解析设置页面,添加一个新的解析:

  • 记录类型:显性URL转发/隐性URL转发
  • 主机记录:product
  • 记录值:www.example.com:8555
  • 解析线路:默认
  • TTL:10分钟

这样设置完成之后,阿里云端的URL转发配置就完成了

  • 对于显性URL转发而言:在网址栏输入product.example.com时,将自动跳转进入www.example.com:8555,并在新页面显示的网址为www.example.com:8555。
  • 对于隐性URL转发而言:在网址栏输入product.example.com时,同样会进入www.example.com:8555,但是其新页面将会一直保持显示product.example.com。

但URL隐性转发的解析配置完成后,直接访问product.example.com时,会发现服务发生了拒绝连接的现象。


原因分析:

Apache服务器为了防止网站被劫持,一般是不允许进行域名隐性转发的操作。因此,即便在阿里云上设置了隐性URL转发,服务器仍然会返回拒绝连接的情况。


解决方案:

进入Docker镜像中,对Docker内的Apache配置进行更改(注意:不是更改阿里云服务器的Apache配置

[在阿里云root中操作] docker exec -it [你的容器ID] /bin/bash
[在dockerID容器中操作] vim /etc/apache2/apache2.conf
# 在最后一行添加:
[在apache2.conf文件中操作] Header set X-Frame-Options "allow-from [你的域名]"
如:
[在apache2.conf文件中操作] Header set X-Frame-Options "allow-from http://www.example.com/"
[在apache2.conf文件中操作]保存并退出
[在dockerID容器中操作] /etc/init.d/apache2 restart
[在dockerID容器中操作] 同时按住Ctrl + Q + P退出容器

注意:
让网站能接受URL隐性转发,修改前端文件的meta标签是没有任何效果的。

参考
X-Frame-Options

如何基于Ubuntu + Apache + Docker 搭建服务器完整教程见下期
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐