Nginx之——解决跨域问题

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

nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。

具体解决方案如下:

在nginx.conf中编辑

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如下:

$.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('请求失败,请稍后再试')
        }
    });
修改成如下的请求即可:

$.ajax({
        type:"post",
        dataType: "json",
        data:{'parameter':JSON.stringify(data)},
        url:"/apis/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('请求失败,请稍后再试')
        }
    });
至此,问题解决。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解决跨服务器跨域问题,可以通过配置Nginx来实现。首先,需要在Nginx的配置文件中添加跨域相关的配置。在server块中添加以下配置: ``` server { listen 80; server_name example.com; location / { # 允许跨域的域名 if ($http_origin ~* "^http://allowed-domain.com$") { add_header Access-Control-Allow-Origin $http_origin; } # 允许发送Cookie和HTTP认证信息 add_header Access-Control-Allow-Credentials 'true'; # 允许的请求头信息 add_header Access-Control-Allow-Headers 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; # 允许的请求方法 add_header Access-Control-Allow-Methods 'POST, GET, PUT, OPTIONS, DELETE'; # 处理预检请求 if ($request_method = OPTIONS) { return 204; } # 其他配置 ... } } ``` 其中,`allowed-domain.com`是允许跨域访问的域名。你可以根据实际情况修改为你需要允许的域名。 这样配置后,Nginx会在响应头中添加`Access-Control-Allow-Origin`、`Access-Control-Allow-Credentials`、`Access-Control-Allow-Headers`和`Access-Control-Allow-Methods`等字段,从而允许跨域请求。 请注意,以上配置是针对HTTP请求的,如果你的服务器使用HTTPS,需要在配置中添加SSL相关的配置。 另外,如果你的Nginx安装在`/usr/local/nginx`目录下,你可以使用以下命令来启动、停止或重新加载Nginx: ``` cd /usr/local/nginx/sbin ./nginx -v // 查看版本号 ./nginx // 启动Nginx ./nginx -s stop // 停止Nginx ./nginx -s quit // 安全退出Nginx ./nginx -s reload // 重新加载配置文件(常用) ``` 希望以上信息对你有帮助。 #### 引用[.reference_title] - *1* [12-Nginx解决前端项目跨域问题](https://blog.csdn.net/flowerStream/article/details/126731118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用nginx解决前端部署跨域问题](https://blog.csdn.net/biaobiaogege/article/details/123920514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Nginx解决跨域问题](https://blog.csdn.net/weixin_55853065/article/details/127787284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值