Linux搭建nginx+php/php-fpm+mysql環境


百度內部php框架odp有單獨的nginx+php/php-fpm環境,但為了更好的實踐,自己搭建一套單獨的。

1.首先安裝nginx

兩種方式:

1)yum源安裝(使用root權限)
yum install nginx

2)使用源碼編譯安裝(可以root或者普通用戶安裝,普通用戶安裝的時候要注意指定安裝路徑)
tar xzvf nginx.tar.gz
./configure --prefix=xxxx
make && make install

2.配置nginx

yum安裝的默認nginx配置文件位置/etc/nginx/conf.d/,(具體配置文件修改說明后面補充)

nginx根目錄配置問題:

使用root安裝完軟件后,默認的網站根目錄是/usr/share/nginx/html,我想改成某一用戶下的目錄比如/home/users/A/www,但是簡單修改完訪問報錯403forbidden。

經調查嘗試后發現,在安裝nginx時,系統會默認創建新的用戶和用戶組nginx,在訪問網站時,系統是以nginx用戶訪問相應的網站目錄,如果簡單把網站根目錄修改為/home/users/A/www是沒有權限的。

你可以修改文件夾權限:

chown -R nginx:nginx www
chomd -R 777 www

但是以nginx用戶是無權限訪問上層目錄進來的。

最后嘗試的辦法是:

/etc/nginx/nginx.conf文件夾中設定了訪問的用戶是user: nginx,嘗試把這個用戶修改為A,nginx -s reload后網站成功訪問,搞定!

另外還有一個問題:

在阿里雲服務器上搭建環境時,要記住在服務器操作后台設置安全組規則,允許訪問80、8080等常用的端口號。另外,CentOS7系統的防火牆也是組織訪問的因素,所以要配置好iptables文件。

 

3.安裝PHP

安裝PHP前要明白nginx和PHP之間的通信方式是fastcgi,而php-fpm提供了對fastcgi進程管理的工具,安裝php時要編譯安裝php-fpm

參考:

http://blog.csdn.net/zhaoliang831214/article/details/51333831

http://blog.csdn.net/hwh4729/article/details/5938764

http://www.thinkphp.cn/topic/42338.html

更新yum源
CentOs 5.x 
rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm 
CentOs 6.x 
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm 
CentOs 7.X 
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm 
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
安裝php
yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php55w-gd.x86_64 php55w-ldap.x86_64 php55w-mbstring.x86_64 php55w-mcrypt.x86_64 php55w-mysql.x86_64 php55w-pdo.x86_64
安裝php-fpm
yum install php55w-fpm 
以上如果想安裝php5.6/7,修改php55w為php56w/php70w

啟動php-fpm和nginx實現通信,完成整個系統的搭建。

更換完網站根目錄后,相應的php-fpm的權限也需要變化,我就遇到一個問題,在訪問根目錄的html文件是可以的,但是php文件就不能解析,查過一些帖子,說fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;有問題,可是修改后還是不行。

於是,我找到php-fpm.conf文件,將里面的user、group都改成當前根目錄所屬的用戶,重啟php-fpm,搞定!

 

4.安裝mysql

yum list installed | grep mysql
yum remove xxx
yum install mysql-server mysql mysql-devel

修改配置文件:

vi /etc/my.cnf  修改端口號等

啟動mysql:

service mysqld start

修改用戶和用戶組:

chown -R root:root /var/lib/mysql

修改root密碼:

mysql -u root
mysql > use mysql;
mysql > update user set password=password(‘123456‘) where user=‘root‘;

添加用戶:

mysql> insert into mysql.user(Host,User,Password) values(‘localhost’,'shawn’,password(‘shawn’));
//刷新系統權限表
mysql>flush privileges;

授權外部訪問:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456'  WITH GRANT OPTION;
flush privileges;

安裝mysql時遇到的問題:

1).Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘

解決辦法是:把/var/lib/mysql和/var/lib/mysqli的文件用戶和用戶組都改為當前用戶即可。在安裝mysql時,系統默認創建mysql用戶和用戶組,造成權限問題 

2).Mysql Incorrect integer value(1366)錯誤解決方法

這種問題一般MySQL 5.x上出現。我用的mysql5.1,后面查詢得知新版本mysql對空值插入有"bug",要在安裝mysql的時候去除默認勾選的enable strict SQL mode。如果已經安裝好了的,就在my.ini中查找sql-mode,默認為sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",將其修改為sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重啟mysql后即可。

5.安裝redis

redis安裝還是挺簡單的:

yum install redis
redis-server & 啟動redis並保持后台運行
redis-cli 連接redis服務器

php與redis通信要編譯安裝並加載redis.so,具體方法如下:

下載php-redis文件:https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz
解壓進入文件夾執行:
/usr/local/php/bin/phpize #用phpize生成configure配置文件,目錄可能不同。phpize是php中bin目錄下的一個可執行文件,所有要先找到對應的目錄。

./configure --with-php-config=/usr/local/php/bin/php-config  #配置,注意要先確保/usr/local/php/bin/php-config存在。對應php的bin目錄下的php-config

make  #編譯

make install  #安裝

安裝完成之后,出現下面的安裝路徑
/usr/lib64/php/modules/

配置php支持
vi /usr/local/php/etc/php.ini  #編輯配置文件,在最后一行添加以下內容

添加
extension="redis.so"

重啟php-fpm

 

網站搭建過程中遇到的問題:

1)前端ajax請求后端返回數據,由於返回值太長被nginx截斷,無法正常顯示

Nginx 的 buffer 機制,對於來自 FastCGI Server 的 Response,Nginx 將其緩沖到內存中,然后依次發送到客戶端瀏覽器。緩沖區的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個值控制。
比如如下配置:
fastcgi_buffers 8 4K; 
fastcgi_buffer_size 4K;
fastcgi_buffers 控制 nginx 最多創建 8 個大小為 4K 的緩沖區,而 fastcgi_buffer_size 則是處理 Response 時第一個緩沖區的大小,不包含在前者中。所以總計能創建的最大內存緩沖區大小是 84K+4K = 36k。而這些緩沖區是根據實際的 Response 大小動態生成的,並不是一次性創建的。比如一個 8K 的頁面,Nginx 會創建 24K 共 2 個 buffers。
當 Response 小於等於 36k 時,所有數據當然全部在內存中處理。如果 Response 大於 36k 呢?fastcgi_temp 的作用就在於此。多出來的數據會被臨時寫入到文件中,放在這個目錄下面。
內存中緩沖了 36Kb,剩下的會寫入的文件中。而實際的情況是,運行 Nginx Process 的用戶並沒有 fastcgi_temp 目錄的寫權限,於是剩下的數據就丟失掉了。

因此,修改/var/lib/nginx/tmp/fastcgi這個路徑的權限即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM