假如我有一个网站 www.simple.com ,这个对应一个静态的html网站。 还有一个API域名 api.simple.com ,这个对应后端的API接口。 假如我在www.simple.com这个网站内,去调用 api.simple.com 这个域名的接口,这个时候,在没有任何配置的情况下,两个域名不一致,浏览器就会提示跨域,阻止访问api.simple.com这个域名的接口访问。 浏览器怎么去验证是否跨域,当浏览器发现 不是同源的请求,就会发起一个 OPTIONS 请求给被访问的接口,只有接口返回了同意跨域 (Access-Control-Allow-Origin/Methods/Headers) ,浏览器才会放行这个跨域请求。 所以解决跨域的唯一方法,就是被访问的一方,设置响应头,允许被跨域访问。 你这里的配置文件,我看到都是在给 html 设置同意跨域,而不是在给接口设置同意跨域。 * * * nginx 设置允许跨域,就是用add_header这个指令,添加允许跨域的请求头。 跨域问题,应该和nginx是不是在容器内运行,没有任何关系,它只和接口的OPTIONS响应有关系,响应是允许那么就可以跨域,响应是不允许,那么就不可以跨域。 * * * 如果你要用nginx解决跨域,配置可能这两种会比较常见: (随手写的例子,不一定能跑,意思到了就行) 第一种方式: server { listen 80; server_name www.simple.com; # 用一个域名部署前端项目 location / { root /usr/share/nginx/html; index index.html index.htm; } } server { listen 80; server_name api.simple.com; #单独用一个api域名代理到后端,并设置允许跨域 location / { proxy_pass http://127.0.0.1:8080; add_header 'Access-Control-Allow-Origin' 'http://www.simple.com'; # 允许www.simple.com跨域 } } 第二种方式: server { listen 80; server_name www.simple.com; # 这里前端和后端api都使用同一个域名访问,就没有跨域的问题了。 location / { root /usr/share/nginx/html; index index.html index.htm; } location /api { proxy_pass http://127.0.0.1:8080; } }