0%

Nginx 支持 php 和 ThinkPHP

遇到问题

在linux-mint下安装完 Nginx 后,当然要支持php才能真正工作。可是尝试了很久都没有成功(以前很容易就成功了),原来是 php-fpm 支持方式发生了变化,我以前用的方法早已经过时了。 

详细过程

Nginx 无论是用apt方式还是用编译方式都不麻烦,所以直接记录 php-fpm 的配置。按照以前的思想,php-fpm 工作在127.0.0.1:9000端口上,我直接配置后却出现了502 Bad GateWay页面。查看nginx日志文件,发现错误是无法连接到本机9000端口。于是查找 php-fpm.conf,在其兄弟文件夹 pool.d 下发现 www.conf,关键一句打开是这样的listen = /var/run/php5-fpm.sock,通过查阅资料得知php-fpm有两种工作方式,一种是利用tcp,另一种直接使用socket,socket的方式会更快。因此,nginx下的配置fastcgi_pass 127.0.0.1:9000;的方式显然不支持 socket 方式。所以,只需要将其更改为fastcgi_pass unix:/var/run/php5-fpm.sock;以后,Nginx 就可以正常工作了。

支持 ThinkPHP

对 ThinkPHP 的支持其实主要是对 .htaccess 文件的支持,主要是为了去掉 index.php。实现有两种方式,其中一种是直接引入include $path/.htaccess,另一种是修改location / {},但是 Apache 和 Nginx 的 .htaccess 文件语法不同,在 Nginx 下正确的配置是

1
2
3
4
5
6
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

其他

  • 多站点支持可以连续写也可以各自写在相应的server.conf中。

  • 多域名和子域名配置时支持连写server_name [[www.adc.com](http://www.adc.com)]([http://www.adc.com](http://www.adc.com)) lol.adc.com也支持通配符*.adc.com