折腾VPS笔记:Debian+LNMP (NMP配置)

nginx和php5-fpm的配置

nginx的配置要和php5-fpm联合起来说。

这俩是什么关系呢?原先在LAMP中,Apache接受客户端的请求,发现是php文件的话,就扔给mod_php来处理。而用了nginx+php5-fpm的话,nginx接受请求,把php文件扔给php5-fpm来处理。

其实,Apache也可以把php扔给php5-fpm,nginx也可以把php扔给Apache的mod_php(很多人这么干),不过我还没看出来这有什么好处。

1、设置php5-fpm

vim /etc/php5/fpm/php-fpm.conf

查找:events.mechanism

把这一行改成:

events.mechanism = epoll

如果前面有分号,就去掉。这个epoll很重要,能大幅提升高并发状态下的性能。详情可以百度百科

vim /etc/php5/fpm/pool.d/www.conf

这个文件里面要改这几个地方:

  • 把user和group都改成nginx
  • listen = /var/run/php5-fpm.sock这一句前面如果有分号就去掉。有的版本这里可能是listen=127.0.0.0:9000。
  • listen.owner 和listen.group 都改成 nginx,同样,如果有分号就去掉。
  • listen.allowed_clients = 127.0.0.1,如果前面有分号就去掉。

关于这个listen,指的是侦听通道。这个设置在nginx的网站设置文件和这里各有一个,两边要统一,要么都用sock,要么都用IP:port。nginx和fpm就是通过它来通讯的。

2、设置nginx服务器

vim /etc/nginx/nginx.conf

找到events部分,在里面加一句:use epoll;

经我测试,似乎也可以不加,默认就是epoll。

3、设置网站

vim /etc/nginx/conf.d/default.conf

conf.d里面一个conf文件对应一个站点。当然你其实也可以把所有站点写到一个conf文件里,不过不建议这样做。

改这几个地方:

server_name xxxx.com www.xxxx.com '网站域名
location / {
    root /usr/share/nginx/html/siterootpath; /*网站根目录*/
    index index.html index.htm index.php; /*默认页面,加上index.php*/
}
#下面这一段是将php文件pass给fpm来处理
location ~ .php$ {
    root /usr/share/nginx/html/siterootpath;
    #fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    #将默认的上面这一句的/scripts改为$document_root,除非你所有的php代码都在/script文件夹下
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

MariaDB/MySQL的配置

MySQL现在出现了两个分支,MariaDB和Percona,也许还有别的,太小众咱就不关注了。这俩都号称完全兼容MySQL,功能只多不少。所以配置方法也是通用的。我这里记录的是Debian8.0所带的版本,官方源安装的版本可能有些地方不一样,比如cnf文件的位置。

安装中会问你root密码。安装完了以后最好还是运行下mysql_secure_installation,root密码不用重设,后面的问题全部答Y。

/etc/mysql/my.cnf基本不用改,建议不要往里面增加内容,如果要增加设置项,在/etc/mysql/conf.d里面新建一个.cnf文件,把要设置的东西写在里面就行了。

Debian版本的MariaDB,里面内置了一个debian-sys-maint用户,具有root权限。查了一下,貌似是用来启停服务等等的。有什么好处我也不懂。据说把它删了的话就不能启动停止服务了。所以我没删,只是把它的权限给限制了。只给保留了SUPER PROCESS RELOAD SHUTDOWN四个管理权限。似乎也并没有什么影响。另外这个用户的密码是直接明文写在/etc/mysql/debian.cnf里的,不知道为什么。

数据库配置方面,比较复杂,大家可以自行百度。

关于systemctl

Debian8使用了systemd,所以,现在我们可以用systemctl命令来代替之前的service和chkconfig/update-rc.d来管理服务。格式是:

systemctl start/stop/restart/enable/disable 服务名.service

start/stop/restart就不解释了。

enable/disable的意思是将这个服务设为自动启动或禁止自动启动。

比如:

启动nginx:

systemctl start nginx.service

重启MariaDB:

systemctl restart mysql.service

另外,在CentOS/Redhat中用chkconfig 服务名 on/off用来打开、关闭某个服务的开机自动启动,在Debian中没有这个命令,之前比较麻烦,要用update-rc.d之类的来做,现在我们这样:

systemctl enable/disable 服务名.service

systemd争议较大,什么UNIX原则之类的。但是现在Redhat/Debian都选择了它,所以就用吧。

 

Leave a Reply

Your email address will not be published. Required fields are marked *