aliasing do diretório Nginx incorretamente passando para fcgi

1

Eu tenho um host virtual do site, example.com, que é veiculado estaticamente em / home / erealms / www.

No entanto, o site é executado por meio de uma série de scripts perl, localizados em vários diretórios. Então, o que estou tentando realizar é o seguinte:

http://example.com/               -> /home/erealms/www
http://example.com/erealms        -> /home/erealms/ethereal/main
http://example.com/erealms/admin  -> /home/erealms/ethereal/mgmt/admin
http://example.com/erealms/config -> /home/erealms/ethereal/mgmt/config

Em todos os diretórios, exceto no link , haverá arquivos perl, .pl, sendo exibidos através do fcgiwrapper.

Aqui está minha configuração atual:

server {
    add_header Cache-Control public;
    access_log /var/log/nginx/access.log main buffer=32k;
    error_log /var/log/nginx/error.log error;
    expires max;
    limit_req zone=gulag burst=200 nodelay;
    listen 80;
    server_name example.com;
    index index.html index.htm default.html default.htm;
    root /home/erealms/www;

    location ~* (\.jpg|\.png|\.css)$ {
        if ($http_referer !~ ^(http://rpn.ishikawa.sne.jp) ) {
            return 405;
        }
    }
    location = /favicon.ico {
        return 204;
    }
    location /erealms/config {
        root /home/erealms/ethereal/mgmt/config/;
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:8000;
        fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/config$fastcgi_script_name;
    }
    location /erealms/admin {
        root /home/erealms/ethereal/mgmt/admin/;
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:8000;
        fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/admin$fastcgi_script_name;
    }
    location /erealms {
        alias /home/erealms/ethereal/main;
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:8000;
        fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/main$fastcgi_script_name;
    }
}

Você notará que eu tenho diretivas root e alias, porque eu estava tentando descobrir o que diabos estava acontecendo. Aqui está o que é estranho. Eu incluí abaixo os diretórios que são solicitados, e onde o nginx diz ao fcgiwrapper para acessá-los:

http://example.com/erealms        -> /home/erealms/ethereal/main/erealms
http://example.com/erealms/admin  -> /home/erealms/ethereal/mgmt/admin/erealms/admin
http://example.com/erealms/config -> /home/erealms/ethereal/mgmt/config/erealms/config

Agora, por enquanto, e só para fazer a maldita coisa funcionar para mais testes, acabei de criar links simbólicos preguiçosos que apontam para onde eles deveriam estar, mas obviamente essa não é uma solução muito elegante. Se alguém puder me apontar na direção certa para consertar essa configuração atual, OU se você tiver uma idéia de uma solução mais elegante para essa configuração, eu agradeceria muito.

    
por Pryoidain 05.03.2012 / 00:28

1 resposta

1

Não tenho certeza de como responder suas próprias perguntas sobre SF, mas aqui está o que acabei fazendo:

server {
    add_header      Cache-Control public;
    access_log      /var/log/nginx/access.log main buffer=32k;
    error_log       /var/log/nginx/error.log error;
    expires         max;
    limit_req       zone=gulag burst=200 nodelay;
    listen          80;
    server_name     rpn.ishikawa.sne.jp;
    root            /home/erealms/www;
    index           index.html;
    location ~* (\.jpg|\.png|\.css)$ {
            if ($http_referer !~ ^(http://rpn.ishikawa.sne.jp) ) {
                    return 405;
            }
    }
    location = /favicon.ico {
            return 204;
    }
    location ~ /erealms/config(/.*\.pl)$ {
            alias   /home/erealms/ethereal/mgmt/config;
            gzip off;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/tmp/cgi.sock;
            fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/config/$1;
    }
    location ~ /erealms/admin(/.*\.pl)$ {
            alias   /home/erealms/ethereal/mgmt/admin;
            gzip off;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/tmp/cgi.sock;
            fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/admin/$1;
    }
    location ~ /erealms(/.*\.pl)$ {
            alias   /home/erealms/ethereal/main;
            gzip off;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/tmp/cgi.sock;
            fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/main/$1;
    }
}

Agora, infelizmente, isso resultou em alguns outros erros onde eu acabei usando um back-end do apache para servir o conteúdo dinâmico com um frontend do nginx, mas achei que poderia deixar isso aqui caso alguém encontrasse um problema parecido .

    
por 05.03.2012 / 13:12