nginx 多域名反向代理,阿里云oss上传服务 nginx 反向代理 需要配置两个域名

阅读(142)发布于 2023-09-25

Nginx的反向代理跨域 什么是跨域?简单说,nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。Location/carrots-admin-ajax/{ proxy_passhttp://dev.admin.carrots.ptteng.com/; } proxy_pass把请求代理到其他主机 两种写法hhttp://dev.admin.carrots.ptteng.com/和http://dev.admin.carrots.ptteng.com 如果访问url=http://server/html/test.jsp,则被nginx代理后 情况1,将test/作为根路径,请求test/路径下的资源。情况2,则被nginx代理后,请求路径会变为http://proxy_pass/test.jsp,直接访问server的根资源。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。

配图

什么是跨域?

跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域

浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源

同ip(或domain),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略

现代浏览器在安全性和可用性之间选择了一个平衡点。在遵循同源策略的基础上,选择性地为同源策略“开放了后门”。例如imgscriptstyle等标签,都允许垮域引用资源,然而,你也只能是引用这些资源而已,并不能读取这些资源的内容

同源策略限制以下几种行为:

1.Cookie、LocalStorage和IndexDB无法读取

2.DOM和Js对象无法获得

3.AJAX请求不能发送

http://www.domain.com/a.jshttp://www.domain.com/b.js同一域名,不同文件或路径允许http://www.domain.com/lab/c.jshttp://www.domain.com:8000/a.jshttp://www.domain.com/b.js同一域名,不同端口不允许http://www.domain.com/a.jshttps://www.domain.com/b.js同一域名,不同协议不允许http://www.domain.com/a.jshttp://192.168.4.12/b.js域名和域名对应相同ip不允许http://www.domain.com/a.jshttp://x.domain.com/b.js主域相同,子域不同不允许http://domain.com/c.jshttp://www.domain1.com/a.jshttp://www.domain2.com/b.js不同域名不允许

1、通过jsonp跨域

2、document.domain+iframe跨域

3、location.hash+iframe

4、window.name+iframe跨域

5、postMessage跨域

6、跨域资源共享(CORS)

7、nginx代理跨域

8、nodejs中间件代理跨域

9、WebSocket协议跨域

正向代理:代理位于网站和客户端中间,客户端无法访问某网站,就将请求发送给代理服务器,代理从网站取回来再发送给客户端,网站并不知道为谁提供服务

反向代理:客户端访问某网站的一个页面,但是网站并没有,就偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户,用户不知道真正提供服务的是谁

对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。

简单说,nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。又通过重写url,欺骗了真实的服务器,让它以为这个http请求是直接来自与用户浏览器的。

Location/carrots-admin-ajax/{

proxy_passhttp://dev.admin.carrots.ptteng.com/;

}

proxy_pass把请求代理到其他主机

两种写法hhttp://dev.admin.carrots.ptteng.com/和http://dev.admin.carrots.ptteng.com

如果访问url=http://server/html/test.jsp,则被nginx代理后

情况1,将test/作为根路径,请求test/路径下的资源。

情况2,则被nginx代理后,请求路径会变为http://proxy_pass/test.jsp,直接访问server的根资源。

是一个匹配规则,用于拦截请求,匹配任何以/proxy/html/开头的地址,匹配符合以后,停止往下搜索正则。

对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。

简单说,nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。又通过重写url,欺骗了真实的服务器,让它以为这个http请求是直接来自与用户浏览器的。

1.执行server块的rewrite指令(这里的块指的是server关键字后{}包围的区域,其它xx块类似)

2.执行location匹配

3.执行选定的location中的rewrite指令

如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件

如果循环超过10次,则返回500InternalServerError错误

7.参考文献

参考一:https://www.cnblogs.com/gabrielchen/p/5066120.html

参考二:http://blog.csdn.net/shendl/article/details/48443299

8.更多讨论

提问:

Q:例如imgscriptstyle等标签,都允许垮域引用资源?

A:在浏览器中,并且加载的方式其实相当于一次普通的GET请求,唯一不同的是,为了安全起见,浏览器不允许这种方式下对加载到的资源的读写操作,而只能使用标签本身应当具备的能力(比如脚本执行、样式应用等等)。

Q:例如imgscriptstyle等标签,都允许垮域引用资源?

A:在浏览器中,并且加载的方式其实相当于一次普通的GET请求,唯一不同的是,为了安全起见,浏览器不允许这种方式下对加载到的资源的读写操作,而只能使用标签本身应当具备的能力(比如脚本执行、样式应用等等)。

Q:JSONP和nginx跨域有什么不同

JSONP和nginx是完全不同的是可以跨域的,而且在跨域脚本中可以直接回调当前脚本的函数

原理:是可以跨域的,而且在跨域脚本中可以直接回调当前脚本的函数

script标签是可以加载异域的JavaScript并执行的,通过预先设定好的callback函数来实现和母页面的交互。它有一个大名,叫做JSONP跨域,JSONP是JSONwithPadding的略称。它是一个非官方的协议,明明是加载script,为啥和JSON扯上关系呢?原来就是这个callback函数,对它的使用有一个典型的方式,就是通过JSON来传参,即将JSON数据填充进回调函数,这就是JSONP的JSON+Padding的含义。JSONP只支持GET请求。

可以把多个域名映射到同一个IP地址上

docker镜像名称由REPOSITORY和TAG组成[REPOSITORY[:TAG]],TAG默认为latest

在宿主机创建持久化conf--配置目录html--静态网站目录logs--日志目录cert--存放证书目录

将容器内的nginx.conf与default.conf文件分别拷贝到主机/mnt/nginx与目录/mnt/nginx/conf下,分别执行

conf目录下创建nginx.conf文件

首先要在域名管理中做好域名简析

在conf.d目录下创建域名为ab.baidu.com的配置文件ab.baidu.com.conf文件包含ssl证书

在conf.d目录下创建域名为gh.baidu.com的配置文件gh.baidu.com.conf文件包含ssl证书

ginx.conf并没有在etc/nginx/conf目录下。

允许https访问的default.conf文件

将服务器的配置文件挂载到容器中,这样我们修改配置文件会方便一些。

退出nginx容器,将容器中的文件nginx.conf先拷贝到宿主机中,conf.d目录下的default.conf文件拷贝出来

执行dockerstopef命令停止刚刚创建的nginx容器,ef是容器Id,然后执行dockerrmef移除容器,

-v/docker-root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf

/docker-root/nginx/conf/nginx.conf宿主机中的ngix配置文件挂载到容器的/etc/nginx/nginx.conf配置文件

-v/docker-root/nginx/conf/conf.d:/etc/nginx/conf.d

/docker-root/nginx/conf/conf.d宿主机中的配置目录conf.d挂载到容器的/etc/nginx/conf.d目录上

-v/docker-root/nginx/cert:/cert/

映射ssl证书文件

命令,重新创建nginx容器

这样就可以将配置文件、log、静态页面映射到宿主机中。需要修改或者查看直接在宿主机中修改或者查看就可以了。需要注意的是,配置文件虽然映射到宿主机中,但是如需配置路径,还需配置成容器中的路径

注意发布到云服务器上服务器安全组是否开放了443端口。

把vue生成的dist目录下的文件上传到服务器

/root/docker-root/vue-mcyl-src

文件目录dist目录Dockerfile文件

转到此目录下

使用下面的命令生成镜像

启动容器

dockerrun-dmcyl-vue:v1.0

conf.d目录下的配置文件default.conf

防火墙原因,需要将通信的端口开放

解决办法:

firewall-cmd--zone=public--add-port=9080/tcp--permanent

firewall-cmd--zone=public--add-port=8080-8080/tcp

参考http://www.ttlsa.com/web/multiple-https-host-nginx-with-a-ip-configuration/

1.正向代理:

正向代理,"它代理的是客户端",是一个位于客户端和原始服务器(OriginServer)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)。

然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

1.1正向代理用途:

访问原来无法访问的资源,如Google。

可以做缓存,加速访问资源。

对客户端访问授权,上网进行认证。

代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。

2反向代理:

反向代理它代理的是服务端",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

2.1反向代理用途:

保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网。

负载均衡,通过反向代理服务器来优化网站的负载。

nginx配置如下

如果报错405可能是代理的类型出问题了location~.*.(gif|jpg|jpeg|png|bmp|swf)$

以上就是关于nginx 多域名反向代理的解答,如果对你有帮助,不妨关注本站,本站将为你整理更多内容。