我有一个由本地 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.so
extension_dir
extension_dir
phpinfo()
/etc/php.d/
/etc/php.ini
extension=mysql.so
extension=mysqli.so
并重新启动 php-fpm。