bounty明天到期。此问题的答案有资格获得+50声望奖励。Priyank正在寻找一个规范答案。
我已经在Heroku的基础设施上设置了NGINX来管理我的商店的域Map,绕过了Shopify的内置域配置。
- 以下是我的NGINX配置概述:*
upstream app_server {
server unix:/tmp/nginx.socket fail_timeout=0;
}
server {
listen <%= ENV["PORT"] %>;
server_name _;
keepalive_timeout 5;
port_in_redirect off;
location / {
proxy_pass https://stagingstore.myshopify.com;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
# proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ ^/(search|category)/? {
proxy_pass http://app_server;
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;
}
}
我已经配置了NGINX以特定的方式处理传入的请求。搜索和分类页面的请求被定向到单独的后端设置,而所有其他页面都由Shopify本身提供服务。
我已经成功地管理了整个流程,从添加项目到购物车,以达到结帐过程,使用我的自定义域。
但是,* 我遇到了Shopify自动重定向到感谢页面的问题。Shopify没有使用我的自定义域,而是重定向到一个感谢页面,其中包含“myshopify”域的生成商店名称。* 显示的页面无效。
有趣的是,如果我手动将“myshopify”域更改为URL中的自定义域并刷新页面,它会根据需要加载适当的感谢页面。我花了几天时间试验不同的配置,但还没有找到解决方案。
如果有人能提供解决这个问题的指导,我将不胜感激。
1条答案
按热度按时间bqf10yzr1#
Shopify的重定向使用原始域,在这种情况下是“
myshopify
”域,而不是使用通过NGINX反向代理设置管理的自定义域。在您的NGINX configuration中,在第一个
location
块下有一个注解掉的行# proxy_set_header Host $host;
。取消注解这一行可能有助于确保Host
标头携带自定义域,这反过来可能会影响Shopify的重定向逻辑。配置文件可以是
/etc/nginx/nginx.conf
或nginx -V 2>&1 | grep -o '\--conf-path=[^ ]*' | cut -d= -f2
的输出给予一个像“
421 Misdirected Request - CloudFlare
“这样的错误,我找不到处理这个错误的方法。它更有可能抛出一个错误,因为我正在做
proxy_pass
到stagingstore.myshopify.com
,可能是从我的主域到他们的内部域的相关SSL验证问题,我猜。当您将
Host
标头更改为自定义域时,Cloudflare可能无法将请求识别为合法请求,因此出现错误。检查Cloudflare中是否有一个选项可以将您的自定义域或IP列入白名单,这可能有助于解决“错误请求”错误。
并检查SSL证书是否为您的自定义域和
stagingstore.myshopify.com
的proxy_pass正确配置。(从信誉良好的证书颁发机构(CA)获取自定义域的SSL证书。如果您使用Cloudflare,他们会提供SSL证书作为其服务的一部分)此外,查看Cloudflare设置,看看是否有任何可以调整的配置,以允许您的设置按预期工作。这可能包括与SSL、域验证或重定向相关的设置。
另一种方法是在NGINX配置中显式地处理重定向,通过捕获重定向响应并重写URL以将'
myshopify
'域替换为您的自定义域,然后将其转发到客户端。您通常会使用
proxy_redirect
指令。此指令允许您修改来自代理服务器的响应中的Location
和Refresh
头字段。但是Shopify的行为可能与这种重定向处理不完全兼容。你可以测试一下。proxy_redirect
指令用于在来自代理服务器(Shopify)的响应中重写Location
标头:proxy_redirect
的第一个参数是匹配要重写的URL的正则表达式。这将捕获来自Shopify的任何重定向响应,其中包括“
myshopify
”域,将其替换为您的自定义域,然后将修改后的重定向转发到客户端。由于Shopify重定向到他们的内部商店子域,我没有将请求控制权放在NGINX的首位,所以我无法在这方面进行任何实验。
因此,网络设置将是:
1.客户端浏览器向NGINX代理服务器发起请求。
stagingstore.myshopify.com
)发出重定向响应。1.重定向响应被发送回NGINX代理服务器。
1.客户端浏览器接收重定向响应并遵循重定向。
1.客户端浏览器直接向Shopify子域发出新请求,绕过NGINX代理服务器(由“X”表示)。
在第6步,您将失去对请求的控制,因为它不再通过NGINX代理服务器进行路由,因此无法应用任何NGINX配置更改来处理重定向。