nginx服务器跨域配置
# CORS
CORS是一个W3C的标准,全称是跨域资源共享(Cross-Origin Resource Sharing)。跨源资源共享是一种浏览器机制,可以控制对位于给定域之外的资源的访问。它扩展并增加了同源策略 ( SOP ) 的灵活性。但是,如果网站的 CORS 策略配置和实施不当,它也可能导致跨域攻击。CORS 不能防止跨域攻击,例如跨站点请求伪造( CSRF )。
跨域主要使用的4个响应头:
Access-Control-Allow-Methods: 设置跨域允许的请求方法 Access-Control-Allow-Headers: 设置跨域允许的自定义字段 Access-Control-Allow-Credentials:设置跨域是否允许使用Cookies Access-Control-Allow-Origin: 设置跨域允许请求源地址,* 表示服务器可以接受所有来源的请求,但是不接受cookie
# 跨域类型
- 简单
- 非简单请求
# 1.nginx跨域配置
map $http_origin $cors_origin { ##配置多个域名时候
default 0;
"~http://127.0.0.1:5500" http://127.0.0.1:5500;
}
server{
add_header Access-Control-Allow-Origin $cors_origin always;
add_header Access-Control-Allow-Methods '*';
add_header Access-Control-Allow-Headers '*';
if ($request_method = 'OPTIONS') {
return 200;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2.php代码中实现跨域
header("Access-Control-Allow-Origin:*");
header('Access-Control-Allow-Methods:GET,POST');//这个其实不生效
header("Access-Control-Allow-Headers:*");
header("content-type:application/json");
###设置多个域名,先设置域名组,然后再进行
//设置能访问的域名
static public $originarr = [
'https://test1.com',
'https://test2.com',
];
// 获取当前跨域域名
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
if (in_array($origin, self::$originarr)) {
// 允许 $originarr 数组内的 域名跨域访问
header('Access-Control-Allow-Origin:' . $origin);
// 响应类型
header('Access-Control-Allow-Methods:POST,GET');
// 带 cookie 的跨域访问
header('Access-Control-Allow-Credentials: true');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2.原始域名设置大nginx反向代理
location / {
proxy_pass http://www.domain2.com:8080; #反向到的域名
proxy_cookie_domain www.domain2.com www.domain1.com; #修改cookie里域名
index index.html index.htm;
# 当用webpack-dev-server等中间件代理接口访问nignx时,此时无浏览器参与,故没有同源限制,下面的跨域配置可不启用
add_header Access-Control-Allow-Origin http://www.domain1.com; #当前端只跨域不带cookie时,可为*
add_header Access-Control-Allow-Credentials true;
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
在线编辑 (opens new window)
上次更新: 2025/02/25, 18:30:54