nginx projetos em subpastas

10

Estou ficando frustrado com minha configuração nginx e, portanto, estou pedindo ajuda para escrever meu arquivo de configuração para servir vários projetos de subdiretórios na mesma raiz. Isso não é hospedagem virtual, pois todos usam o mesmo valor de host. Talvez um exemplo possa esclarecer minha tentativa:

  • a solicitação 192.168.1.1/ deve veicular index.php de /var/www/public/
  • a solicitação 192.168.1.1/wiki/ deve veicular index.php de /var/www/wiki/public/
  • a solicitação 192.168.1.1/blog/ deve veicular index.php de /var/www/blog/public/

Esses projetos estão usando PHP e usam fastcgi.

Minha configuração atual é muito mínima.

server {
    listen 80 default;
    server_name localhost;

    access_log /var/log/nginx/localhost.access.log;

    root /var/www;
    index index.php index.html;

    location ~ \.php$ {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

Eu tentei várias coisas com alias e rewrite , mas não consegui configurar as coisas corretamente para o fastcgi. Parece que deve haver uma maneira mais eloquente do que escrever blocos de localização e duplicar root , index , SCRIPT_FILENAME , etc.

Qualquer sugestão para me levar na direção certa é bem-vinda.

    
por Timothy 05.01.2011 / 06:00

3 respostas

14

Como seus projetos não estão na mesma raiz, você deve usar vários locais para isso.

location /wiki {
    root /var/www/wiki/public;
}

location ~ /wiki/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/wiki/public$fastcgi_script_name;
}

location /blog {
    root /var/www/blog/public;
}

location ~ /blog/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/blog/public$fastcgi_script_name;
}

Além disso, coloque fastcgi_index no seu arquivo fastcgi_params e inclua-o no nível do servidor, dessa forma você mantém seus locais de php o menor possível.

    
por 05.01.2011 / 07:02
5

Resolve por localização + alias:


location / {
   root /var/www/public;
   index index.php;
}
location /blog/ {
   alias /var/www/blog/public/;
   index index.php;
}
location /wiki/ {
   alias /var/www/wiki/public/;
   index index.php;
}

location ~ \.php$ {
   #your fastcgi configuration here 
}

    
por 05.01.2011 / 08:32
0

Veja o que eu tentei, mais detalhes no link

    location /Site1/ {
            root /usr/share/nginx/www/Site1;
           try_files $uri $uri/ /index.php?$query_string;
    }

    # the images need a seperate entry as we dont want to concatenate that with index.php      
    location ~ /Site1/.+\.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
            root /usr/share/nginx/www/Site1;
    }
    # pass the PHP scripts to FastCGI server
    location ~ /Site1/.+\.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            allow 127.0.0.1;
    #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #       # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
    }

location /Site3/ {
            root    /usr/share/nginx/www/Site3;
    }

    # pass the PHP scripts to FastCGI server
    location ~ /Site3/.+\.php$ {
            allow 127.0.0.1;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            #we are directly using the $request_filename as its a single php script
            fastcgi_param SCRIPT_FILENAME $request_filename;
    }
    
por 09.11.2013 / 05:59