我最近修改了我的 nginx 服务器,将所有
www.mysite
请求重定向到 https://mysite
问题是,当我这样做时,我设置的 stripe webhook 现在失败并出现 301 重定向错误。如何更改 nginx 服务器以仅重定向来自我的域的请求? (或者至少我认为这就是解决方案,我是前端人员)。
这是我的服务器。
server {
listen 443;
server_name mysite.com;
root /var/www/mysite.com/app/mysite;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.crt;
ssl_certificate_key /etc/nginx/ssl/mykey.key;
#enables SSLv3/TLSv1, but not SSLv2 which is weak and should no longer be used.
ssl_protocols SSLv3 TLSv1;
#Disables all weak ciphers
ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
location / {
proxy_pass http://127.0.0.1:3000/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name www.mysite.com;
return 301 https://mysite.com$request_uri;
}
正如 mpcabd 提到的,出于安全原因,Stripe webhooks 将不会遵循重定向。正如他还提到的,虽然您可以按 IP 进行过滤,但这是一场永无休止的战斗(Stripe 之前曾表示他们确实打算最终停止发布 IP 列表)。
更简单、更好的一劳永逸解决方案:
在 Stripe 仪表板中,重新配置您的 Webhook 以使用 HTTPS。
嘭。完成。
你可以做的就是从重定向中排除 Stripe,我认为出于安全原因,他们的钩子不会遵循重定向,这是公平的,所以尝试查看他们使用的 IP,并确保如果
$http_x_real_ip
则不会重定向或 $remote_addr
来自 Strip 的 IP 列表。
但正如 Stripe here 明确指出的:
...因为我们偶尔需要调整这个IP列表 地址没有任何提前通知,我们强烈建议不要 使用基于 IP 的访问控制来保护您的 Webhook 端点。 相反,我们建议通过 SSL 为您的 Webhook 端点提供服务, 在 webhook URL 中嵌入只有自己知道的秘密标识符 您和 Stripe,和/或通过我们的 API 中的 ID 检索事件...
所以我的答案是检查请求的位置是否是 Stripe webhook,然后在不重定向的情况下提供服务,否则重定向请求。
请检查中间证书与您签名的 SSL 证书。
参考: https://futurestud.io/tutorials/how-to-configure-nginx-ssl-certifcate-chain