nginx上Cloudflare、ExpressJS和ReactJS的CORS错误

nginx上Cloudflare、ExpressJS和ReactJS的CORS错误,reactjs,express,nginx,cors,cloudflare,Reactjs,Express,Nginx,Cors,Cloudflare,在通过Cloudflare切换到域名后,我一直无法克服CORS错误。我似乎无法让后端api像https://www.my_domain.com/api 我所做的: 已应用nginx解决方案并重新启动nginx 在cloudflare中,我使用三个A记录更新了DNS管理:*、www和 在cloudflare中,始终使用HTTPS设置为打开 ExpressJS已启用corslibrary 下面应用的nginx解决方案… 注意:我已在端口3000上运行React。在浏览器中访问域名时显示React

在通过Cloudflare切换到域名后,我一直无法克服CORS错误。我似乎无法让后端api像
https://www.my_domain.com/api

我所做的:

  • 已应用nginx解决方案并重新启动nginx
  • 在cloudflare中,我使用三个A记录更新了DNS管理:*、www和
  • 在cloudflare中,始终使用HTTPS设置为打开
  • ExpressJS已启用
    cors
    library
    • 下面应用的nginx解决方案… 注意:我已在端口3000上运行React。在浏览器中访问域名时显示React
    • 我用来测试和重启nginx的命令:
    sudo nginx-t&&sudo systemctl重新启动nginx

    • 在cloudflare DNS管理中…
    • 我的后端.env文件:
    • 我的前端react.env文件
    我还注意到,在浏览器控制台中,它显示请求以
    http://:8000/api
    的形式发送,而不是像预期的那样以
    https:/api
    的形式发送

    另外,我今天刚刚更改了域名

    尽管上面有这些设置,但当我尝试登录时,我看到由于cors错误,请求被阻止


    什么可能导致cors错误?

    遵循本教程

    结果发现了这些指令

    在我的linux终端上运行这些命令(来自certbot指令)

    sudo snap install core; sudo snap refresh core; sudo apt-get remove certbot; sudo snap install --classic certbot; sudo ln -s /snap/bin/certbot /usr/bin/certbot; sudo certbot --nginx
    
    此时出现了输入域名的提示。所以,我像这样进入我的域名

    my_domain.com www.my_domain.com

    按照说明,我随后测试了续费(您需要每年续费一次,但这些将被放入cron中,以便*希望自动续费)

    sudo certbot续订--试运行

    域api工作正常,但react应用程序尚未显示,这表明Cloudflare中可能存在一些问题

    之后,我让我的网站在浏览器中显示如下

  • 登录到Cloudflare.com
  • 转到域的SSL/TLS加密设置
  • 将其从“灵活”更改为“完全”
  • 单击边缘证书
  • 关闭HTTPS并始终打开

  • 完成上述所有操作后,域中显示了我的react应用程序,该应用程序完全使用api,没有CORS错误。

    浏览器在devtools控制台中记录的确切错误消息是什么?
    A record, Name: *, Content: <server_ip>, TTL: Auto, Proxy status: DNS only
    A record, Name: <my_domain_name>, Content: <server_ip>, TTL: Auto, Proxy status: Proxied
    A record, Name: www, Content: <server_ip>, TTL: Auto, Proxy status: Proxied
    
    const express = require("express");
    const cors = require("cors");
    require('dotenv').config()
    
    const app = express();
    
    if (process.env.NODE_ENV === 'production') {
        app.use(cors({ origin: `${process.env.CLIENT_URL}` }));
    }
    
    NODE_ENV=production
    CLIENT_URL=http://my_domain.com
    
    CLIENT_URL=/api
    
    sudo snap install core; sudo snap refresh core; sudo apt-get remove certbot; sudo snap install --classic certbot; sudo ln -s /snap/bin/certbot /usr/bin/certbot; sudo certbot --nginx