Nginx -- 错误 400:不允许 Origin 发出此请求

时间:2021-01-14 20:01:03

标签: nginx cors nginx-reverse-proxy nginx-config

我正在使用 Nginx 为 Meil​​iSearch 设置反向代理。从源发送 POST 请求时,出现 400: Origin is not allowed to make this request 错误。但是,如果请求没有来源,则一切正常。

有趣的是,无论源是否存在,响应还包括不同的标头。

请求/响应

工作请求

<头>
标题 价值
内容类型 应用程序/json
X-Meili-API-Key asfasdfasdfasdfsafsdfasdfadsfsadff

工作响应

<头>
标题 价值
服务器 nginx/1.18.0
日期 2021 年 1 月 14 日星期四 19:49:02 GMT
内容类型 应用程序/json
内容长度 252
连接 保持活力
访问控制允许来源 *

如您所见,Access-Control-Allow-Origin 应该是一个通配符。

请求失败

<头>
标题 价值
内容类型 应用程序/json
X-Meili-API-Key asfasdfasdfasdfsafsdfasdfadsfsadff
起源 https://example.com

失败响应

<头>
标题 价值
服务器 nginx/1.18.0
日期 2021 年 1 月 14 日星期四 19:49:02 GMT
内容长度 252
连接 保持活力

Access-Control-Allow-Origin 现在不见了。

配置

这是完整的配置文件。

server {
server_name example.com;
location / {
    if ($request_method ~* "(GET|POST)") {
      add_header "Access-Control-Allow-Origin" *;
    }

    if ($request_method = OPTIONS ) {
      add_header 'Access-Control-Max-Age' 1728000;
      add_header "Access-Control-Allow-Origin"  *;
      add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
      add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept, X-Meili-API-Key";
      return 204;
    }

    proxy_pass  http://127.0.0.1:7700;
}

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


listen 80 default_server;
listen [::]:80 default_server;
server_name example.com;

有什么想法吗?

0 个答案:

没有答案