nginx não pode ver o MySQL

2

Eu tenho uma instalação totalmente funcional do Joomla 2.5.6 conduzida por um servidor MySQL local, mas gostaria de testar o nginx para ver se é uma experiência de serviço da web mais rápida do que o Apache.

  • PHP 5.4.6 (PHP54w)
  • CentOS 6.2
  • Joomla 2.5.6
  • PHP54w-fpm.i386 (gerenciador de processos FastCGI)
  • php -m mostra: mysql & módulos do mysqli carregados

O Nginx parece ter sido bem instalado via yum, ele pode processar um arquivo de informação PHP via FastCGI perfeitamente OK ( link ) mas quando eu paro o Apache, inicio o nginx em vez disso e visito meu site eu recebo: "Erro de conexão do banco de dados (1): O adaptador mysqli 'mysqli' não está disponível."

Eu tentei ajustar meu Joomla configuration.php para usar o mysql em vez do mysqli mas recebo o mesmo erro básico, só que desta vez "Erro de conexão do banco de dados (1): O adaptador mysql 'mysql' não está disponível" !

Alguém pode pensar qual é o problema? Eu tentei explicitamente configurar extension = mysqli.so e extension = mysql.so no meu php.ini para tentar forçar o problema (apesar do php -m mostrar que ambos foram carregados com sucesso de qualquer maneira) - não houve diferença.

Eu tenho um nginx default.conf bastante padrão:

server {
    listen 80;
    server_name www.MYDOMAIN.com;
    server_name_in_redirect off;
    access_log /var/log/nginx/localhost.access_log main;
    error_log /var/log/nginx/localhost.error_log info;

    root /var/www/html/MYROOT_DIR;
    index index.php index.html index.htm default.html default.htm;
    # Support Clean (aka Search Engine Friendly) URLs
    location / {
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }
    # deny running scripts inside writable directories
    location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
            return 403;
            error_page 403 /403_error.html;
    }
    location ~ \.php$ {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi.conf;
    }
    # caching of files 
    location ~* \.(ico|pdf|flv)$ {
            expires 1y;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
            expires 14d;
    }

}

Snip de saída do phpinfo sob nginx:

Server API    FPM/FastCGI
Virtual Directory Support    disabled
Configuration File (php.ini) Path    /etc
Loaded Configuration File    /etc/php.ini
Scan this dir for additional .ini files    /etc/php.d
Additional .ini files parsed    /etc/php.d/curl.ini, /etc/php.d/fileinfo.ini, /etc/php.d/json.ini, /etc/php.d/phar.ini, /etc/php.d/zip.ini

Snip de saída do phpinfo no Apache:

Server API    Apache 2.0 Handler
Virtual Directory Support    disabled
Configuration File (php.ini) Path    /etc
Loaded Configuration File    /etc/php.ini
Scan this dir for additional .ini files    /etc/php.d
Additional .ini files parsed    /etc/php.d/curl.ini, /etc/php.d/fileinfo.ini, /etc/php.d/json.ini, /etc/php.d/mysql.ini, /etc/php.d/mysqli.ini, /etc/php.d/pdo.ini, /etc/php.d/pdo_mysql.ini, /etc/php.d/pdo_sqlite.ini, /etc/php.d/phar.ini, /etc/php.d/sqlite3.ini, /etc/php.d/zip.ini

Parece que, com o Apache, o PHP está carregando substancialmente mais arquivos .ini adicionais, incluindo os relacionados ao mysql (mysql.ini, mysqli.ini, pdo_mysql.ini) do que ao nginx.

Alguma idéia de como eu ganho o nginix também chama isso de .ini adicional?

Agradecemos antecipadamente

Steve

    
por user135235 08.09.2012 / 21:28

2 respostas

1

Existe um arquivo php.ini diferente para o apache e para o fcgi. verifique sua pasta de configuração do php (/ etc / php5 no Ubuntu) e você verá pelo menos duas pastas apache2 e cli. Certifique-se de que em ambos os arquivos o driver mysql esteja habilitado. Verifique também se você possui os arquivos ini em conf.d para ambos os locais.

    
por 09.09.2012 / 14:30
1

Você precisa verificar a instalação da sua versão do php-fpm / FastCGI para o nginx, pelo que parece que você não tem mysql e mysqli habilitados para esta instalação em particular. No caso de você ter a mesma versão do php instalada tanto para o Apache quanto para o nginx com a mesma configuração de thread (o ZTS está ativado para ambos ou desativado para ambos), você só precisa copiar mysql.so e mysqli.so de o extension_dir da instalação do Apache para a extension_dir da instalação do nginx php-fpm / FastCGI que você pode obter abrindo um script phpinfo() php primeiro no Apache e depois no nginx.
Depois disso, você precisa ativar esses módulos em php-fpm / FastCGI, se eles não estiverem incluídos no diretório /etc/php.d/ , basta especificar isso diretamente em /etc/php.ini , adicionando as próximas linhas:

extension=mysql.so
extension=mysqli.so

E reinicie o php-fpm.

    
por 09.09.2012 / 15:11

Tags