美文网首页
简单讲讲nginx跨域

简单讲讲nginx跨域

作者: ougi | 来源:发表于2017-08-08 18:11 被阅读203次

nginx跨域的原理

首先要说到什么是跨域。
浏览器出于安全考虑,具有同源策略。白话来说就是为了确保网站本身的数据不会被随意篡改、偷窃,要验证你的身份。同源的要求是:协议(http,https),域名,端口3个都要相同。一个不匹配都不能被认为是同源。
浏览器执行javascript脚本时,会检查这个脚本属于那个页面,如果不是同源页面,就不会被执行。

nginx作为一个典型的反向代理,可以优化负载,而且配置跨域很简单,只要修改nginx的conf文件就可以解决跨域问题。不需要修改任何代码,并且不会影响服务器性能。

工作时,相当于nginx把http请求转发到另一个或者一些服务器上。
对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。
简单说,nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。又通过重写url,欺骗了真实的服务器,让它以为这个http请求是直接来自与用户浏览器的。


自己遇到的一个问题,很久没有碰nginx了,今天启动发现失败。
先说环境,win10系统。

查看logs里的error文件,最下面报错是

9536#8296: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

有两种可能一是防火墙,二是端口被占用。
关闭防火墙后仍然启动失败,那么转向情况二。
nginx是监听80端口的,查看了下80被谁占用。
命令行输入netstat -nao
根据端口找到PID,对应为4.
去任务管理器里找到对应的PID,发现是system。

  1. 开始菜单 运行 输入 regedit
  2. 找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP
  3. 在右边找到Start这一项,将其改为0
  4. 重启系统,System进程不会占用80端口

还有一种方法:在nginx的配置文件里
把listen端口该掉。例如我改成了8881.
成功运行。

server {
        listen       8881;
        server_name  localhost;
}

还有一个比较蠢的报错:
2017/08/28 18:48:45 [emerg] 8628#4160: host not found in upstream "xxx请求地址" in E:\nginx-1.12.0/conf/nginx.conf:129
查一下项目的根目录是否正确 =。= 或者你用来跨域请求的那个ip地址是否有变动。
有时候项目改了地址,nginx配置里的地址没有更改。

相关文章

  • 简单讲讲nginx跨域

    nginx跨域的原理 首先要说到什么是跨域。浏览器出于安全考虑,具有同源策略。白话来说就是为了确保网站本身的数据不...

  • ajax跨域--nginx反向代理

    用nginx反向代理实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持...

  • 跨域方法集锦

    什么叫跨域跨域解决方法:1.cors(简单请求、非简单请求)2.jsonp3.new Image()4.nginx...

  • 浏览器跨域的那些事

    整理中 目标: 了解跨域 解决跨域 服务器配置跨域(java, nginx) 前端调试时配置解决跨域 一、什么是跨...

  • nginx反向代理

    前端调用接口的时候跨域了怎么办呢,如下代码跨域: 通过nginx反向代理下载nginx:http://nginx....

  • 关于设置env等环境变量的思考

    1、如何处理跨域后台处理跨域前端处理跨域浏览器处理跨域 前端本地处理跨域:代理线上跨域的处理方式:Nginx反向代...

  • Nginx跨域

    Nginx解决跨域问题(CORS) CORS(Cross-Origin Resource Sharing) 跨域资...

  • Nginx的高级使用

    1、概述 之前介绍过Nginx的简单使用,今天来聊聊Nginx的一些高级使用。 2、使用Nginx解决跨域问题 当...

  • jave web项目支持跨域

    跨域是件头疼的事,特别是前段端分离的项目。当然,通过jsonp、nginx代理等方法也可以解决跨域问题,不过最简单...

  • [mark]九种跨域方式实现原理

    前端如何使用proxyTable和nginx解决跨域问题 前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及...

网友评论

      本文标题:简单讲讲nginx跨域

      本文链接:https://www.haomeiwen.com/subject/leqxrxtx.html