apache mod_wsgi 部署django項目後鏈接不上mysql

問題描述

作好的django項目,使用python manage.py runserver 能夠正常work. 然而當將項目使用mod_wsgi部署到apache上以後卻不能鏈接mysql.一直報錯:「Internal Server Error」,查看日誌信息,除了「Can't connect mysql」仍是連不上mysql.python

追蹤問題

django測試

分別在debug模式以及debug off模式下運行項目,無任何異常,足以證實項目自身配置沒任何錯誤。mysql

Python代碼測試

運行python manage.py shell,導入MySQLdb,使用驅動代碼測試也無異常。說明驅動的版本什麼的沒有錯誤。web

查看源碼

在django/admin/db/backend/mysql/base.py中直接修改鏈接數據庫的參數信息,並在MySQLdb中的_init.py中打印傳進來的參數信息。sql

  1. python manage.py runserver debug模式開與關打印出來的信息一致。shell

  2. 開啓apache 訪問主頁打印出來的信息與上述信息無差別。數據庫

這麼以來就能夠得出結論:項目組件以及配置沒什麼錯誤。apache

尋找答案

通過問題的一系列追蹤,查詢網絡無果。想起mod_wsgi這貨,再根據這個去搜得出結論apache在安裝的時候所配置的系統用戶apache/apache沒有權限訪問默認的mysql.sock配置文件所在路徑。讓修改這個權限,但是真不會修改。因而開始下面的嘗試:django

  1. 直接修改apache配置文件中的user和group爲root,比較系統中root的權限最高,沒有他訪問不了的東西。結果在重啓apache的時候報錯,不容許使用root用戶。網絡

  2. 又將其修改成mysql/mysql,因mysql/mysql是咱們在安裝mysql時所使用的系統用戶。重啓卻無任何影響,依然是Can't connect mysql測試

  3. 再想一想,通常項目生產環境也不會把web跟db配置在一臺Server上倒不如換個其餘機器上的mysql配置。果真如此能夠正常訪問了。

  4. 因SELinux阻止apache訪問,另外一個問題就是須要爲apache受權:

    setsebool -P httpd_can_network_connect 1

    setsebool -P httpd_can_network_connect_db 1

相關文章
相關標籤/搜索