How to proxy_pass POST with headers

Jaakko Pasanen jkpasanen at gmail.com
Fri Jan 27 14:02:47 UTC 2012


Hi,

I'm using Typo3 as CMS with Apache on Ubuntu 10.04. I'm trying to set Nginx as a reverse proxy with a typo3 extension evo_nginx_boost that uses memcached. I have everything running on the same machine, Nginx on port 80 and apache behind a firewall on port 8085 and memcached behind a on port 11211.

So far I have got everything else working just fine except sending any POST information, ex. logging in, etc. This causes browser to try to fetch images, etc. behind firewall (port 8085) and also Typo3 doesn't know how to parse the url to right place (it's creating nice urls. Instead of foo.bar/index.php?id=123 it uses foo.bar/this/is/the/file.html)

I think that In order to get it work I would somehow need to be able to set proxy_set_header Host $http_host;, but Nginx doesn't let me do that in if-statement (see below). I really don't know how to resolve this and googling around didn't help me, so I would be extremely happy if anybody could give me any feedback! Thanks!

Here is my Nginx conf for the server:

server {
     listen       80; 
     server_name  foo.bar;

     access_log  /var/log/nginx/localhost.access.log;
     error_log  /var/log/nginx/error.log debug; 

     location / { 
    
        set $domain "http://foo.bar";
    
     if ($request_method = POST)
        {   
            proxy_pass  http://foo.bar:8085;
            break;
        }   
   
    # set default memcache key 
           set $href $host$request_uri;

      if ($http_cookie ~* "be_typo_user")
        {   
           proxy_pass  http://foo.bar:8085;
           break;
        }   


      if ($http_cookie ~* "nginx_boost_fe_user=([^;]+)(?:;|$)")
        {   
           set $href $host$request_uri$1;
        }   

           set $memcached_key $href;

    # Check if local memcached server can answer this request
           default_type text/html;
           memcached_pass 127.0.0.1:11211;
 
    # Send to app. server if Memcached could not answer the request
          error_page 404 502 = /cache_miss$request_uri;

       }   
    # Main location
      location /cache_miss/
        {   
          proxy_pass http://foo.bar:8085;
          proxy_set_header Host $http_host;
          proxy_set_header X-Forwarded-Host $http_host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }   

    location ~ ^/(images|javascript|js|css|flash|media|fileadmin|typo3temp|static|uploads)/  {
          proxy_pass http://foo.bar:8085;
          proxy_set_header Host $http_host;
          proxy_set_header X-Forwarded-Host $http_host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

server {
    listen       80 default_server;
    server_name  _;
    return       301 http://foo.bar$request_uri;
}


---

Jaakko Pasanen




More information about the nginx mailing list