Set-Cookie is missing via proxy

Isaac Hailperin i.hailperin at heinlein-support.de
Wed Dec 5 11:00:51 UTC 2012


Hi,


I am using nginx as a reverse proxy for apache.
I have the following symptom: Sessions of users get mixed up.
The original html from the apache looks like this via curl:

[...]
<a href="/ueber-uns/?acmeID=e58927c4c728307aa0596f23a87c8136" class="to_page
right_btn"><img src="/layout/cyt/img/blind.gif" alt="" /></a></div>
<div class="teaser teaser4a">
[...]

If I get this page through nginx, it looks like this:
[...]
<a href="/ueber-uns/" class="to_page right_btn"><img
src="/layout/cyt/img/blind.gif" alt="" /></a></div>
[...]

So obviously the query string containing the identifing ID is missing. I 
guess
this is where sessions get mixed up. Now I had
a look a the headers, and there I got via apache:
curl --head http://www.foobar-shop.de/
HTTP/1.1 200 OK
Date: Wed, 05 Dec 2012 10:19:48 GMT
Server: Apache
X-Powered-By: PHP/5.2.17-0.dotdeb.0
Set-Cookie: acmeID=48dceed9217eea2b691f75e26276bdb8; expires=Fri, 
15-Mar-2013
10:19:48 GMT; path=/; domain=.foobar-shop.de
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, 
pre-check=0
Pragma: no-cache
Content-Type: text/html;charset=UTF-8

and via nginx:
HTTP/1.1 200 OK
Server: nginx/1.2.5
Date: Wed, 05 Dec 2012 10:45:54 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 945
Connection: keep-alive
Last-Modified: Fri, 13 Apr 2012 02:58:01 GMT
ETag: "132b39c-3b1-4bd86a3f74040"
Accept-Ranges: bytes
Vary: Accept-Encoding

So the "Set-Cookie" header is missing via nginx. I guess this is the 
reason why the query
string is also missing in the html. ( Odly though, if I browse the site with
firefox, I still get the cookie ...? )
I tried setting
proxy_pass_header Set-Cookie;
but with no success.

Now I am a bit clueless.

My config:

/etc/nginx/nginx.conf
user www-data;
worker_processes 16;
pid /var/run/nginx.pid;

events {
         worker_connections 2000;
         # multi_accept on;
}

http {

         ##
         # Basic Settings
         ##

         sendfile on;
         tcp_nopush on;
         tcp_nodelay on;
         keepalive_timeout 65;
         types_hash_max_size 2048;
         # server_tokens off;

         # server_names_hash_bucket_size 64;
         # server_name_in_redirect off;

         include /etc/nginx/mime.types;
         default_type application/octet-stream;

         ##
         # Logging Settings
         ##

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

         ##
         # Gzip Settings
         ##

         gzip on;
         gzip_disable "msie6";
        # gzip_vary on;
         # gzip_proxied any;
         # gzip_comp_level 6;
         # gzip_buffers 16 8k;
         # gzip_http_version 1.1;
         # gzip_types text/plain text/css application/json
         # application/x-javascript text/xml application/xml 
application/xml+rss
         # text/javascript;

         # Because we have a lot of server_names, we need to increase
         # server_names_hash_bucket_size
         # (http://nginx.org/en/docs/http/server_names.html)
         server_names_hash_max_size 6000;
         server_names_hash_bucket_size 512;
                                                            # raise default
                                                            # values for php
         client_max_body_size 20M;
         client_body_buffer_size 128k;

         ##
         # Virtual Host Configs
         ##
         include /var/www3/acme_cache/load_balancer/upstream.conf;
         include /etc/nginx/conf.d/*.conf;
         include /etc/nginx/sites-enabled/*;
         include /etc/nginx/proxy_params;

         index index.html index.htm ;

         ##
         # Proxy Settings
         ##

         # include hostname in request to backend
         proxy_set_header Host $host;

         # only honor internal Caching policies
         proxy_ignore_headers X-Accel-Expires Expires Cache-Control;

         # let cookies from the backend pass
         proxy_pass_header Set-Cookie;

}


/etc/nginx/proxy_params
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

/etc/nginx/conf.d/proxy_paths.conf
proxy_temp_path   /var/lib/nginx/proxy/tmp;
proxy_cache_path  /var/lib/nginx/proxy/cache levels=2:2:2
keys_zone=acme-cache:800m max_size=55000m inactive=10m;

/etc/nginx/sites-enabled/foobar-shop.de_p80
server
{
         server_name www.foobar-shop.de foobar-shop.de foobar-beta.de;
         listen 80;
         access_log /var/log/www/asdf/foobar/log/access.log;
         error_log /var/log/nginx/vhost_error.log;
         proxy_cache acme-cache;
         proxy_cache_key "$scheme$host$proxy_host$uri$is_args$args";
         proxy_cache_valid       200 302 60m;
         proxy_cache_valid       404             10m;

         location ~* \.(jpg|gif|png|css|js)
         {
                 try_files $uri @proxy;
         }

         location @proxy
         {
                 proxy_pass http://backend-all-apaches;
         }

         location /
         {
                 proxy_pass http://backend-all-apaches;
         }

}

Any Ideas?


Isaac




More information about the nginx mailing list