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

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

1.首先安裝nginxhtml

兩種方式:前端

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

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

2.配置nginxmysql

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

nginx根目錄配置問題:git

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

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

你能夠修改文件夾權限:ajax

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

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

最後嘗試的辦法是:

/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這個路徑的權限便可。

相關文章
相關標籤/搜索