2016年3月27日 星期日

CentOS 7 下安裝 Mariadb + phpMyAdmin 搭配 Nginx + php-fpm




















# 安裝 Mariadb
yum install mariadb mariadb-server -y

# 開啟 Mariadb
systemctl start mariadb

# 設定為服務
systemctl enable mariadb

# mysql 安裝
mysql_secure_installation

# 安裝畫面


# 登入
mysql -u root -p



# 查看 db
show databases;

# 離開 mariadb
exit

# 安裝 phpmyadmin
yum install epel-release
yum install phpmyadmin


# 安裝 php
yum install php php-mysql php-fpm

# 設定 phpmyadmin 到 nginx 的目錄下
ln -s /usr/share/phpMyAdmin /usr/share/nginx/html

# 修改 cgi.fix_pathinfo = 0, 1表示找尋相似(相近)的檔案讀取, 關閉此功能讓系統安全一點
參考: cgi.fix_pathinfo 漏洞

vim /etc/php.ini

# 找到 cgi.fix_pathinfo, 設定為 0
cgi.fix_pathinfo=0

# 修改 php-fpm 的設定檔 www.conf
vim /etc/php-fpm.d/www.conf

# 找到 listen, 修改如下列所示(檔案尚未產生, 等重新執行 php-fpm 後就會有了)
listen = /var/run/php-fpm/php-fpm.sock

# 接下來找 listen.owner 跟 listen.group, 取消註解
listen.owner = nobody
listen.group = nobody

# 最後找 user 跟 group, 將他們的值從 apache 改成 nginx
user = nginx
group = nginx

# 重新執行 nginx
systemctl restart nginx
# 設定成服務
systemctl enable nginx
再來設定 Nginx, 讓他可以執行 php-fpm(未設定好, php 的檔案會變成下載的方式讀取)

# 修改 Nginx server block level(Nginx服務區塊, 類似 apache 的 virtual host)
vim /etc/nginx/conf.d/default.conf
# 修改內容如下
server {
    listen       80;
    server_name  localhost;

    # note that these lines are originally from the "location /" block
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

# 重啟 Nginx
systemctl restart nginx

開啟 phpmyadmin 之後發現 session 寫入有問題
因為 nginx 沒有寫入 php/session 的權限


# 修改 php/session 的權限
chown nginx:nginx /var/lib/php/session

# 重新開啟 phpmyadmin, 正常了

登入 phpMyAdmin 後出現 blowfish_secret 錯誤
# 修改 /usr/share/phpMyAdmin/libraries/config.default.php
vim /usr/share/phpMyAdmin/libraries/config.default.php

# 填入隨便一組加密碼
$cfg['blowfish_secret'] = 'oxoxox12345';

# 重新登入 phpMyAdmin 後就正常了


之前由於 php-fpm 沒設定
導致透過 nginx 開啟 php 網頁都變成下載 php 的檔案
連到 localhost/phpMyAdmin 則會出現 403 forbidden

用 google 查了 nginx phpmyadmin 403 forbidden
大部分都是檔案缺少或是權限問題
可是我實際處理之後發現我的問題似乎不在此

後來就回頭去研究 nginx + php-fpm 的設定
參考了 How To Install LEMP(Linux Nginx Mysql PHP) 之後
所有的問題就都解決了

沒有留言: