在Nginx中配置跨域资源共享(CORS)主要涉及到设置HTTP响应头,以允许来自不同源的请求。以下是一个基本的Nginx配置示例,展示了如何启用CORS:
server {
listen 80;
server_name example.com;
location / {
# 允许所有来源的请求
add_header 'Access-Control-Allow-Origin' '*' always;
# 允许的HTTP方法
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
# 允许的HTTP头
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept' always;
# 预检请求的有效期
add_header 'Access-Control-Max-Age' 1728000 always;
# 处理预检请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
# 实际处理请求
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Access-Control-Allow-Origin: 允许所有来源的请求。如果你只想允许特定的来源,可以将*替换为具体的域名,例如http://example.com。
Access-Control-Allow-Methods: 允许的HTTP方法,例如GET, POST, OPTIONS。
Access-Control-Allow-Headers: 允许的HTTP头,例如Origin, X-Requested-With, Content-Type, Accept。
Access-Control-Max-Age: 预检请求的有效期,单位是秒。预检请求是浏览器在实际发送请求之前发送的OPTIONS请求,以检查服务器是否允许该请求。
处理预检请求: 当请求方法是OPTIONS时,Nginx会返回一个204 No Content响应,并设置相应的CORS头。
Access-Control-Allow-Origin设置为具体的域名,而不是*,以提高安全性。Access-Control-Max-Age可以减少预检请求的频率,提高性能。通过以上配置,你可以启用Nginx的CORS支持,允许来自不同源的请求。