configuração do servidor nginx com vários locais não funciona

7

Eu tenho tentado fazer isso funcionar por horas agora!

Eu gostaria de configurar um servidor da Web simples. Meus arquivos da web devem estar em /var/www . Eu também quero ter phpmyadmin. Eu criei um diretório /var/phpmyadmin . Agora quero acessar os arquivos normais da web da maneira padrão.
Por exemplo: O arquivo /var/www/test.php deve ser acessível com http://localhost/test.php .
A parte phpmyadmin deve ser assim: http://localhost/phpmyadmin . Com a configuração abaixo eu recebo um 404. Também com este URL: http://localhost/phpmyadmin/index.php

Para isso eu criei este arquivo na pasta sites-availble do nginx:

server {
  listen 80; ## listen for ipv4; this line is default and implied
  listen [::]:80 default_server ipv6only=on; ## listen for ipv6

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

  try_files $uri $uri/ $uri/index.html $uri/index.htm $uri/index.php;

  # This didn't work
  location /phpmyadmin/ {
     alias /var/phpmyadmin;
  }

  # And this did neither. (Never used both at the same time!)
  location /phpmyadmin/ {
     root /var;
  }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    #fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }

  location ~ /\.ht {
    deny all;
  }
}

O que estou fazendo de errado?

Editar:

Interessante notar é que isso funciona (o diretório raiz funciona ( http://localhost )):

  root /var/www/htdocs;

  index index.php index.html index.htm;

  location /phpmyadmin/ {
    root /var/www/phpmyadmin;
  }

E isso não acontece:

  index index.php index.html index.htm;

  location / {
    root /var/www/htdocs;
  }

  location /phpmyadmin/ {
    root /var/www/phpmyadmin;
  }

O phpmyadmin ainda não funciona!

    
por BrainStone 02.06.2014 / 13:58

1 resposta

9

Seu objetivo é separar completamente seus arquivos web "regulares" da sua instalação do phpMyAdmin.

Deve-se enfatizar que cada configuração de servidor no Nginx pode (e deve) ter apenas um webroot. Dito isto, estas são suas opções:

  • Instale o phpMyAdmin em um diretório sob sua webroot, que no seu caso é /var/www/phpmyadmin . Pode ser acessado através de http://localhost/phpmyadmin

    Esta é a configuração mais simples e estou incluindo aqui por uma questão de perfeição (e pessoas que vêm aqui dos mecanismos de pesquisa).

  • Instale o phpMyAdmin em um diretório fora de sua webroot e, em seguida, crie um link simbólico chamado phpmyadmin em sua webroot apontando para esse diretório. Nesse caso, você precisa ter certeza de que especificou disable_symlinks off na configuração do seu servidor.

  • Você pode conseguir a separação no mesmo vhost criando duas configurações de servidor escutando em portas diferentes, tendo diferentes webroots e se comunicando através da diretiva proxy_pass. Um esboço básico de tal configuração é o seguinte:

    server {
        listen   80;
        server_name localhost;
        root /var/www/htdocs;
        index index.php index.html index.htm;
    
        location /phpmyadmin {
            proxy_pass http://127.0.0.1:8080/;
        }
    
        # ...Add more location directives, php support, etc...
    }
    
    server {
        listen 8080;
        server_name localhost;
        root /var/www/phpmyadmin;
        index index.php index.html index.htm;
    
        # ...Specify additional location directives, php support, etc...
    }
    

    Nesse caso, todas as solicitações para o phpMyAdmin serão passadas de forma transparente para a instância do servidor que está escutando na porta 8080 através do /phpmyadmin location na instância do servidor que está escutando na porta 80.

  • Por fim, você pode conseguir a separação em diferentes vhosts criando duas configurações de servidor ouvindo na mesma porta, mas com diferentes server_name diretivas e diferentes root locais. Por exemplo, um esquema básico como este:

    server {
        listen   80;
        server_name dev.local;
        root /var/www/htdocs;
        index index.php index.html index.htm;
    
        # ...Add more location directives, php support, etc...
    }
    
    server {
        listen   80;
        server_name phpmyadmin.local;
        root /var/www/phpmyadmin;
        index index.php index.html index.htm;
    
        # ...Specify additional location directives, php support, etc...
    }
    

Em seguida, você poderia adicionar as seguintes entradas ao seu /etc/hosts :

127.0.0.1    dev.local
127.0.0.1    phpmyadmin.local

e, em seguida, você pode acessar seus arquivos por meio de http://dev.local e sua instância do phpMyAdmin por meio de http://phpmyadmin.local . Obviamente, da sua estação de trabalho local.

    
por 04.06.2014 / 15:31