Nginx 是一个高性能的 HTTP 和反向代理服务器,也用作邮件代理服务器。跨域是指浏览器为了安全考虑,限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。跨域问题通常发生在前端应用尝试访问不同域名下的后端服务时。
假设我们有两个域名 domain1.com
和 domain2.com
,它们都需要访问 backend.com
的资源。
浏览器的同源策略限制了不同域名之间的直接访问。
在 Nginx 配置文件中添加跨域相关的头信息。以下是一个示例配置:
server {
listen 80;
server_name domain1.com;
location / {
proxy_pass http://backend.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 跨域配置
add_header 'Access-Control-Allow-Origin' 'http://domain1.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization';
add_header 'Access-Control-Allow-Credentials' 'true';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
}
server {
listen 80;
server_name domain2.com;
location / {
proxy_pass http://backend.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 跨域配置
add_header 'Access-Control-Allow-Origin' 'http://domain2.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization';
add_header 'Access-Control-Allow-Credentials' 'true';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
}
add_header
:添加跨域相关的头信息。Access-Control-Allow-Origin
:允许访问的源。Access-Control-Allow-Methods
:允许的 HTTP 方法。Access-Control-Allow-Headers
:允许的请求头。Access-Control-Allow-Credentials
:是否允许发送 Cookie。if ($request_method = 'OPTIONS')
:处理预检请求,返回 204 No Content。通过以上配置,domain1.com
和 domain2.com
就可以顺利地访问 backend.com
的资源,解决了跨域问题。
领取专属 10元无门槛券
手把手带您无忧上云