Nginx 指定域名跨域请求宝塔配置

什么是跨域
假设我们页面或者应用已在 http://www.test1.com 上了,而我们打算从 http://www.test2.com 请求提取数据。一般情况下,如果我们直接使用 AJAX 来请求将会失败,浏览器也会返回“源不匹配”的错误,"跨域"也就以此由来。跨域的出现主要原因还是安全的限制(同源策略,也就是JavaScript或者Cookie只能够访问同域下的内容),因此在日常的项目开发中会不可避免的出现跨域操作。
和打多数跨域的解决方案一样,JSONP是大多数前端同事的选择,但是JSONP只支持GET请求。但是如果项目功能需要改成支持POST请求,那么因为这种情况下传输的数据量较大,GET形式是搞不定的。此时JSONP并不是一个很好的选择。此时就需要使用CORS(跨域资源共享,Cross-Origin Resource Sharing).

其实百度了很多方法:

1.在后端添加跨域代码(废弃,可能后端不能改,或者访问的是服务器文件)

2.使用jsonp(废弃,jsonp,需要传输callback,还需要返回)

3.修改nginx配置文件,允许所有,允许指定域名(可以使用)

#允许指定域名
add_header Access-Control-Allow-Origin http://q.wtt.fun;
#允许所有访问
add_header Access-Control-Allow-Origin *;
server
{
    listen 80;
    server_name cc.byiran.cn;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/test;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-72.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/cc.byiran.cn.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log off;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log off; 
    }
    add_header Access-Control-Allow-Origin *; 宝塔配置添加在这里
    access_log  /www/wwwlogs/cc.byiran.cn.log;
    error_log  /www/wwwlogs/cc.byiran.cn.error.log;
}

 

配置Nginx以忽略跨域请求,你可以通过以下步骤进行设置: 1. 打开Nginx配置文件,通常位于/etc/nginx/nginx.conf。 2. 在http块中添加一个变量$allow_cors来控制是否允许跨域请求。默认情况下,将该变量设置为1,表示允许跨域请求。 3. 添加一个server块来监听特定的端口(例如8180)。 4. 在server块内添加一个if语句来检查$allow_cors变量的值。如果$allow_cors等于0,则返回403禁止访问。 5. 配置location指令来指定需要处理的路径。你可以使用正则表达式来匹配路径,如"/index"和"/accusation"。 6. 在location块内使用proxy_pass指令将请求转发给后端服务。 7. 保存和关闭配置文件。 8. 重新启动Nginx服务,使配置生效。 以下是一个示例配置: ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_origin $allow_cors { default 1; "~^(https?://(localhost)(:[0-9])?)$" 1; "~*" 0; } server { listen 8180; if ($allow_cors = 0) { return 403; } location / { root html; index index.html index.htm; } location /index { proxy_pass http://localhost:8080/accusation; } location /accusation { proxy_pass http://localhost:8080/accusation; } } } ``` 另外,你还可以使用正则表达式来匹配指定的路径并禁止跨域请求。下面是一个示例配置: ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_origin $allow_cors { default 1; "~^(https?://(localhost)(:[0-9])?)$" 1; "~*" 0; } server { listen 8180; if ($request_uri ~ ^accu.*$) { set $allow_cors "2$allow_cors"; } if ($allow_cors = "21") { return 403; } location / { root html; index index.html index.htm; } location /index { proxy_pass http://localhost:8080/accusation; } location /accusation { proxy_pass http://localhost:8080/accusation; } } } ``` 这样配置后,Nginx将忽略跨域请求,并只允许特定的请求通过。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值