【无标题】

实现虚拟主机的三种方法

1.基于IP的虚拟主机,每个网站都需要一个IP。缺点:需要多个IP,如果是公网IP,每个IP都需要付费

2.基于端口的虚拟主机,只需要一个IP。缺点:端口号无法告诉公网用户,无法适用于公网用户,适合内部用户。

3.基于主机名,为了使用基于域名的虚拟主机,必须指定服务器IP地址(和可能的端口)来使主机接受请求。

实现平台为apache-2.4.3;其实现的服务httpd监听端口为80端口

实现虚拟主机先注释掉主配置文件/etc/httpd/conf/httpd.conf中的中心主机项:

DocumentRoot “/var/www/html”

1、基于IP的虚拟主机实现:

本机的ip地址为172.168.1.1;还需要再添加一个IP地址

ifconfig eth0:0 172.168.1.2/16

在主配置文件:/etc/httpd/conf/httpd.conf;添加如下内容:

<VirtualHost 172.168.1.1:80>

DocumentRoot “/web/site1”

ServerName 172.168.1.1

<VirtualHost 172.168.1.2:80>

DocumentRoot “/web/site2”

ServerName 172.168.1.2

在上面添加了两个站点site1,site2,

为其创建两个目录:

mkdir -pv /web/{site1,site2}

为站点1提供网页:

vim /web/site1/index.html 添加如下内容:

www.magedu.com
为站点2提供网页:

vim /web/site2/index.html 添加如下内容:

www2.magedu.com
检查语法:

httpd -t

重启服务:

service httpd restart

2、基于端口的虚拟主机实现

在配置文件/etc/httpd/conf/httpd.conf添加8080监听端口

Listen 80

Listen 8080

设置主配置文件:/etc/httpd/conf/httpd.conf

<VirtualHost 172.168.1.1:80>

DocumentRoot “/web/site1”

ServerName 172.168.1.1

<VirtualHost 172.168.1.1:8080>

DocumentRoot “/web/site2”

ServerName 172.168.1.2

重启服务:

service httpd restart

同时使用IP和端口的虚拟主机实现

添加第三个站点:

<VirtualHost 172.168.1.2:80>

DocumentRoot “/web/site3”

ServerName 172.168.1.2

为第三个站点设置目录和添加页面内容:

mkdir -pv /web/site3

vim /web/site3/index.html

www3.magedu.com
重启服务:

service httpd restart

4、基于IP和端口的虚拟主机不常用,常用的是基于域名的虚拟主机基于域名的虚拟主机的IP和端口是一样的,不同之处是ServerName.

容器就是基于ServerName来判定虚拟主机是相对于哪一个站点来访问的.而基于域名的虚拟主机在apache2.2以后必须要启用配置文件中的NameVirtualHost *:80

NameVirtualHost www.magedu.com:80

在本机进行域名解析测试:

vim /etc/hosts 添加:

172.16.81.1 www.magedu.com www

172.168.1.1 www2.magedu.com www

根据实际需要,在容器中可添加相关的应用:

<VirtualHost *:80>

ServerAdmin

DocumentRoot ##网页文件路径

ServerName ##主机名

ErrorLog logs/ ##定义网站的错误日志

CustomLog logs/ ##定义网站的访问日志

跨域

一、什么是跨域?

在了解什么是跨域的时候,我们首先要了解一个概念,叫同源策略,什么是同源策略呢,就是 我们的浏览器出于安全考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。

什么是本域呢?就是同协议,同域名,同端口就叫本域。
1
2
3
浏览器请求的三种报错:

1、请求未发送

2、请求发送后,服务器发现不一样,服务器未反应。

3、请求发送,服务器有反应,数据返回的时候,浏览器发现不对,被拦截。

二、跨域的解决方法

强行实现跨域

1、JSONP (JSON with padding)

就是与后端协商好,在请求数据返回数据的时候以字符串的格式返回。

script src = ‘xxx.com’ callback = showDate

function showDate (ret) {
console.log(ret)

}

这个时候就跨域了,JSONP 可以在IE10以下的浏览器去获取数据。

2、CORS (跨资源共享)

在响应头里面写上

res.setHeader(’ Access - Contorl - Allow - Origin’ ,‘http://localhost:8080’)

只要响应头里面的Origin里面本域(协议、域名、端口)一样,就可以接受到数据

3、降域和PostMessage

3.1 降域

document.domain = ‘xxx.com’

需要本域中的域名和端口一样

3.2 PostMessage

window.frames[0],PostMessage(this,value)

window.addEventListener(‘message’,function(e)){} //调用message,监听对方发送的消息
跨域知识点整理
那就是浏览器的“同源策略”(即协议相同,域名相同,端口相同)。如果非同源,共有三种行为会受到限制:
(1) Cookie,LocalStorage和IndexdDB无法读取
(2) DOM无法获得
(3) AJAX请求不能发送

Cookie
Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享。我们可以在cookie中设置domain的值为一级域名,这样一级域名相同,二级域名不同的网页也可以共享cookie。

iframe
如果两个网页不同源,就无法拿到对方的DOM。对于完全不同源的网站,目前有三种方法,可以解决跨域窗口的通信问题。

片段标识符

window.name
跨文档通信API
片段标识符
片段标识符(fragment identifier)指的是,URL的#号后面的部分,比如http://example.com/x.html#fragment的#fragment。如果只是改变片段标识符,页面不会重新刷新。
父窗口可以把信息,写入子窗口的片段标识符。
window.name
浏览器窗口有window.name属性。这个属性最大的特点是,无论是否同源,只要在同一个窗口里,前一个网页设置了这个属性,后一个网页就可以读取它。比如说,一个网页中包含一个iframe,我们把它的window.name设置为我们想访问的内部数据。这样在该网页中就能通过document.getElementById(‘myFrame’).contentWindow.name来访问它了。
这种方法的优点是,window.name容量很大,可以放置非常长的字符串;缺点是必须监听子窗口window.name属性的变化,影响网页性能。

otherWindow指目标窗口,也就是给哪个window发消息,是window.frames的成员或者由window.open方法创建的窗口。
参数说明:
message:是要发送的消息,类型为 String、Object (IE8、9 不支持)
targetOrigin: 是限定消息接收范围,不限制请使用 ‘*’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值