【无标题】

实现虚拟主机的三种方法

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 添加如下内容:

site1

www.magedu.com

为站点2提供网页:

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

site2

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

site3

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、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,监听对方发送的消息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值