翼度科技»论坛 云主机 LINUX 查看内容

Nginx配置允许跨域

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
要在Nginx中配置允许跨域(Cross-Origin Resource Sharing, CORS),你需要修改Nginx的配置文件(通常是nginx.conf或者某个包含在nginx.conf中的单独的配置文件)。下面是一个基本的例子,展示了如何在Nginx中设置CORS:

  • 打开你的Nginx配置文件。这通常是/etc/nginx/nginx.conf或者/etc/nginx/conf.d/default.conf,或者一个特定站点的配置文件在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下。
  • 在你想要允许跨域请求的server块或location块中添加add_header指令。
下面是一个简单的例子,它允许来自任何源的跨域请求,并允许所有的请求方法(GET, POST, PUT, DELETE等)和请求头:
  1. server {
  2.     listen 80;
  3.     server_name your.domain.com;
  4.     location / {
  5.         # ... 其他的配置 ...
  6.         # 允许跨域请求
  7.         if ($request_method = 'OPTIONS') {
  8.             add_header 'Access-Control-Allow-Origin' '*';
  9.             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  10.             #
  11.             # 自定义的头部可能需要额外的配置
  12.             #
  13.             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
  14.             #
  15.             # 告诉客户端,实际请求可以预检,并返回一个非简单请求的预检结果且缓存该结果
  16.             #
  17.             add_header 'Access-Control-Max-Age' 1728000;
  18.             add_header 'Content-Type' 'text/plain; charset=utf-8';
  19.             add_header 'Content-Length' 0;
  20.             return 204;
  21.         }
  22.         if ($request_method = 'POST' || $request_method = 'GET' || $request_method = 'PUT' || $request_method = 'DELETE') {
  23.             add_header 'Access-Control-Allow-Origin' '*';
  24.             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
  25.             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
  26.             #
  27.             # 如果需要处理跨域Cookie,请取消下面的注释
  28.             #
  29.             # add_header 'Access-Control-Allow-Credentials' 'true';
  30.         }
  31.         # ... 其他的代理或静态文件配置 ...
  32.     }
  33. }
复制代码
注意

  • * 允许来自任何源的请求,但在生产环境中,出于安全考虑,你应该明确指定允许的源。
  • 如果你需要处理跨域Cookie(即withCredentials设置为true的XHR/Fetch请求),则必须设置Access-Control-Allow-Credentials为true,并且Access-Control-Allow-Origin不能设置为*,而应该是一个具体的源(如http://example.com)。
  • 在处理OPTIONS预检请求时,Nginx直接返回204状态码,这告诉浏览器请求是允许的,并且不需要实际发送请求体。
  • 请根据你的实际需求调整允许的HTTP方法和请求头。
修改完Nginx配置文件后,重新加载或重启Nginx服务以使更改生效:
  1. sudo nginx -s reload
  2. # 或者
  3. sudo systemctl reload nginx
  4. # 或者完全重启Nginx服务
  5. sudo systemctl restart nginx
复制代码
来源:https://www.cnblogs.com/ydswin/p/18193923
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具