百度内部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这个路径的权限便可。