【问题标题】:i can't enable CORS in nginx我无法在 nginx 中启用 CORS
【发布时间】:2020-11-19 22:01:18
【问题描述】:

我无法在我的 API Gateway 实例上启用 CORS,它看起来是这样的: 一切都安装在 ubuntu 20.04 下的 nginx 服务器上。

  1. React 字体端:https://example.com -nginx
server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    root /home/ubuntu/front;
    index index.html index.htm;

    location ~* \.(?:manifest|appcache|html?|xml|json)$ {
      expires -1;
      # access_log logs/static.log; # I don't usually include a static log
    }

    location ~* \.(?:css|js)$ {
      try_files $uri =404;
      expires 1y;
      access_log off;
      add_header Cache-Control "public";
    }

    # Any route containing a file extension (e.g. /devicesfile.js)
    location ~ ^.+\..+$ {
      try_files $uri =404;
    }

    # Any route that doesn't have a file extension (e.g. /devices)
    location / {
        try_files $uri $uri/ /index.html;
    }

    return 301 https://example.com$request_uri;

}


server {

    listen 443 ssl; # managed by Certbot
    listen [::]:443 ssl;
    ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem; # managed by Certbot


    server_name example.com www.example.com;

    root /home/ubuntu/front;
    index index.html index.htm;

    location ~* \.(?:manifest|appcache|html?|xml|json)$ {
      expires -1;
      # access_log logs/static.log; # I don't usually include a static log
    }

    location ~* \.(?:css|js)$ {
      try_files $uri =404;
      expires 1y;
      access_log off;
      add_header Cache-Control "public";
    }

    # Any route containing a file extension (e.g. /devicesfile.js)
    location ~ ^.+\..+$ {
      try_files $uri =404;
    }

    # Any route that doesn't have a file extension (e.g. /devices)
    location / {
        try_files $uri $uri/ /index.html;
    }

}

  1. 快递后台:https://api.mydomain.com
    • 代码添加到js
app.use(cors());

' - nginx

upstream api {
        server xx.xx.xx.xx;
}


server {
    server_name api.mydomain.com;
    location / {

        proxy_pass http://127.0.0.1:4001;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;


        proxy_connect_timeout 30;
        proxy_send_timeout 30;


    }


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/xx.xxxx.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/livexx.xxxx.com/privkey.pem; # managed by Certbot

}

  1. 迷你对象存储:https://minio.example.com
server {
 listen 443 ssl;
 server_name minio.example.com;

 ssl_certificate           /etc/minio/certs/public.crt;
 ssl_certificate_key       /etc/minio/certs/private.key;

 # To allow special characters in headers
 ignore_invalid_headers off;
 # Allow any size file to be uploaded.
 # Set to a value such as 1000m; to restrict file size to a specific value
 client_max_body_size 1000m;
 # To disable buffering
 proxy_buffering off;

 location / {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Host $http_host;

   proxy_connect_timeout 300;
   # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
   proxy_http_version 1.1;
   proxy_set_header Connection "";
   chunked_transfer_encoding off;

   proxy_pass https://localhost:9000; 

   # Ajouter les headers de contrôle d'accès CORS
   #add_header 'Access-Control-Allow-Origin' '*' always;
   #add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
   #add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept' always;
   #add_header 'Access-Control-Allow-Credentials' 'true' always;


 }

我可以设法从 example.com 向 api.example.com 发出 http 请求,而不会出现 cors 错误 但是当我向 api.example.com 发送 http 请求 fomr example.com 然后从 api.example.com 到 mini.example.com(或任何 api)时,我有 cors 错误“在@访问 xmlhttprequest来自 https://example.com 的 987654324@ 已被 cors 策略阻止:请求的资源上不存在“access-control-allow-origin”标头

【问题讨论】:

  • 您是否尝试在响应console.log(res.getHeaders()) 请求之前记录标头以确保存在 * 'access-control-allow-origin'* 标头。您的代码中路由处理程序上方的代码中是否还有这一行 app.use(cors());
  • res.getHeader('Access-Control-Allow-Origin') = '*'

标签: node.js reactjs nginx cors minio


【解决方案1】:
proxy_set_header Access-Control-Allow-Origin "*";

解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2019-06-27
    • 2016-12-20
    • 2015-02-19
    • 1970-01-01
    • 2017-07-09
    • 2018-09-13
    • 2019-06-13
    相关资源
    最近更新 更多