fastcgi_param in server context does not work

Maxim Dounin mdounin at mdounin.ru
Wed Sep 23 21:30:51 MSD 2009


Hello!

On Wed, Sep 23, 2009 at 09:51:12AM -0700, Michael Shadle wrote:

> Oh, wow.
> 
> To me, that seems like a bug, or at least an unwanted behavior. That
> doesn't really follow any kind of pattern I've ever seen.

This is how it works, and fastcgi specs do not specify intended 
behaviour here.  It's up to application to select one.  In it's 
turn nginx just allow admin to do whatever his application wants.

Note that this problem was already discussed on Russian mailing 
list a while ago and consesus was that such situation probably 
deserves warning during configuration parsing.

For now, just don't write duplicate fastcgi_param's if you don't 
need them and you will be fine.

Maxim Dounin

> I can't see the need to pass the same pair twice for any reason - if
> so I'd think it would be something like
> 
> fastcgi_param  SOMETHING[]  1;
> fastcgi_param  SOMETHING[]  2;
> 
> or something along those lines if someone -really- wanted two values.
> 
> 2009/9/23 Maxim Dounin <mdounin at mdounin.ru>:
> > Hello!
> >
> > On Wed, Sep 23, 2009 at 03:14:10AM -0700, Michael Shadle wrote:
> >
> >> i used to set fastcgi_params on the global level, but now i have a
> >> fastcgi.conf file with all the params that i include in my location
> >> block for php - this allows me to alter the array like one would
> >> expect. :)
> >
> > Note that you can't *redefine* params already defined on the same
> > level.  I.e. writing (either direct or via include)
> >
> >    fastcgi_param  SOMETHING  1;
> >    fastcgi_param  SOMETHING  2;
> >
> > will send *two* name-value pairs to fastcgi application.  It's up to
> > application to use either both or one of them.
> >
> > In practice, PHP is known to behave differently in different
> > versions.  After 5.2 it uses last value supplied, before - first
> > one.
> >
> > Maxim Dounin
> >
> >
> >>
> >> On Wed, Sep 23, 2009 at 2:46 AM, Tomasz Pajor <nikon at puffy.pl> wrote:
> >> > Tomasz Pajor wrote:
> >> >>
> >> >> So there is no way to create such a configuration:
> >> >>
> >> >> # fastcgi.conf
> >> >> root /vhosts/landingpage/public;
> >> >> charset utf-8;
> >> >>
> >> >> fastcgi_index index.php;
> >> >>
> >> >> location / {
> >> >>   try_files $uri $uri/ @fallback;
> >> >>   fastcgi_pass unix:/var/run/spawn-fcgi.sock;
> >> >>   fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
> >> >>   include fastcgi_params;
> >> >> }
> >> >>
> >> >> location @fallback {
> >> >>   fastcgi_pass unix:/var/run/spawn-fcgi.sock;
> >> >>   fastcgi_param SCRIPT_FILENAME $document_root/index.php;
> >> >>   include fastcgi_params;
> >> >> }
> >> >>
> >> >> # landingpage.conf
> >> >> server {
> >> >>   listen 80;
> >> >>   server_name .site1.landingpage.dev;
> >> >>   access_log off;
> >> >>   error_log /var/log/nginx/site1.landingpage.log;
> >> >>
> >> >>   fastcgi_param SITE site1;
> >> >>   include fastcgi.conf;
> >> >> }
> >> >>
> >> >> server {
> >> >>   listen 80;
> >> >>   server_name .site2.landingpage.dev;
> >> >>   access_log off;
> >> >>   error_log /var/log/nginx/site2.landingpage.log;
> >> >>
> >> >>   fastcgi_param SITE site2;
> >> >>   include fastcgi.conf;
> >> >> }
> >> >
> >> > I've been going through emails, and I came up with a good solution to my
> >> > configuration, based on Igor and Maxim suggestion in Conditional
> >> > fastcgi_param thread.
> >> > Thanks!
> >> >
> >> > # landingpage-fastcgi.conf
> >> > access_log off;
> >> > root /vhosts/landingpage/public;
> >> > charset utf-8;
> >> > fastcgi_index index.php;
> >> >
> >> > location / {
> >> >   try_files $uri $uri/ @fallback;
> >> >   fastcgi_pass unix:/var/run/spawn-fcgi.sock;
> >> >   fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
> >> >   fastcgi_param SITE $landingpage_site;
> >> >   include fastcgi_params;
> >> > }
> >> >
> >> > location @fallback {
> >> >   fastcgi_pass unix:/var/run/spawn-fcgi.sock;
> >> >   fastcgi_param SCRIPT_FILENAME $document_root/index.php;
> >> >   fastcgi_param SITE $landingpage_site;
> >> >   include fastcgi_params;
> >> > }
> >> >
> >> > # landingpage.conf
> >> > map $http_host $landingpage_site {
> >> >   default site1;
> >> >   .site1.landingpage.dev site1;
> >> >   .site2.landingpage.dev site2;
> >> > }
> >> >
> >> > server {
> >> >   listen 80;
> >> >   server_name .landingpage.dev .site1.landingpage.dev;
> >> >   error_log /var/log/nginx/landingpage/site1-error.log;
> >> >   include landingpage-fastcgi;
> >> > }
> >> >
> >> > server {
> >> >   listen 80;
> >> >   server_name .site2.landingpage.dev;
> >> >   error_log /var/log/nginx/landingpage/site2-error.log;
> >> >   include landingpage-fastcgi;
> >> > }
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >>
> >
> >
> 





More information about the nginx mailing list