nginx Access-Control-Allow-Origin报头中仅允许指定的受信任域
时间: 2024-12-10 15:14:45 浏览: 13
在Nginx中配置`Access-Control-Allow-Origin`报头以仅允许指定的受信任域,可以通过以下步骤实现:
1. **编辑Nginx配置文件**:打开你的Nginx配置文件,通常位于`/etc/nginx/nginx.conf`或`/etc/nginx/sites-available/`目录下的某个文件。
2. **设置变量**:在`server`或`location`块中,定义一个变量来存储`Origin`请求头。
3. **检查Origin**:使用`if`语句检查`Origin`请求头是否在允许的域列表中。
4. **设置CORS头**:如果`Origin`在允许的列表中,则设置`Access-Control-Allow-Origin`为该域。
以下是一个示例配置:
```nginx
server {
listen 80;
server_name example.com;
location / {
# 获取请求的Origin
set $cors "";
# 检查Origin是否在允许的域列表中
if ($http_origin ~* "^https?://(www\.)?(example1\.com|example2\.com)$") {
set $cors "true";
}
# 设置CORS头
if ($cors = "true") {
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
}
# 处理预检请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
# 其他请求处理
try_files $uri $uri/ =404;
}
}
```
### 解释:
1. **获取Origin**:使用`$http_origin`变量获取请求的`Origin`。
2. **检查Origin**:使用`if`语句和正则表达式检查`Origin`是否在允许的域列表中。
3. **设置CORS头**:如果`Origin`在允许的列表中,则设置`Access-Control-Allow-Origin`为该域,并添加其他必要的CORS头。
4. **处理预检请求**:对于`OPTIONS`请求,设置相应的CORS头并返回204状态码。
阅读全文