虚拟机3种方式nginx/apache+跨域

一.跨域
1.“源”由协议、域名、端口号组成
2.同源策略是浏览器的一种保护机制。
指两个源相同(即两个源的协议、域名、端口号都相同)
(1)JSONP
Jsonp是Json的一种“使用模式”,他就可以解决浏览器遇到的跨域问题,我们可以动态创建script,再请求一个带参网址实现跨域通信。用Jsonp请求得到的是JavaScript,相当于直接用JavaScript解析。

JSONP方案和ajax没有任何关系,是通过script标签的src属性实现,因此JSONP方案只支持get请求,并且兼容性好,几乎所有浏览器都支持。

实现原理:在全局定义一个函数,将函数名以get传参的方式写入到script标签的src属性中(如下图所示),后端返回函数名以及参数,全局定义的函数就会自动调用,形参会接收后端传过来的参数。
注意:
1、jsonp只能解决GET类型的ajax请求跨域问题。
2、jsonp请求不是ajax请求,而是一般的get请求。

(2)CORS
CORS(Cross-Origin Resource Sharing,跨域资源共享)方案,就是通过服务器设置一系列响应头来实现跨域。而客户端不需要做什么额外的事情。

postMessage跨域:
window.postMessage() :允许来自一个文档的脚本可以传递文本消息到另一个文档里的脚本,而不用管是否跨域。一个文档里的脚本还是不能调用在其他文档里方法和读取属性,但他们可以用这种消息传递技术来实现安全的通信。
这项技术称为“跨文档消息传递”,又称为“窗口间消息传递”或者“跨域消息传递”。
postMessage() :该方法允许有限的通信 —— 通过异步消息传递的方式 —— 在来自不同源的脚本之间。
二.Apache基于多IP、多端口、多域名访问
IP
修改子配置文件

[root@CentOS01 ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf 
 
# *代表本机ip,也可以直接写成本就ip地址
<VirtualHost *:80>
   # ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache/htdocs/web1"
   # ServerName dummy-host.example.com
   # ServerAlias www.dummy-host.example.com
   # ErrorLog "logs/dummy-host.example.com-error_log"
   # CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
 
Listen 81 #打开81端口
<VirtualHost *:81>
   #ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/usr/local/apache/htdocs/web2"
   # ServerName dummy-host2.example.com
   # ErrorLog "logs/dummy-host2.example.com-error_log"
   # CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>

测试并重启apache

[root@CentOS01 ~]# /usr/local/apache/bin/apachectl -t
 
[root@CentOS01 ~]# killall httpd
 
[root@CentOS01 ~]# /usr/local/apache/bin/apachectl
 
[root@CentOS01 ~]# netstat -nptl

检验
请添加图片描述端口
在主配置文件添加监听端口

vim /etc/httpd/conf/httpd.conf 

Listen 8080 

添加8080的端口虚拟配置

#cat virtualhost.conf

<VirtualHost 192.168.137.200:80>
  DocumentRoot "/var/www/test200"
  ServerName    www.test200.com
</VirtualHost>

<VirtualHost 192.168.137.201:80>
  DocumentRoot "/var/www/test201"
  ServerName    www.test201.com
</VirtualHost>
# cd /var/www/           #切换目录

# mkdir test201-8080        #创建目录

# echo "test201-8080" >>./test201-8080/index.html       #创建主页

测试
域名
添加域名的虚拟主机配置

NameVirtualHost 192.168.137.200:80 
<VirtualHost 192.168.137.200:80>
  DocumentRoot "/var/www/test200"
  ServerName    www.test200.com
</VirtualHost>

<VirtualHost 192.168.137.200:80>
  DocumentRoot "/var/www/test200net"
  ServerName    www.test200.net
</VirtualHost>

<VirtualHost 192.168.137.201:80>
  DocumentRoot "/var/www/test201"
  ServerName    www.test201.com
</VirtualHost>

<VirtualHost 192.168.137.201:8080>
  DocumentRoot "/var/www/test2018080"
  ServerName    www.test2018080.com
</VirtualHost>

三.nginx基于多IP、多端口、多域名访问
监听指定 ip 端口

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;			
listen *:8000;

监听多个端口

server {
   listen  443 ssl http2;
   listen  [::]:443 ssl http2;
   listen  80;
   listen  81;
   server_name example.com ;
}

基于不同域名访问
一般都是在nginx.conf的尾部加入include,使用vhost这样每个网页用单独的配置。
www.server111.com配置文件

server {
listen 80;
server_name www.server111.com;    ##指定域名


location / {
root /www/ctm/xcy-project/yun-app-lives; ##项目路径
try_files $uri $uri/ /;
index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;
location = /50x.html {

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
NanoHTTPD是一个免费、轻量级的(只有一个Java文件) HTTP服务器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 请求,支持文件上传,占用内存很小。可轻松定制临时文件使用和线程模型。NanoHTTPD for JDK 1.1https://github.com/NanoHttpd/nanohttpd/tree/nanohttpd-for-java1.1示例代码:package fi.iki.elonen.debug;   import fi.iki.elonen.NanoHTTPD; import fi.iki.elonen.ServerRunner;   import java.util.HashMap; import java.util.List; import java.util.Map;   public class DebugServer extends NanoHTTPD {     public DebugServer() {         super(8080);     }       public static void main(String[] args) {         ServerRunner.run(DebugServer.class);     }       @Override public Response serve(IHTTPSession session) {         Map<String, List<String>> decodedQueryParameters =             decodeParameters(session.getQueryParameterString());           StringBuilder sb = new StringBuilder();         sb.append("<html>");         sb.append("<head><title>Debug Server</title></head>");         sb.append("<body>");         sb.append("<h1>Debug Server</h1>");           sb.append("<p><blockquote><b>URI</b> = ").append(             String.valueOf(session.getUri())).append("<br />");           sb.append("<b>Method</b> = ").append(             String.valueOf(session.getMethod())).append("</blockquote></p>");           sb.append("<h3>Headers</h3><p><blockquote>").             append(toString(session.getHeaders())).append("</blockquote></p>");           sb.append("<h3>Parms</h3><p><blockquote>").             append(toString(session.getParms())).append("</blockquote></p>");           sb.append("<h3>Parms (multi values?)</h3><p><blockquote>").             append(toString(decodedQueryParameters)).append("</blockquote></p>");           try {             Map<String, String> files = new HashMap<String, String>();             session.parseBody(files);             sb.append("<h3>Files</h3><p><blockquote>").                 append(toString(files)).append("</blockquote></p>");         } catch (Exception e) {             e.printStackTrace();         }           sb.append("</body>");         sb.append("</html>");         return new Response(sb.toString());     }       private String toString(Map<String, ? extends Object> map) {         if (map.size() == 0) {             return "";         }         return unsortedList(map);     }       private String unsortedList(Map<String, ? extends Object> map) {         StringBuilder sb = new StringBuilder();         sb.append("<ul>");         for (Map.Entry entry : map.entrySet()) {             listItem(sb, entry);         }         sb.append("</ul>");         return sb.toString();     }       private void listItem(StringBuilder sb, Map.Entry entry) {         sb.append("<li><code><b>").append(entry.getKey()).             append("</b> = ").append(entry.getValue()).append("</code></li>");     } } 标签:NanoHTTPD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y-hj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值