網路伺服器:chrooted PHP 在嘗試訪問 mysql 時給出 mysql.sock 錯誤
我已經用 Nginx + PHP5-FPM 配置了一個 Ubuntu 網路伺服器。我創建了一個 chrooted 環境(使用 jailkit),我將我的開發人員投入其中,他們可以從那裡開發他們的測試應用程序。
Chroot 監獄:/home/jail
Nginx 和 PHP5-FPM 在 chroot 之外執行,但配置為與 chroot 環境中的網站一起執行。
到目前為止,Nginx 和 PHP5-FPM 提供文件都沒有問題,除了以下內容:嘗試連接到 MySQL 時,我們收到此錯誤:SQLSTATE$$ HY000 $$ $$ 2002 $$無法通過套接字 ‘/var/run/mysqld/mysqld.sock’ 連接到本地 MySQL 伺服器
現在,我認為問題是由於非 chrooted php.ini 在 chroot 環境之外引用了 mysqld.sock (它目前實際上使用的是 MySQL 預設設置)。
我的問題是,如何配置 PHP 以通過環回或類似方式訪問 MySQL?(在Google結果中發現這是一個建議,但沒有任何說明)
或者,如果我遺漏了其他一些明顯的設置,請告訴我。如果有創建硬連結的選項(即使重新啟動 mysql 也仍然可用),那也很方便。
我解決了我自己的問題。Jailkit 無法創建對 mysqld.sock 的硬連結引用,因為 Ubuntu 將 /var/run 儲存在 tmpfs 中,這在系統看來是一個單獨的分區(這會破壞硬連結功能)。相反,我現在將 /var/run/mysqld 掛載在監獄中,如下所示:
mount --bind /var/run/mysqld /home/jail/var/run/mysqld/
使用 as
host
value127.0.0.1
怎麼樣?它使用不寫入套接字的 TCP 連接(與localhost
unix 上的值不同)。