How to make an existing caching Nginx proxy use another proxy to bypass a firewall?How to set up Nginx as a caching reverse proxy?nginx reverse proxyNginx proxy_pass reverse proxying behind corporate firewallLoad Balancer and Proxy for Meteor not passing to 127.0.0.1 - Too Many Redirects?How to match string in URL using NginxSame location with different proxy urls nginxnginx proxy caching not workingCan't get nginx caching to works over https reverse proxyWhy does Nginx not just forward the POST request instead of 302Nginx caching reverse proxy with URL rewrite

What is wrong with this proof that symmetric matrices commute?

Cycle through MeshStyle directives in ListLinePlot

Someone whose aspirations exceed abilities or means

How to signal to my players that the following part is supposed to be played on fast forward?

Why would future John risk sending back a T-800 to save his younger self?

Is using haveibeenpwned to validate password strength rational?

Fixing obscure 8080 emulator bug?

What do abbreviations in movie scripts stand for?

Overlapping String-Blocks

Is the term 'open source' a trademark?

A curious prime counting approximation or just data overfitting?

Taxi Services at Didcot

How to hide an urban landmark?

Are there any important biographies of nobodies?

How to return a security deposit to a tenant

Second (easy access) account in case my bank screws up

Is it legal for a bar bouncer to conficaste a fake ID

What's up with this leaf?

What is the highest possible permanent AC at character creation?

How to tell your grandparent to not come to fetch you with their car?

Would the US government be able to hold control if all electronics were disabled for an indefinite amount of time?

Mobile App Appraisal

System.StringException: Unexpected end of expression

Recommended tools for graphs and charts



How to make an existing caching Nginx proxy use another proxy to bypass a firewall?


How to set up Nginx as a caching reverse proxy?nginx reverse proxyNginx proxy_pass reverse proxying behind corporate firewallLoad Balancer and Proxy for Meteor not passing to 127.0.0.1 - Too Many Redirects?How to match string in URL using NginxSame location with different proxy urls nginxnginx proxy caching not workingCan't get nginx caching to works over https reverse proxyWhy does Nginx not just forward the POST request instead of 302Nginx caching reverse proxy with URL rewrite






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








4















My question is about using Nginx as a proxy behind another proxy. (Somewhat confusing.)



I want to set up Nginx so it acts as a caching proxy server to an npm mirror. Here is the link:
http://eng.yammer.com/a-private-npm-cache/



On my local machine, which is not restricted by a firewall, the following configuration works fine:



proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
inactive=365d;
proxy_temp_path /var/cache/npm/tmp;

server
listen 80;
server_name classen.abc.lan;
location /
proxy_pass http://registry.npmjs.org/;
proxy_cache npm;
proxy_cache_valid 200 302 365d;
proxy_cache_valid 404 1m;
sub_filter 'registry.npmjs.org' 'classen.abc.lan';
sub_filter_once off;
sub_filter_types application/json;




Now I want to apply it to a server that is behind an additional firewall. In the logs, I can confirm that it accesses the correct upstream IP, but the request fails because of the internal firewall.



We have one internal proxy, which I can use to bypass the firewall, for example:



$ curl http://registry.npmjs.org
curl: (7) couldn't connect to host
$ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
... succeeds ...


This trick does not work with Nginx, as it ignores the http_proxy environment variable. After reading the documentation, I still could not figure out how to modify the configuration, so that it can use the proxy internally.



Is it possible to combine both solutions? It is important that the caching still works, otherwise, you can just use the external mirror registry.npmjs.org directly.



