<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Michael,<br>
      <br>
      You can use rewrite. Just catch the host part:<br>
      >rewrite /image_preview/<a class="moz-txt-link-freetext" href="https://(">https://(</a>?<my_host>[^ :/]/(.*)
      /$1;<br>
      >proxy_pass <a class="moz-txt-link-freetext" href="https://$my_host">https://$my_host</a><br>
      rewrite will encode the URL back again.<br>
      <br>
      On 26.07.2018 20:18, Michael Kovacs wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAPp5r6J3=vOeutx03NXt+sMY=mUXFgbicQieLuAfqr4KjsKPRQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <div dir="ltr"><span
          style="font-size:12.8px;font-variant-ligatures:normal">Greetings
          Nginx mailing list!</span>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">I'm
          using nginx as an image proxy and am using proxy_pass to fetch
          the image. Unfortunately if that image URL has a space in it
          the proxy_pass fails. It works fine with any other image.</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">example
          successful URL:</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">/image_preview/<a
            href="https://somedomain.com/image.jpg" target="_blank"
            moz-do-not-send="true">https://somedom<wbr>ain.com/image.jpg</a></div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">
          <div style="font-size:small">example failedl URL:</div>
          <br
class="gmail-m_2039883881470043549gmail-m_-6818797042467442952gmail-m_830913135982155706gmail-m_-4291920481501457916gmail-m_7497130035442823834gmail-m_-3591132416970481713gmail-m_4882708909491858236gmail-m_1652576504091731899gmail-Apple-interchange-newline">
          <div style="font-size:small">/image_preview/<a
              href="https://somedomain.com/My%20Images/image.jpg"
              target="_blank" moz-do-not-send="true">https://somedom<wbr>ain.com/My%20Images/image.jpg</a></div>
          <div style="font-size:small"><br>
          </div>
          <div style="font-size:small">^^</div>
          <div style="font-size:small">Nginx is URL decoding the url in
            the path and putting the space back in.</div>
          <br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">Here's
          my nginx.conf</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">
          <div>        # redirect thumbnail url to real world</div>
          <div>        location ~ ^/image_preview/(.*?)$  {</div>
          <div>            resolver ${HOST};</div>
          <div><br>
          </div>
          <div>            set $fallback_image_url
            ${FALLBACK_IMAGE_URL};</div>
          <div>            set $image_url $1;</div>
          <div><br>
          </div>
          <div>            if ($args) {</div>
          <div>                set $image_url $1?$args;</div>
          <div>            }</div>
          <div><br>
          </div>
          <div>            proxy_intercept_errors on;</div>
          <div>            error_page 301 302 303 305 306 307 308
            $fallback_image_url;</div>
          <div>            error_page 400 401 402 403 404 405 406 409
            408 409 410 411 412 413 414 415 416 417 $fallback_image_url;</div>
          <div>            error_page 500 501 502 503 504 505 506 507
            508 509 510 511 520 522 598 599 $fallback_image_url;</div>
          <div><br>
          </div>
          <div>            proxy_connect_timeout 2s;</div>
          <div>            proxy_read_timeout 4s;</div>
          <div>            proxy_pass_request_headers off;</div>
          <div>            proxy_buffering off;</div>
          <div>            proxy_redirect off;</div>
          <div><br>
          </div>
          <div>            proxy_pass $image_url;</div>
          <div>            proxy_set_header If-None-Match
            $http_if_none_match;</div>
          <div>            proxy_set_header If-Modified-Since
            $http_if_modified_since;</div>
          <div>        }</div>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">I've
          scoured the docs, stackoverflow, and the internet in general
          but don't see how to address this problem. As I see it I have
          two options:</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">1)
          Find a way to make nginx not URL decode the param URL (doesn't
          seem possible)</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">2)
          The original $request_uri contains the URL encoded URL. Find a
          way to create a rewrite rule to strip off the prefix and
          proxy_pass to the resulting URL. I haven't found a way to do
          something liek that as it appears rewrite rules will only
          operate on the URI in context and that URI appears to be
          decoded.</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">I've
          found an entire chapter in "Nginx Troubleshooting" on creating
          a proxy for external links. But that example also appears to
          fall vicitm to this same problem.</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">Any
          help/pointers would be appreciated as I am pretty well stuck
          at this point on an  approach that might work.</div>
        <div style="font-size:12.8px;font-variant-ligatures:normal"><br>
        </div>
        <div style="font-size:12.8px;font-variant-ligatures:normal">Thanks,</div>
        <div class="gmail_signature">
          <div dir="ltr">-Michael<br>
          </div>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
nginx mailing list
<a class="moz-txt-link-abbreviated" href="mailto:nginx@nginx.org">nginx@nginx.org</a>
<a class="moz-txt-link-freetext" href="http://mailman.nginx.org/mailman/listinfo/nginx">http://mailman.nginx.org/mailman/listinfo/nginx</a></pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>