跨域之Nginx

server {
        listen       22222;
        server_name  localhost;
        location  / {
            if ($request_method = 'OPTIONS') {
                add_header Access-Control-Allow-Origin 'http://localhost:8080';
                add_header Access-Control-Allow-Headers '*';
                add_header Access-Control-Allow-Methods '*';
                add_header Access-Control-Allow-Credentials 'true';
                return 204;
            }
            if ($request_method != 'OPTIONS') {
                add_header Access-Control-Allow-Origin 'http://localhost:8080' always;
                add_header Access-Control-Allow-Credentials 'true';
            }
            proxy_pass  http://localhost:59200; 
        }
    }

https://www.youkuaiyun.com/tags/MtTagg4sNTMzOTItYmxvZwO0O0OO0O0O.html

关于localtion后面的常用的需求有:

localtion / {
 # 所有请求都匹配以下规则
 # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
 # xxx 你的配置写在这里
}

location = / {
 # 精确匹配 / ,后面带任何字符串的地址都不符合
}

localtion /api {
 # 匹配任何 /api 开头的URL,包括 /api 后面任意的, 比如 /api/getList
 # 匹配符合以后,还要继续往下搜索
 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
}

localtion ~ /api/abc {
 # 匹配任何 /api/abc 开头的URL,包括 /api/abc 后面任意的, 比如 /api/abc/getList
 # 匹配符合以后,还要继续往下搜索
 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
}
以/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到
=开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配

 

### 配置 Nginx 实现资源共享 (CORS) 为了使 Nginx 支持请求,在 HTTP 响应头中加入特定的 CORS 头部字段是必要的。这可以通过修改 Nginx 的配置文件来完成。 #### 修改 Nginx 配置 在 `nginx.conf` 文件中的适当位置添加如下所示的配置片段: ```nginx location / { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { return 204; } } ``` 上述代码实现了基本的 CORS 设置,其中包含了允许任何来源(`*`)发起 GET、POST 或者 OPTIONS 请求,并指定了可接受的头部信息[^1]。 对于更严格的安全控制,建议指定确切的名而不是使用通配符(*)作为 Access-Control-Allow-Origin 的值: ```nginx add_header 'Access-Control-Allow-Origin' 'https://example.com'; ``` 此外,当处理预检请求(Preflight Request)时,即 OPTIONS 方法,返回状态码 204 表明该请求已被成功接收并无需发送回响应体[^2]。 #### 完整实例展示 下面是一个完整的 Nginx 虚拟主机配置例子,展示了如何针对某个路径设置 CORS 策略: ```nginx server { listen 80; server_name localhost; location /api/ { add_header 'Access-Control-Allow-Origin' 'https://client.example.com'; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; # 对于预检请求直接回应而不转交给后端应用 if ($request_method = 'OPTIONS') { return 204; } proxy_pass http://backend_service/; } } ``` 此配置使得 `/api/` 下的所有 API 接口仅能被来自 https://client.example.com 的页面调用,并支持多种HTTP动词以及自定义头部信息[^3]。 #### 测试配置有效性 更改完成后记得测试新配置的有效性和语法正确性: ```bash sudo nginx -t ``` 如果一切正常,则重新加载 Nginx 服务以应用新的配置变更: ```bash sudo systemctl reload nginx ``` 这样就完成了基于 Nginx 的简单 CORS 配置过程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值