我有一个由本地MySQL服务器驱动的完全正常的Joomla 2.5.6安装,但我想testingnginx,看看它是否比Apache更快的Web服务体验。
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'不可用”当然!
任何人都可以想到可能会有什么问题吗? 我曾尝试明确地设置扩展= mysqli.so和扩展= mysql.so在我的php.ini试图强制这个问题(尽pipephp -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文件,包括有关mysql(mysql.ini,mysqli.ini,pdo_mysql.ini)比nginx。
任何想法如何让nginix也叫这些额外的.ini的?
提前致谢,
史蒂夫
对于apache和fcgi有一个不同的php.ini文件。 检查你的PHPconfiguration文件夹(在Ubuntu的/ etc / php5),你会看到至less有两个文件夹apache2和cli。 确保在两个文件中都启用了mysql驱动程序。 同时检查两个位置是否有conf.d中的ini文件。
你需要检查你的php-fpm / FastCGI版本的nginx安装,看起来你没有为这个特定的安装启用mysql和mysqli。
如果您使用相同的线程安装(对于两者都启用了ZTS或者对于两者都启用了ZTS),为Apache和nginx安装了相同版本的PHP,则只需将mysql.so和mysqli.so从extension_dir Apache安装到nginx php-fpm / FastCGI安装的extension_dir ,你可以通过先在Apache中打开一个phpinfo() php脚本,然后在nginx中轻松获得。
在这之后,你需要在php-fpm / FastCGI中启用这些模块,如果它们不在/etc/php.d/目录中,只需在/etc/php.ini直接指定即可:
extension=mysql.so extension=mysqli.so
并重新启动php-fpm。