虚拟机安装的centos
1、安装php
su - root
//也可以su root
yum -y install epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum search php72w
//这个与安装无关,只是用来看有没有对应的包
yum -y install php72w
//这个安装完之后php -v的命令还用不了
yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-fpm php72w-pdo php72w-gd php72w-mbstrig php72w-bcmatch
//这个装完之后就可以看到php -v和php-fpm -v,版本号应该是一样。
lnmp安装的php、php-fmp可能版本号不一样,甚至php-fpm很老,老到不支持一些新框架的语法。导致各种语法错误
2、安装mysql
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server
service mysql start
最后一行是启动mysql服务的,因为没有设置开机启动,所以要自行启动
3、安装nginx
yum install nginx
service nginx start
最后一行是启动nginx服务的,
4、若干配置
gedit /etc/php.ini &
;cgi.fix_pathinfo=1
改为
cgi.fix_pathinfo=0
gedit /etc/php-fpm.d/www.conf &
user = apache
group = apache
改为
user = nginx
group = nginx
因为安装的centOS是server GUI版本所以就没用命令行形式修改文本了
gedit /etc/php-fpm.d/www.conf & 直接在文本界面修改
cgi.fix_pathinfo=0为什么要这么配置不记得了
nginx配置:
修改/etc/nginx/nginx.conf的server模块
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 192.168.235.132; ###changed from _
root /usr/share/nginx/html;
index index.php index.html index.htm; ### added
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#added
location ~ .php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
}
added配置应该另起一个conf放在/etc/nginx/conf.d/目录下,listen只需要80即可,上面是为了偷懒,新建文件的话便于理解
/usr/share/nginx/html/目录下创建phpinfo.php
输入以下内容
<?php phpinfo();?>
在浏览器中输入http://localhost/phpinfo.php就可以看到php的相关信息。其他机器输入centOS的ip地址即可
小贴士:
1.
Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Socket.
其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000 ## /etc/php-fpm.d/www.conf
nginx.conf: fastcgi_pass 127.0.0.1:9000; ## /etc/nginx/nginx.conf
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.
UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题.对于进程间通讯的两个程序,UNIX Domain Socket的流程不会走到TCP那层,直接以文件形式,以stream socket通讯.如果是TCP Socket,则需要走到IP层,对于非同一台服务器上,TCP Socket走的就更多了.
UNIX Domain Socket:
Nginx <=> socket <=> PHP-FPM
TCP Socket(本地回环):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM
2.
报错403 forbidden
sestatus查看状态
gedit /etc/selinux/config &
#SELINUX=enforcing
改为
SELINUX=disabled
3.
500一般是代码错误,比如引用了其他库,但是本地没装,比如Smarty
https://www.smarty.net/
下载Source Code
4.
$_SERVER['SCRIPT_URL']是空值
gedit /etc/nginx/fastcgi_params &
加一行
fastcgi_param SCRIPT_URL $request_uri;
最好加在fastcgi_param REQUEST_URI $request_uri;下一行,只是因为两个$request_uri好看些
5.
gedit 在root权限下显示行号不起作用,非root又没有偏好设置
本来是[su root]切换到root账号
改为[su - root]切换到root账号即可