nginx+yii2 配置

之前写的一个 yii2 应用一直跑在 apache2 上,最近做压测发现 apache2 的并发处理能力的确差了点,于是想到将应用转移到 nginx 上,以下记录整个迁移过程。

安装 nginx

由于本人用的是 ubuntu16.04 ,只要使用以下命令就能快速安装 nginx 了。

sudo apt-get install nginx -y

由于之前本机安装了 apache2,如果在安装的时候报了一大堆错误,那么很有可能是在运行的 apache2 影响到了安装过程,此时需要先停止 apache2 ,可通过以下命令。

sudo service apache2 stop

nginx 成功安装后,相关的配置目录在 /etc/nginx 。可以通过以下命令来启动 nginx

sudo /etc/init.d/nginx start

此时访问本地 80 端口即可看到 nginx 欢迎页面。

php7.0-fpm 与 nginx

nginx 与 php-fpm 通信有两种方式,一种是通过 TCP,另外一种是 unix socket 。据说两者在一般情况下没有太大差异,但是在高并发情况下,unix socket 方式性能要优异一些。而且,php7.0-fpm 默认使用 unix socket 方式监听请求,这一点可以查看 /etc/php/7.0/pool.d/www.conf 来求证。截取的部分内容如下

nginx+yii2 配置_第1张图片

从第36行可以看出,php7.0-fpm 的确默认使用的 unix socket 方式的。因此,在 nginx 的配置文件中就必须要使用相应的方式,配置如下

server {
	listen 886 default_server;
	listen [::]:886 default_server;

	root /Myweb/yii2/web;
	index index.php index.html index.htm index.nginx-debian.html;

	# rewrite route
	if (!-e $request_filename){
   		rewrite ^/(.*) /index.php last;
  	}

	server_name _;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		# include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                include fastcgi.conf;
	}
}

以上配置,监听 886 端口,服务器根目录为 /Myweb/yii2/web ,对应 yii2 的入口。 fastcgi_pass unix: /run/php/php7.0-fpm.sock 表示使用 unix socket 方式与 php-fpm 通信。 include 的根目录为 /etc/nginx/。

开启 nginx 的路由重写

以上配置文件中,如下几行起到了开启路由重写的作用。之前看到很多博文说要另写文件去开启路由重写,后来才发现只要在 sever 配置内写入重写规则即可,没必要另外再新建重写文件。

if (!-e $request_filename){
   	rewrite ^/(.*) /index.php last;
}

  rewrite 是路由重写的指令,根据正则表达式的内容,重定向到replacement,结尾是flag标记。

 rewrite            [flag];

 关键字      正则        替代内容          flag标记

具体的可参考其他博客。

参考链接:

总结Ubuntu下部署LNMP环境

Nginx URL重写(rewrite)配置及信息详解

你可能感兴趣的:(web)