百度內部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這個路徑的權限即可。
