我的日常开发记录日志
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)

我的日常开发记录日志

never give up
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)
  • git

  • composer

  • linux

  • nginx

    • Nginx
    • nginx服务器跨域配置
      • CORS
        • 跨域类型
        • 1.nginx跨域配置
        • 2.php代码中实现跨域
        • 2.原始域名设置大nginx反向代理
    • ssl免费证书生成
    • nginx负载
    • nginx在linux上操作
    • ab基本压测
  • docker

  • vpn

  • frp

  • 脚本

  • 硬件

  • 运维
  • nginx
窝窝侠
2024-06-15

nginx服务器跨域配置

# CORS

CORS是一个W3C的标准,全称是跨域资源共享(Cross-Origin Resource Sharing)。跨源资源共享是一种浏览器机制,可以控制对位于给定域之外的资源的访问。它扩展并增加了同源策略 ( SOP ) 的灵活性。但是,如果网站的 CORS 策略配置和实施不当,它也可能导致跨域攻击。CORS 不能防止跨域攻击,例如跨站点请求伪造( CSRF )。

跨域主要使用的4个响应头:

Access-Control-Allow-Methods: 设置跨域允许的请求方法 Access-Control-Allow-Headers: 设置跨域允许的自定义字段 Access-Control-Allow-Credentials:设置跨域是否允许使用Cookies Access-Control-Allow-Origin: 设置跨域允许请求源地址,* 表示服务器可以接受所有来源的请求,但是不接受cookie

# 跨域类型

  • 简单
  • 非简单请求

# 1.nginx跨域配置

    map $http_origin $cors_origin { ##配置多个域名时候
        default 0;
        "~http://127.0.0.1:5500" http://127.0.0.1:5500;
    }
    server{
      add_header Access-Control-Allow-Origin $cors_origin always;
	  add_header Access-Control-Allow-Methods '*';
	  add_header Access-Control-Allow-Headers '*';

	  if ($request_method = 'OPTIONS') {
            return 200;
      }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.php代码中实现跨域

    header("Access-Control-Allow-Origin:*");
    header('Access-Control-Allow-Methods:GET,POST');//这个其实不生效
    header("Access-Control-Allow-Headers:*");
    header("content-type:application/json");    
    ###设置多个域名,先设置域名组,然后再进行
    //设置能访问的域名
    static public $originarr = [
   'https://test1.com',
   'https://test2.com',
    ];
     // 获取当前跨域域名
   $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
   if (in_array($origin, self::$originarr)) {
      // 允许 $originarr 数组内的 域名跨域访问
      header('Access-Control-Allow-Origin:' . $origin);
      // 响应类型
      header('Access-Control-Allow-Methods:POST,GET');
      // 带 cookie 的跨域访问
      header('Access-Control-Allow-Credentials: true');
      // 响应头设置
      header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
   }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 2.原始域名设置大nginx反向代理

   location / {
        proxy_pass   http://www.domain2.com:8080;  #反向到的域名
        proxy_cookie_domain www.domain2.com www.domain1.com; #修改cookie里域名
        index  index.html index.htm;

        # 当用webpack-dev-server等中间件代理接口访问nignx时,此时无浏览器参与,故没有同源限制,下面的跨域配置可不启用
        add_header Access-Control-Allow-Origin http://www.domain1.com;  #当前端只跨域不带cookie时,可为*
        add_header Access-Control-Allow-Credentials true;
    }
1
2
3
4
5
6
7
8
9
在线编辑 (opens new window)
上次更新: 2025/02/25, 18:30:54
Nginx
ssl免费证书生成

← Nginx ssl免费证书生成→

最近更新
01
showprocess用法
04-29
02
vue3中尖括号和冒号的使用细则
04-29
03
sd使用
02-22
更多文章>
🖥️

© 2025窝窝侠 💌 豫ICP备20005263号-2 🛀 Theme by 💝 Vdoing && 小胖墩er

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×