Shopify:当使用NGINX作为反向代理时,您的页面不会重定向到实际域名

e5njpo68  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(249)

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中的自定义域并刷新页面,它会根据需要加载适当的感谢页面。我花了几天时间试验不同的配置,但还没有找到解决方案。
如果有人能提供解决这个问题的指导,我将不胜感激。

bqf10yzr

bqf10yzr1#

Shopify的重定向使用原始域,在这种情况下是“myshopify”域,而不是使用通过NGINX反向代理设置管理的自定义域。
在您的NGINX configuration中,在第一个location块下有一个注解掉的行# proxy_set_header Host $host;。取消注解这一行可能有助于确保Host标头携带自定义域,这反过来可能会影响Shopify的重定向逻辑。

proxy_set_header Host $host;

配置文件可以是/etc/nginx/nginx.confnginx -V 2>&1 | grep -o '\--conf-path=[^ ]*' | cut -d= -f2的输出
给予一个像“421 Misdirected Request - CloudFlare“这样的错误,我找不到处理这个错误的方法。
它更有可能抛出一个错误,因为我正在做proxy_passstagingstore.myshopify.com,可能是从我的主域到他们的内部域的相关SSL验证问题,我猜。
当您将Host标头更改为自定义域时,Cloudflare可能无法将请求识别为合法请求,因此出现错误。
检查Cloudflare中是否有一个选项可以将您的自定义域或IP列入白名单,这可能有助于解决“错误请求”错误。
并检查SSL证书是否为您的自定义域和stagingstore.myshopify.com的proxy_pass正确配置。(从信誉良好的证书颁发机构(CA)获取自定义域的SSL证书。如果您使用Cloudflare,他们会提供SSL证书作为其服务的一部分)
此外,查看Cloudflare设置,看看是否有任何可以调整的配置,以允许您的设置按预期工作。这可能包括与SSL、域验证或重定向相关的设置。
另一种方法是在NGINX配置中显式地处理重定向,通过捕获重定向响应并重写URL以将' myshopify '域替换为您的自定义域,然后将其转发到客户端。
您通常会使用proxy_redirect指令。此指令允许您修改来自代理服务器的响应中的LocationRefresh头字段。但是Shopify的行为可能与这种重定向处理不完全兼容。你可以测试一下。

server {
    ...

    location / {
        proxy_pass https://stagingstore.myshopify.com;
        ...

        proxy_redirect ~^https://stagingstore.myshopify.com/(.*)$ https://yourcustomdomain.com/$1;
    }

    ...
}

proxy_redirect指令用于在来自代理服务器(Shopify)的响应中重写Location标头:

  • proxy_redirect的第一个参数是匹配要重写的URL的正则表达式。
  • 第二个参数是匹配的URL将被重写到的URL。在这种情况下,它会重写域,同时保持URL路径的其余部分不变。

这将捕获来自Shopify的任何重定向响应,其中包括“myshopify”域,将其替换为您的自定义域,然后将修改后的重定向转发到客户端。
由于Shopify重定向到他们的内部商店子域,我没有将请求控制权放在NGINX的首位,所以我无法在这方面进行任何实验。
因此,网络设置将是:

Client Browser       NGINX Proxy Server       Shopify Server
       |                       |                         |
       | 1. Request            |                         |
       |---------------------->|                         |
       |                       | 2. Proxy Request        |
       |                       |------------------------>|
       |                       |                         | 3. Process Request
       |                       |                         |    and Issue Redirect
       |                       |                         |    to Shopify Subdomain
       |                       |                         |
       |                       | 4. Redirect Response    |
       |                       |<------------------------|
       | 5. Follow Redirect    |                         |
       |-----------------------|                         |
       |                       |                         |
       | 6. Request to         |                         |
       |    Shopify Subdomain  |                         |
       |-----------------------X                         |
       |                       |                         |
       |                       |                         |
       | 7. Response from      |                         |
       |    Shopify Subdomain  |                         |
       |<----------------------X                         |

1.客户端浏览器向NGINX代理服务器发起请求。

  1. NGINX代理服务器将请求转发到Shopify服务器。
  2. Shopify服务器处理请求并向其内部子域(例如stagingstore.myshopify.com)发出重定向响应。
    1.重定向响应被发送回NGINX代理服务器。
    1.客户端浏览器接收重定向响应并遵循重定向。
    1.客户端浏览器直接向Shopify子域发出新请求,绕过NGINX代理服务器(由“X”表示)。
  3. Shopify子域处理请求并将响应直接发送回客户端浏览器,绕过NGINX代理服务器(由“X”表示)。
    在第6步,您将失去对请求的控制,因为它不再通过NGINX代理服务器进行路由,因此无法应用任何NGINX配置更改来处理重定向。

相关问题