我已经使用 Astro、Django 和 Nginx 部署了一个 Web 应用程序。我正在使用 Stripe Checkout 测试与 Stripe 的集成。
所以我设置了一个html表单:
<form method="post" action=`${baseDomain}users/signup`>
...
</form>
其中,如果处于开发模式,则为
baseDomain = http://localhost:8000/api/
;如果处于生产模式,则为 baseDomain = https://example.com/api/
。
/users/signup
端点由一个视图处理,该视图最终调用一个函数来重定向到条带,类似于Stripe Checkout中的示例。
在我的本地环境中测试它时,效果很好,我可以访问测试结账表单,支付产品费用,然后我会被重定向到我的自定义成功页面。
这是我的浏览器 DevTools 中“网络”选项卡的屏幕截图:
但是在生产中我收到以下错误:
即使 Stripe Checkout 页面的状态正常,浏览器也会向表单端点发出 GET 请求,当然会导致方法不允许错误。
我注意到的是,请求类型从document变成了fetch,并且发起者链也不完全相同。
我尝试重定向到“https://google.com”,但收到 CORS 错误。这让我认为“fetch”类型导致了重定向中的错误,但我不明白为什么这种情况发生在生产中而不是在我的本地环境中。而且,Astro是以静态模式部署的。
这是我的 nginx 配置:
root /myproject/frontend/dist;
# Add index.php to the list if you are using PHP
index index.html;
server_name example.com; # managed by Certbot
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /api {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
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;
}