虚拟主机的三种方式(nginx)
基于IP地址(不支持云服务器)
买的云服务器不支持这种方法,因为不能修改网关,修改网关会导致无法远程连接
首先我们先在一台linux服务器上绑定两个不同IP请求不同的HTML
![](https://i-blog.csdnimg.cn/blog_migrate/7add16a1b7f675237d10105a42e70e6d.png)
先绑定两个不同的IP分别为192.168.140.250和192.168.140.251,并且通过ifconfig可以查看,并且也可以ping通,在进行下载安装nginx以及相关的安装包
![](https://i-blog.csdnimg.cn/blog_migrate/dc48ba8f05f3b7f3c71b2f5c6be2fbea.png)
![](https://i-blog.csdnimg.cn/blog_migrate/55166e0395937be5fdf8a27461ae80c2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/73df1f4dfb412dd424293c3f5bb89e2f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cb92631bcb3a46cdfd27c75e4aafdeec.png)
修改配置文件,80端口同时监听两个IP,并且进行不同的HTML页面展示,通过更改html页面来区别,此处我增加了一个对应的IP地址在界面上,所以可以得到这样的两个html界面
经常出现问题在nginx的安装与环境的部署,还有就是nginx.conf的配置文件经常出现问题导致无法完成相应的效果,尤其需要注意标点符号以及括号都会导致问题发生。
基于端口号
我们此处敲实验的端口号设置为3669和3670,表示不同的界面
![](https://i-blog.csdnimg.cn/blog_migrate/2bd2d5a560a5a361f3db8226feeb2f12.png)
![](https://i-blog.csdnimg.cn/blog_migrate/87307d38af223de808572830ec56ec06.png)
![](https://i-blog.csdnimg.cn/blog_migrate/62b91303b14c19c44f963f8a20132d2e.png)
将端口号3669的界面为11111111;端口号为3670的界面为22222222
![](https://i-blog.csdnimg.cn/blog_migrate/a16972af145b93c5b510509796df6999.png)
需要重启服务和修改防火墙
基于域名
需要两个域名指向一个服务器,两个域名设置为xyy.com和xiayingying.com,此处不使用www是因为浏览器会强制使用https协议
![](https://i-blog.csdnimg.cn/blog_migrate/4fed39667d93edb6bcbda86f730b7189.png)
先创建各自的界面,然后在进行配置更改,更改不一样的域名,监听端口号是一样的
![](https://i-blog.csdnimg.cn/blog_migrate/5125f40db34121bcf73d38fc70db6311.png)
如果域名没有进行备案,需要在Windows主机进行备案
![](https://i-blog.csdnimg.cn/blog_migrate/d1a8c4b8ea51667dfd84c1dd25947e8a.png)
跨域
工作越来越细致化,所以产生了跨域问题,为了解决这个问题,就出现了同源策略。就是指三点相同,协议+域名+端口相同的请求则可以被看作是同源,同源策略也限制了不同源之间的资源交换
解决跨域问题
通过对nginx配置文件的更改实现跨域的问题
location / {
# 允许跨域的请求,可以自定义变量$http_origin,*表示所有
add_header 'Access-Control-Allow-Origin' *;
# 允许携带cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
# 允许跨域请求的方法:GET,POST,OPTIONS,PUT
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';
# 允许请求时携带的头部信息,*表示所有
add_header 'Access-Control-Allow-Headers' *;
# 允许发送按段获取资源的请求
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
# 一定要有!!!否则Post请求无法进行跨域!
# 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
# 对于Options方式的请求返回204,表示接受跨域请求
return 204;
}
}