Maybe, Nginx should use the internal proxy (proxy.abc.lan) as proxy_pass, but then how does the internal proxy know that the request should be sent to the external npm mirror (http://registry.npmjs.org)?



Update to Lukas answer



I tried Lukas solution:



rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
proxy_pass http://proxy.abc.lan:1234;


The logs show that the URL is rewritten but it results in a redirect (triggered by curl classen.abc.lan/test-url):



2014/03/24 11:31:16 [notice] 13827#0: *2 rewritten redirect: "http://registry.npmjs.org/test-url", client: 172.18.40.33, server: classen.abc.lan, request: "GET /test-url HTTP/1.1", host: "classen.abc.lan"


The result of the curl call is not the expected JSON string from http://registry.npmjs.org but a html page generated by Nginx:



$ curl classen.abc.lan/test-url
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.4.7</center>
</body>
</html>









share|improve this question






























    4















    My question is about using Nginx as a proxy behind another proxy. (Somewhat confusing.)



    I want to set up Nginx so it acts as a caching proxy server to an npm mirror. Here is the link:
    http://eng.yammer.com/a-private-npm-cache/



    On my local machine, which is not restricted by a firewall, the following configuration works fine:



    proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
    inactive=365d;
    proxy_temp_path /var/cache/npm/tmp;

    server
    listen 80;
    server_name classen.abc.lan;
    location /
    proxy_pass http://registry.npmjs.org/;
    proxy_cache npm;
    proxy_cache_valid 200 302 365d;
    proxy_cache_valid 404 1m;
    sub_filter 'registry.npmjs.org' 'classen.abc.lan';
    sub_filter_once off;
    sub_filter_types application/json;




    Now I want to apply it to a server that is behind an additional firewall. In the logs, I can confirm that it accesses the correct upstream IP, but the request fails because of the internal firewall.



    We have one internal proxy, which I can use to bypass the firewall, for example:



    $ curl http://registry.npmjs.org
    curl: (7) couldn't connect to host
    $ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
    ... succeeds ...


    This trick does not work with Nginx, as it ignores the http_proxy environment variable. After reading the documentation, I still could not figure out how to modify the configuration, so that it can use the proxy internally.



    Is it possible to combine both solutions? It is important that the caching still works, otherwise, you can just use the external mirror registry.npmjs.org directly.



    Maybe, Nginx should use the internal proxy (proxy.abc.lan) as proxy_pass, but then how does the internal proxy know that the request should be sent to the external npm mirror (http://registry.npmjs.org)?



    Update to Lukas answer



    I tried Lukas solution:



    rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
    proxy_pass http://proxy.abc.lan:1234;


    The logs show that the URL is rewritten but it results in a redirect (triggered by curl classen.abc.lan/test-url):



    2014/03/24 11:31:16 [notice] 13827#0: *2 rewritten redirect: "http://registry.npmjs.org/test-url", client: 172.18.40.33, server: classen.abc.lan, request: "GET /test-url HTTP/1.1", host: "classen.abc.lan"


    The result of the curl call is not the expected JSON string from http://registry.npmjs.org but a html page generated by Nginx:



    $ curl classen.abc.lan/test-url
    <html>
    <head><title>302 Found</title></head>
    <body bgcolor="white">
    <center><h1>302 Found</h1></center>
    <hr><center>nginx/1.4.7</center>
    </body>
    </html>









    share|improve this question


























      4












      4








      4


      1






      My question is about using Nginx as a proxy behind another proxy. (Somewhat confusing.)



      I want to set up Nginx so it acts as a caching proxy server to an npm mirror. Here is the link:
      http://eng.yammer.com/a-private-npm-cache/



      On my local machine, which is not restricted by a firewall, the following configuration works fine:



      proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
      inactive=365d;
      proxy_temp_path /var/cache/npm/tmp;

      server
      listen 80;
      server_name classen.abc.lan;
      location /
      proxy_pass http://registry.npmjs.org/;
      proxy_cache npm;
      proxy_cache_valid 200 302 365d;
      proxy_cache_valid 404 1m;
      sub_filter 'registry.npmjs.org' 'classen.abc.lan';
      sub_filter_once off;
      sub_filter_types application/json;




      Now I want to apply it to a server that is behind an additional firewall. In the logs, I can confirm that it accesses the correct upstream IP, but the request fails because of the internal firewall.



      We have one internal proxy, which I can use to bypass the firewall, for example:



      $ curl http://registry.npmjs.org
      curl: (7) couldn't connect to host
      $ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
      ... succeeds ...


      This trick does not work with Nginx, as it ignores the http_proxy environment variable. After reading the documentation, I still could not figure out how to modify the configuration, so that it can use the proxy internally.



      Is it possible to combine both solutions? It is important that the caching still works, otherwise, you can just use the external mirror registry.npmjs.org directly.



      Maybe, Nginx should use the internal proxy (proxy.abc.lan) as proxy_pass, but then how does the internal proxy know that the request should be sent to the external npm mirror (http://registry.npmjs.org)?



      Update to Lukas answer



      I tried Lukas solution:



      rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
      proxy_pass http://proxy.abc.lan:1234;


      The logs show that the URL is rewritten but it results in a redirect (triggered by curl classen.abc.lan/test-url):



      2014/03/24 11:31:16 [notice] 13827#0: *2 rewritten redirect: "http://registry.npmjs.org/test-url", client: 172.18.40.33, server: classen.abc.lan, request: "GET /test-url HTTP/1.1", host: "classen.abc.lan"


      The result of the curl call is not the expected JSON string from http://registry.npmjs.org but a html page generated by Nginx:



      $ curl classen.abc.lan/test-url
      <html>
      <head><title>302 Found</title></head>
      <body bgcolor="white">
      <center><h1>302 Found</h1></center>
      <hr><center>nginx/1.4.7</center>
      </body>
      </html>









      share|improve this question
















      My question is about using Nginx as a proxy behind another proxy. (Somewhat confusing.)



      I want to set up Nginx so it acts as a caching proxy server to an npm mirror. Here is the link:
      http://eng.yammer.com/a-private-npm-cache/



      On my local machine, which is not restricted by a firewall, the following configuration works fine:



      proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
      inactive=365d;
      proxy_temp_path /var/cache/npm/tmp;

      server
      listen 80;
      server_name classen.abc.lan;
      location /
      proxy_pass http://registry.npmjs.org/;
      proxy_cache npm;
      proxy_cache_valid 200 302 365d;
      proxy_cache_valid 404 1m;
      sub_filter 'registry.npmjs.org' 'classen.abc.lan';
      sub_filter_once off;
      sub_filter_types application/json;




      Now I want to apply it to a server that is behind an additional firewall. In the logs, I can confirm that it accesses the correct upstream IP, but the request fails because of the internal firewall.



      We have one internal proxy, which I can use to bypass the firewall, for example:



      $ curl http://registry.npmjs.org
      curl: (7) couldn't connect to host
      $ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
      ... succeeds ...


      This trick does not work with Nginx, as it ignores the http_proxy environment variable. After reading the documentation, I still could not figure out how to modify the configuration, so that it can use the proxy internally.



      Is it possible to combine both solutions? It is important that the caching still works, otherwise, you can just use the external mirror registry.npmjs.org directly.



      Maybe, Nginx should use the internal proxy (proxy.abc.lan) as proxy_pass, but then how does the internal proxy know that the request should be sent to the external npm mirror (http://registry.npmjs.org)?



      Update to Lukas answer



      I tried Lukas solution:



      rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
      proxy_pass http://proxy.abc.lan:1234;


      The logs show that the URL is rewritten but it results in a redirect (triggered by curl classen.abc.lan/test-url):



      2014/03/24 11:31:16 [notice] 13827#0: *2 rewritten redirect: "http://registry.npmjs.org/test-url", client: 172.18.40.33, server: classen.abc.lan, request: "GET /test-url HTTP/1.1", host: "classen.abc.lan"


      The result of the curl call is not the expected JSON string from http://registry.npmjs.org but a html page generated by Nginx:



      $ curl classen.abc.lan/test-url
      <html>
      <head><title>302 Found</title></head>
      <body bgcolor="white">
      <center><h1>302 Found</h1></center>
      <hr><center>nginx/1.4.7</center>
      </body>
      </html>






      nginx firewall proxy cache






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 24 '14 at 10:41







      Philipp Claßen

















      asked Mar 21 '14 at 18:11









      Philipp ClaßenPhilipp Claßen

      226416




      226416




















          3 Answers
          3






          active

          oldest

          votes


















          4














          The issue with Lukas's solution is HttpRewriteModule , which automatically turns everything with http(s) at the front into a 302.



          If you instead do the rewrite in two stages - the second one 'break' - it should work. e.g.



          rewrite ^(.*)$ "://registry.npmjs.org$1";
          rewrite ^(.*)$ "http$1" break;
          proxy_pass http://proxy.abc.lan:1234;


          I suspect there's a nicer way to do this, but it appears to work.






          share|improve this answer

























          • This really worked!!! I am using nginx as forward proxy behind a corporate proxy. My config: rewrite ^(.*)$ "://$http_host$uri$is_args$args" break; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_pass http://proxy.abc.lan:3128;

            – Prashant Borde
            Oct 1 '16 at 18:30







          • 1





            Should the first rewrite not "break"? Also, I think people would appreciate it if you can mention https proxy is not supported by Nginx.

            – blurrcat
            Oct 11 '17 at 5:40











          • @blurrcat you are right. In addition, it does not support reverse proxy to https website.

            – ipcjs
            Sep 28 '18 at 8:31


















          2














          RFC 2616, Section 5.1.2 states




          The absoluteURI form is REQUIRED when the request is being made to a proxy.
          [...]

          An example Request-Line would be:



           GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1



          So what you are supposed to do is pass the request to the proxy with those modified directives:



          rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
          proxy_pass http://proxy.abc.lan:1234;


          According to the nginx docs, using rewrite ... break; will force nginx to use the rewritten URI (now an absolute URI as the protocol requires) instead of trying to build it from the proxy_pass directive.






          share|improve this answer

























          • Thanks for your answer. Unfortunately, I could not get it to work. Maybe I am missing something. I edited my answer to show what I have tried.

            – Philipp Claßen
            Mar 24 '14 at 10:43


















          0














          I think it may be simpler than either of the examples above. They are using rewrite to rewrite the url, I think you can use proxy_pass but pass the url to the proxy setting the host header param to the location you want to go to. e.g.



          http {

          upstream corporate_proxy
          server web-proxy.mycorp.com:8080;


          server
          listen 80;
          server_name classen.abc.lan;
          location /
          proxy_pass_header on;
          proxy_set_header Host "registry.npmjs.org";
          proxy_pass http://corporate_proxy;
          proxy_cache npm;
          proxy_cache_valid 200 302 365d;
          proxy_cache_valid 404 1m;
          sub_filter 'registry.npmjs.org' 'classen.abc.lan';
          sub_filter_once off;
          sub_filter_types application/json;







          share|improve this answer























            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "2"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f583743%2fhow-to-make-an-existing-caching-nginx-proxy-use-another-proxy-to-bypass-a-firewa%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            3 Answers
            3






            active

            oldest

            votes








            3 Answers
            3






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            4














            The issue with Lukas's solution is HttpRewriteModule , which automatically turns everything with http(s) at the front into a 302.



            If you instead do the rewrite in two stages - the second one 'break' - it should work. e.g.



            rewrite ^(.*)$ "://registry.npmjs.org$1";
            rewrite ^(.*)$ "http$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            I suspect there's a nicer way to do this, but it appears to work.






            share|improve this answer

























            • This really worked!!! I am using nginx as forward proxy behind a corporate proxy. My config: rewrite ^(.*)$ "://$http_host$uri$is_args$args" break; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_pass http://proxy.abc.lan:3128;

              – Prashant Borde
              Oct 1 '16 at 18:30







            • 1





              Should the first rewrite not "break"? Also, I think people would appreciate it if you can mention https proxy is not supported by Nginx.

              – blurrcat
              Oct 11 '17 at 5:40











            • @blurrcat you are right. In addition, it does not support reverse proxy to https website.

              – ipcjs
              Sep 28 '18 at 8:31















            4














            The issue with Lukas's solution is HttpRewriteModule , which automatically turns everything with http(s) at the front into a 302.



            If you instead do the rewrite in two stages - the second one 'break' - it should work. e.g.



            rewrite ^(.*)$ "://registry.npmjs.org$1";
            rewrite ^(.*)$ "http$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            I suspect there's a nicer way to do this, but it appears to work.






            share|improve this answer

























            • This really worked!!! I am using nginx as forward proxy behind a corporate proxy. My config: rewrite ^(.*)$ "://$http_host$uri$is_args$args" break; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_pass http://proxy.abc.lan:3128;

              – Prashant Borde
              Oct 1 '16 at 18:30







            • 1





              Should the first rewrite not "break"? Also, I think people would appreciate it if you can mention https proxy is not supported by Nginx.

              – blurrcat
              Oct 11 '17 at 5:40











            • @blurrcat you are right. In addition, it does not support reverse proxy to https website.

              – ipcjs
              Sep 28 '18 at 8:31













            4












            4








            4







            The issue with Lukas's solution is HttpRewriteModule , which automatically turns everything with http(s) at the front into a 302.



            If you instead do the rewrite in two stages - the second one 'break' - it should work. e.g.



            rewrite ^(.*)$ "://registry.npmjs.org$1";
            rewrite ^(.*)$ "http$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            I suspect there's a nicer way to do this, but it appears to work.






            share|improve this answer















            The issue with Lukas's solution is HttpRewriteModule , which automatically turns everything with http(s) at the front into a 302.



            If you instead do the rewrite in two stages - the second one 'break' - it should work. e.g.



            rewrite ^(.*)$ "://registry.npmjs.org$1";
            rewrite ^(.*)$ "http$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            I suspect there's a nicer way to do this, but it appears to work.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Sep 29 '18 at 21:15

























            answered Apr 20 '15 at 4:38









            james.haggertyjames.haggerty

            1413




            1413












            • This really worked!!! I am using nginx as forward proxy behind a corporate proxy. My config: rewrite ^(.*)$ "://$http_host$uri$is_args$args" break; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_pass http://proxy.abc.lan:3128;

              – Prashant Borde
              Oct 1 '16 at 18:30







            • 1





              Should the first rewrite not "break"? Also, I think people would appreciate it if you can mention https proxy is not supported by Nginx.

              – blurrcat
              Oct 11 '17 at 5:40











            • @blurrcat you are right. In addition, it does not support reverse proxy to https website.

              – ipcjs
              Sep 28 '18 at 8:31

















            • This really worked!!! I am using nginx as forward proxy behind a corporate proxy. My config: rewrite ^(.*)$ "://$http_host$uri$is_args$args" break; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_pass http://proxy.abc.lan:3128;

              – Prashant Borde
              Oct 1 '16 at 18:30







            • 1





              Should the first rewrite not "break"? Also, I think people would appreciate it if you can mention https proxy is not supported by Nginx.

              – blurrcat
              Oct 11 '17 at 5:40











            • @blurrcat you are right. In addition, it does not support reverse proxy to https website.

              – ipcjs
              Sep 28 '18 at 8:31
















            This really worked!!! I am using nginx as forward proxy behind a corporate proxy. My config: rewrite ^(.*)$ "://$http_host$uri$is_args$args" break; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_pass http://proxy.abc.lan:3128;

            – Prashant Borde
            Oct 1 '16 at 18:30






            This really worked!!! I am using nginx as forward proxy behind a corporate proxy. My config: rewrite ^(.*)$ "://$http_host$uri$is_args$args" break; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_pass http://proxy.abc.lan:3128;

            – Prashant Borde
            Oct 1 '16 at 18:30





            1




            1





            Should the first rewrite not "break"? Also, I think people would appreciate it if you can mention https proxy is not supported by Nginx.

            – blurrcat
            Oct 11 '17 at 5:40





            Should the first rewrite not "break"? Also, I think people would appreciate it if you can mention https proxy is not supported by Nginx.

            – blurrcat
            Oct 11 '17 at 5:40













            @blurrcat you are right. In addition, it does not support reverse proxy to https website.

            – ipcjs
            Sep 28 '18 at 8:31





            @blurrcat you are right. In addition, it does not support reverse proxy to https website.

            – ipcjs
            Sep 28 '18 at 8:31













            2














            RFC 2616, Section 5.1.2 states




            The absoluteURI form is REQUIRED when the request is being made to a proxy.
            [...]

            An example Request-Line would be:



             GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1



            So what you are supposed to do is pass the request to the proxy with those modified directives:



            rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            According to the nginx docs, using rewrite ... break; will force nginx to use the rewritten URI (now an absolute URI as the protocol requires) instead of trying to build it from the proxy_pass directive.






            share|improve this answer

























            • Thanks for your answer. Unfortunately, I could not get it to work. Maybe I am missing something. I edited my answer to show what I have tried.

              – Philipp Claßen
              Mar 24 '14 at 10:43















            2














            RFC 2616, Section 5.1.2 states




            The absoluteURI form is REQUIRED when the request is being made to a proxy.
            [...]

            An example Request-Line would be:



             GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1



            So what you are supposed to do is pass the request to the proxy with those modified directives:



            rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            According to the nginx docs, using rewrite ... break; will force nginx to use the rewritten URI (now an absolute URI as the protocol requires) instead of trying to build it from the proxy_pass directive.






            share|improve this answer

























            • Thanks for your answer. Unfortunately, I could not get it to work. Maybe I am missing something. I edited my answer to show what I have tried.

              – Philipp Claßen
              Mar 24 '14 at 10:43













            2












            2








            2







            RFC 2616, Section 5.1.2 states




            The absoluteURI form is REQUIRED when the request is being made to a proxy.
            [...]

            An example Request-Line would be:



             GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1



            So what you are supposed to do is pass the request to the proxy with those modified directives:



            rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            According to the nginx docs, using rewrite ... break; will force nginx to use the rewritten URI (now an absolute URI as the protocol requires) instead of trying to build it from the proxy_pass directive.






            share|improve this answer















            RFC 2616, Section 5.1.2 states




            The absoluteURI form is REQUIRED when the request is being made to a proxy.
            [...]

            An example Request-Line would be:



             GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1



            So what you are supposed to do is pass the request to the proxy with those modified directives:



            rewrite ^(.*)$ "http://registry.npmjs.org$1" break;
            proxy_pass http://proxy.abc.lan:1234;


            According to the nginx docs, using rewrite ... break; will force nginx to use the rewritten URI (now an absolute URI as the protocol requires) instead of trying to build it from the proxy_pass directive.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Mar 23 '14 at 4:18

























            answered Mar 23 '14 at 4:12









            LukasLukas

            889512




            889512












            • Thanks for your answer. Unfortunately, I could not get it to work. Maybe I am missing something. I edited my answer to show what I have tried.

              – Philipp Claßen
              Mar 24 '14 at 10:43

















            • Thanks for your answer. Unfortunately, I could not get it to work. Maybe I am missing something. I edited my answer to show what I have tried.

              – Philipp Claßen
              Mar 24 '14 at 10:43
















            Thanks for your answer. Unfortunately, I could not get it to work. Maybe I am missing something. I edited my answer to show what I have tried.

            – Philipp Claßen
            Mar 24 '14 at 10:43





            Thanks for your answer. Unfortunately, I could not get it to work. Maybe I am missing something. I edited my answer to show what I have tried.

            – Philipp Claßen
            Mar 24 '14 at 10:43











            0














            I think it may be simpler than either of the examples above. They are using rewrite to rewrite the url, I think you can use proxy_pass but pass the url to the proxy setting the host header param to the location you want to go to. e.g.



            http {

            upstream corporate_proxy
            server web-proxy.mycorp.com:8080;


            server
            listen 80;
            server_name classen.abc.lan;
            location /
            proxy_pass_header on;
            proxy_set_header Host "registry.npmjs.org";
            proxy_pass http://corporate_proxy;
            proxy_cache npm;
            proxy_cache_valid 200 302 365d;
            proxy_cache_valid 404 1m;
            sub_filter 'registry.npmjs.org' 'classen.abc.lan';
            sub_filter_once off;
            sub_filter_types application/json;







            share|improve this answer



























              0














              I think it may be simpler than either of the examples above. They are using rewrite to rewrite the url, I think you can use proxy_pass but pass the url to the proxy setting the host header param to the location you want to go to. e.g.



              http {

              upstream corporate_proxy
              server web-proxy.mycorp.com:8080;


              server
              listen 80;
              server_name classen.abc.lan;
              location /
              proxy_pass_header on;
              proxy_set_header Host "registry.npmjs.org";
              proxy_pass http://corporate_proxy;
              proxy_cache npm;
              proxy_cache_valid 200 302 365d;
              proxy_cache_valid 404 1m;
              sub_filter 'registry.npmjs.org' 'classen.abc.lan';
              sub_filter_once off;
              sub_filter_types application/json;







              share|improve this answer

























                0












                0








                0







                I think it may be simpler than either of the examples above. They are using rewrite to rewrite the url, I think you can use proxy_pass but pass the url to the proxy setting the host header param to the location you want to go to. e.g.



                http {

                upstream corporate_proxy
                server web-proxy.mycorp.com:8080;


                server
                listen 80;
                server_name classen.abc.lan;
                location /
                proxy_pass_header on;
                proxy_set_header Host "registry.npmjs.org";
                proxy_pass http://corporate_proxy;
                proxy_cache npm;
                proxy_cache_valid 200 302 365d;
                proxy_cache_valid 404 1m;
                sub_filter 'registry.npmjs.org' 'classen.abc.lan';
                sub_filter_once off;
                sub_filter_types application/json;







                share|improve this answer













                I think it may be simpler than either of the examples above. They are using rewrite to rewrite the url, I think you can use proxy_pass but pass the url to the proxy setting the host header param to the location you want to go to. e.g.



                http {

                upstream corporate_proxy
                server web-proxy.mycorp.com:8080;


                server
                listen 80;
                server_name classen.abc.lan;
                location /
                proxy_pass_header on;
                proxy_set_header Host "registry.npmjs.org";
                proxy_pass http://corporate_proxy;
                proxy_cache npm;
                proxy_cache_valid 200 302 365d;
                proxy_cache_valid 404 1m;
                sub_filter 'registry.npmjs.org' 'classen.abc.lan';
                sub_filter_once off;
                sub_filter_types application/json;








                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Oct 28 '15 at 8:45









                Mark DMark D

                11615




                11615



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Server Fault!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f583743%2fhow-to-make-an-existing-caching-nginx-proxy-use-another-proxy-to-bypass-a-firewa%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Wikipedia:Vital articles Мазмуну Biography - Өмүр баян Philosophy and psychology - Философия жана психология Religion - Дин Social sciences - Коомдук илимдер Language and literature - Тил жана адабият Science - Илим Technology - Технология Arts and recreation - Искусство жана эс алуу History and geography - Тарых жана география Навигация менюсу

                    Bruxelas-Capital Índice Historia | Composición | Situación lingüística | Clima | Cidades irmandadas | Notas | Véxase tamén | Menú de navegacióneO uso das linguas en Bruxelas e a situación do neerlandés"Rexión de Bruxelas Capital"o orixinalSitio da rexiónPáxina de Bruselas no sitio da Oficina de Promoción Turística de Valonia e BruxelasMapa Interactivo da Rexión de Bruxelas-CapitaleeWorldCat332144929079854441105155190212ID28008674080552-90000 0001 0666 3698n94104302ID540940339365017018237

                    What should I write in an apology letter, since I have decided not to join a company after accepting an offer letterShould I keep looking after accepting a job offer?What should I do when I've been verbally told I would get an offer letter, but still haven't gotten one after 4 weeks?Do I accept an offer from a company that I am not likely to join?New job hasn't confirmed starting date and I want to give current employer as much notice as possibleHow should I address my manager in my resignation letter?HR delayed background verification, now jobless as resignedNo email communication after accepting a formal written offer. How should I phrase the call?What should I do if after receiving a verbal offer letter I am informed that my written job offer is put on hold due to some internal issues?Should I inform the current employer that I am about to resign within 1-2 weeks since I have signed the offer letter and waiting for visa?What company will do, if I send their offer letter to another company