虚拟主机 和跨域知识点

实现虚拟主机有哪三种方法?一般实现虚拟主机有三种不同的方法:1.基于IP的虚拟主机,使用不同的IP地址提供不同的站点;2.基于端口的虚拟主机,使用不同的端口提供不同的站点;3.基于主机名的虚拟主机,使用不同的主机名提供不同的站点。

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

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

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

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

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

  1. #DocumentRoot "/var/www/html"

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

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

  1. # ifconfig eth0:0 172.16.14.2/16

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

  1. <VirtualHost 172.16.14.1:80>

  1. DocumentRoot "/web/site1"

  1. ServerName 172.16.14.1

  1. </VirtualHost>

  1. <VirtualHost 172.16.14.2:80>

  1. DocumentRoot "/web/site2"

  1. ServerName 172.16.14.2

  1. </VirtualHost>

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

为其创建两个目录:

  1. # mkdir -pv /web/{site1,site2}

为站点1提供网页:

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

  1. <html>

  1. <title>site1</title>

  1. <h1>www.magedu.com</h1>

  1. </html>

为站点2提供网页:

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

  1. <html>

  1. <title>site2</title>

  1. <h1>www2.magedu.com</h1>

  1. </html>

检查语法:

  1. # httpd -t

重启服务:

  1. # service httpd restart

测试网页结果:站点1:

站点2::

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

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

  1. Listen 80

  1. Listen 8080

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

  1. <VirtualHost 172.16.14.1:80>

  1. DocumentRoot "/web/site1"

  1. ServerName 172.16.14.1

  1. </VirtualHost>

  1. <VirtualHost 172.16.14.1:8080>

  1. DocumentRoot "/web/site2"

  1. ServerName 172.16.14.2

  1. </VirtualHost>

重启服务:

刷新页面显示:

80端口页面为:

8080端口:

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

添加第三个站点:

  1. <VirtualHost 172.16.14.2:80>

  1. DocumentRoot "/web/site3"

  1. ServerName 172.16.14.2

  1. </VirtualHost>

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

  1. # mkdir -pv /web/site3

  1. # vim /web/site3/index.html

  1. <html>

  1. <title>site3</title>

  1. <h1>www3.magedu.com</h1>

  1. </html>

重启服务:

  1. # service httpd restart

第三个站点显示页面:

4、基于IP和端口的虚拟主机不常用,常用的是基于域名的虚拟主机基于域名的

虚拟主机的IP和端口是一样的,不同之处是ServerName.

<VirtualHost>容器就是基于ServerName来判定虚拟主机是相对于哪一个站点来访问的.

而基于域名的虚拟主机在apache2.2以后必须要启用配置文件中的NameVirtualHost *:80

  1. NameVirtualHost www.magedu.com:80

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

  1. # vim /etc/hosts 添加:

  1. 172.16.14.1 www.magedu.com www

  1. 172.16.14.1 www2.magedu.com www2

重启服务,测试结果:

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

  1. <VirtualHost *:80>

  1. ServerAdmin

  1. DocumentRoot ##网页文件路径

  1. ServerName ##主机名

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

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

  1. #</VirtualHost>

跨域

一、什么是跨域?

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

是什么意思呢,就比如你刚刚登录了淘宝买了东西,但是你现在又点进去了另外一个网站,那么你现在的淘宝账户是属于登录状态,而并没有登出,所以你现在点进去的这个网站可以看到你的账户信息,并操作你的账户信息,这样子就很危险。

什么是本域呢?就是同协议,同域名,同端口就叫本域。

本域

浏览器请求的三种报错:

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,监听对方发送的消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值