nginx 无法看到 MySQL

nginx 无法看到 MySQL

我有一个由本地 MySQL 服务器驱动且功能齐全的 Joomla 2.5.6 安装,但我想测试 nginx 以查看它是否比 Apache 提供更快的 Web 服务体验。

  • PHP 5.4.6(PHP54w)
  • CentOS 6.2
  • Joomla 2.5.6
  • PHP54w-fpm.i386(FastCGI 进程管理器)
  • php -m 显示:mysql 和 mysqli 模块已加载

Nginx 似乎已通过 yum 成功安装,它可以通过 FastCGI 完美地处理 PHP-info 文件。http://37.128.190.241/php.php),但是当我停止 Apache,启动 nginx 并访问我的网站时,我收到:“数据库连接错误 (1):MySQL 适配器‘mysqli’不可用。”

我尝试调整我的 Joomla configuration.php 以使用 mysql 而不是 mysqli,但我得到了相同的基本错误,只是这次是“数据库连接错误 (1):MySQL 适配器‘mysql’不可用”当然!

有人能想到问题可能是什么吗?我确实尝试在 php.ini 中明确设置 extension = mysqli.so 和 extension = mysql.so 来尝试强制解决问题(尽管 php -m 显示它们都已成功加载) - 没有区别。

我有一个非常标准的 nginx default.conf:

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;
    }

}

nginx 下 phpinfo 的输出片段:

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

Apache 下 phpinfo 的输出片段:

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

似乎使用 Apache 时,PHP 加载的附加 .ini 文件比 nginx 多得多,包括与 mysql 相关的文件(mysql.ini、mysqli.ini、pdo_mysql.ini)。

关于如何让 nginix 调用这些附加的 .ini 文件,您有什么想法吗?

提前致谢,

史蒂夫

答案1

apache 和 fcgi 有不同的 php.ini 文件。检查您的 php 配置文件夹(ubuntu 中的 /etc/php5),您将看到至少两个文件夹 apache2 和 cli。确保在两个文件中都启用了 mysql 驱动程序。还要检查 conf.d 中是否有两个位置的 ini 文件。

答案2

您需要检查 nginx 的 php-fpm/FastCGI 版本的安装,从目前的情况来看,您似乎没有为这个特定的安装启用 mysql 和 mysqli。
如果您为 Apache 和 nginx 安装了相同版本的 php,并且线程设置相同(为两者启用或禁用 ZTS),则只需将Apache 安装中的 和 复制到 nginx php-fpm/FastCGI 安装中的即可mysql.so,只需先在 Apache 中打开 php 脚本,然后在 nginx 中打开即可轻松获得。 此后,您需要在 php-fpm/FastCGI 中启用这些模块,如果目录中未包含这些模块,只需通过添加以下几行直接指定即可:mysqli.soextension_dirextension_dirphpinfo()
/etc/php.d//etc/php.ini

extension=mysql.so
extension=mysqli.so

并重新启动 php-fpm。

相关内容