nginx怎么解决跨域?


本文摘自PHP中文网,作者(*-*)浩,侵删。

这里,我们利用Nginx的反向代理功能解决跨域问题,至于,什么是Nginx的反向代理,大家就请自行百度或者谷歌吧。

nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。 (推荐学习:nginx教程)

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

具体解决方案如下:

在nginx.conf中编辑

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

server {

        location / {

            root   html;

            index  index.html index.htm;

            //允许cros跨域访问

            add_header 'Access-Control-Allow-Origin' '*';

 

        }

        //自定义本地路径

        location /apis {

            rewrite  ^.+apis/?(.*)$ /$1 break;

            include  uwsgi_params;

            proxy_pass   http://www.lyz.com;

       }

}

然后我把项目部署在nginx的html根目录下,在ajax调用时设置url从http://www.lyz.com/apistest/test变为/apis/apistest/test然后成功解决。

比如我之前请求的Ajax如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

$.ajax({

        type:"post",

        dataType: "json",

        data:{'parameter':JSON.stringify(data)},

        url:"http://www.lyz.com/apistest/test",

        async: flag,

        beforeSend: function (xhr) {

  

            xhr.setRequestHeader("Content-Type", submitType.Content_Type);

            xhr.setRequestHeader("user-id", submitType.user_id);

            xhr.setRequestHeader("role-type", submitType.role_type);

            xhr.setRequestHeader("access-token", getAccessToken().token);

        },

        success:function(result, status, xhr){

         

        }

        ,error:function (e) {

            layerMsg('请求失败,请稍后再试')

        }

    });

修改成如下的请求即可:

阅读剩余部分

相关阅读 >>

nginx可以做web服务器吗

nginx安装依赖包

nginx的好处有哪些

nginx怎么重启

如何在linux中使用nginx设置负载平衡

nginx怎么部署项目到外网

nginx应用场景有哪些?

linux下关于nginx安装教程的图文详解

nginx启动的时候提示端口被占用怎么解决

使用systemctl命令启动nginx竟然报错了?什么原因?

更多相关阅读请进入《nginx》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...