最近把服务器的架构从LAMP换成了LNMP(linux + nginx + mysql + php),顺便换了个服务器。下面把过程记录一下。
2017/7/17 更新 : centos 6.9 + nginx 1.12.1 + mysql 5.7 + php 7.1 上一次的apache 在低配置服务器下的优化 执行完,博客已经在LAMP稳定的运行了133天。
可以看出,优化还是比较成功的,那么这次为什么要改成LNMP呢?
原因是我感觉有时候浏览blog的时候速度很慢,但过一会儿又很快,感觉是apache阻塞式运行方式造成了并发不行。。。
现在换了LNMP后,没有感觉这些问题。
服务器系统为centos 6.
环境部分
Nginx
首先编辑源
- vim /etc/yum.repos.d/nginx.repo
输入如下内容
1 | [nginx] |
然后使用yum安装步骤如下
- sudo yum install nginx
- sudo /etc/init.d/nginx start
这时候可以通过IP地址访问你的站点看看是否是nginx呢?
忘记IP了?(如下命令打印出IP)
1 | ifconfig eth0 grep inet awk '{ print $2 }' |
接下来进行配置,打开 sudo vi /etc/nginx/nginx.conf
- 将worker_processes 设置为4;
PHP安装和配置
新版安装
yum默认的版本太老了,装5.6配置一下源:
1 | CentOS/RHEL 7.x: |
然后安装php7
yum install php71w php71w-fpm php71w-mysql
如果要安装php5.6
yum install php56w php56w-fpm php56w-mysql
旧版安装
系统默认的比较老,可以直接:
sudo yum install php-fpm php-mysql
配置
接着编辑php.ini文件,将cgi.fix_pathinfo设置为0
sudo vi /etc/php.ini
cgi.fix_pathinfo=0
sudo vi /etc/php-fpm.d/www.conf
- 设置用户和组别为nginx
[...] ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx [...]
重启php-fpm
sudo service php-fpm restart
PHP-FPM优化
由于是小的内存,只有512MB,除开启虚拟内存外,我对php-fpm也进行了优化。
sudo vi /etc/php-fpm.d/www.conf
1 | pm.max_children = 20 |
Mysql
Mysql5.7新版安装
要安装新版本可以先去https://dev.mysql.com/downloads/repo/yum/ 找到系统对应源的地址
比如我的:
1 | wget https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm |
然后安装
1 | sudo yum localinstall mysql57-community-release-el6-11.noarch.rpm |
Mysql5.7默认 root 安装了 validate_password 插件,这个插件要求必须使用强密码,生成的 root 密码在 /var/log/mysqld.log,查看:
cat /var/log/mysqld.log grep password
然后
sudo /usr/bin/mysql_secure_installation
输入密码后,修改密码(要求强密码,最好字母大小写、数字、特殊字符),然后一路按y
旧版安装
系统yum里面的为5.1版本,安装直接如下:
sudo yum -y install mysql-server
sudo /etc/init.d/mysqld restart
打开设置向导,设置好密码后,一路yes
sudo /usr/bin/mysql_secure_installation
配置
登入mysql
mysql -u root -p
创建数据库
create database wordpress;
创建用户把hrwhisper改成你的用户即可
create user hrwhisper@localhost;
设置密码
set password for hrwhisper@localhost=password("123456");
设置权限
grant select,insert,update,delete,create,index,references,alter on wordpress.* to hrwhisper@localhost identified by '123456';
做完上面的步骤后
FLUSH PRIVILEGES;
exit;
恢复数据库
如果是旧的站点,可以将数据库导入,方法如下:
登录数据库后,进行如下操作
(1)选择数据库 mysql>use abc;
(2)设置数据库编码 mysql>set names utf8;
(3)导入数据(注意sql文件的路径) mysql>source /home/abc/abc.sql;
获取wordpress
和LAMP一样,
wget http://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php
sudo vi ~/wordpress/wp-config.php
- 修改如下内容
// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'wordpress');
/** MySQL database username */ define('DB_USER', 'wordpressuser');
/** MySQL database password */ define('DB_PASSWORD', 'password');
sudo mkdir -p /var/www/html
sudo cp -r ~/wordpress/* /var/www/html
cd /var/www/
修改用户和用户组
sudo chown nginx:nginx * -R
sudo usermod -a -G nginx username
配置nginx路径
sudo vim /etc/nginx/conf.d/default.conf
这里列举修改的地方
- 在index那行中添加index.php
- 改变根目录为 /var/www/html;
- 把 "location ~ .php$ {", 的注释全部去掉
- 改变location ~下的root路径为/var/www/html;
- 修改fastcgi_param
可以参考如下:
1 | # |
设置自启动
配置完上面的记得重启一下
1 | sudo chkconfig --levels 235 mysqld on |
到这里,基本配置已经结束,站点已经能正常访问。 下面是进阶的配置,如开启gzip、rewrite、https等
其他的配置
开启gzip
- vim /etc/nginx/nginx.conf
1 | gzip on; |
开启rewrite
不开启rewrite wordpress修改固定链接是无法使用的
vim /etc/nginx/conf.d/default.conf
下面是一个完整的vhost的配置文件
1 | location / { |
开启swap
参考:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-centos-6
开启https
我开启了强制HTTPS,所以 /etc/nginx/conf.d/default.conf 配置为
1 | server { |
接下来配置/etc/nginx/conf.d/ssl.conf,主要是把ssl 设为on,
然后设置ssl_certificate 和ssl_certificate_key为你证书的路径(注意不能直接拿apache的来用,那个有3个,直接用证书链不完整,电脑OK,但手机显示不受信任)
PS: 还没有证书?参考Centos 获取 Let’s Encrypt 证书
设置ssl协议为 TLSv1 TLSv1.1 TLSv1.2 , (不要SSL3 SSL2),这样兼容了绝大部分的机器,并更安全。此外,设置了ssl_ciphers,开启了HSTS。
剩下的其实就是普通站点原来的default.conf复制过来的。
在 SSL安全性 评分中(https://www.ssllabs.com/ssltest/),达到最高的等级A+
下面是完整的配置文件:
1 | # |