我在本地机器(Mac OSX 10.8)上的 nginx 网络服务器上运行了 codeigniter(php 框架)。
我正在尝试连接到由 mediaTemple 托管的外部 mySQL 数据库。
在 codeigniter 中加载数据库助手时,使用所有正确的详细信息,我不断得到:
A Database Error Occurred
Unable to connect to your database server using the provided settings.
我的 database.php 文件的内容是:
$db['default']['hostname'] = 'external-db.#######.gridserver.com';
$db['default']['username'] = '#######';
$db['default']['password'] = '#######';
$db['default']['database'] = '#######_olliejennings';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
我的 nginx.conf 文件的内容是:
daemon off;
user olliejennings staff;
worker_processes 2;
pid /opt/boxen/data/nginx/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "http_x_forwarded_for"';
access_log /opt/boxen/log/nginx/access.log main;
error_log /opt/boxen/log/nginx/error.log debug;
sendfile on;
tcp_nopush on;
tcp_nodelay off;
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
upstream www-upstream-pool {
server unix:/tmp/php-fpm.sock;
}
server {
listen 80;
server_name localhost;
location / {
root /opt/boxen/config/nginx/public;
}
}
include /opt/boxen/config/nginx/sites/*;
}
我的 sites/olliejennings.conf 文件的内容是:
server {
server_name olliejennings.dev;
root /Users/olliejennings/Code/olliejennings;
index index.php index.html index.htm;
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location / {
# Check if a file exists, or route it to index.php
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include fastcgi_php_default.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
}
注意:如果我不尝试连接到外部数据库,php 网站工作正常。
编辑 - 发现差异是 nginx 和 apache 之间的 mySQL 设置
这是我连接到 apache 上的数据库时 phpinfo() 抛出的内容:
这是使用 nginx 时 phpinfo() 抛出的内容,因为我无法连接到数据库:
使用 nginx 时 mySQL 的套接字也是错误的,因为它不位于
/var/mysql/mysql.sock
而是位于:
/temp/mysql.sock
我已经在 php.ini 文件中更改了这些设置,但是在使用 nginx 时它们似乎没有被 php 读取,它似乎忽略了该文件中的任何更改。