配置LEMP(linux+nginx+mysql/myariadb+php7-fpm)以及HTTPS

By | July 3, 2017

说明:
这篇日志以在Centos上部署Nginx + MySQL + PHP fpm (WordPress,为例阐述了这项任务的必要步骤,假设是Wordpress的文件目录已经在服务器本地,并且曾经(在另一地方)部署过。

准备工作: 需要安装Nginx,此前已经发布一篇关于编译安装Nginx的文章,请参照该文——CentOS7 编译安装Nginx

配置 PHP-FPM

  1. 编辑/etc/php.ini 文件:
  2. 编辑/etc/php-fpm.d/www.conf 文件:
    取消注释并修改以下项:

    取消注释以下项的注释:
  3. 启动php-fpm并将其设为开机启动:
  4. 查看FPM是否已经运行

    执行结果类似如下:

配置Nginx

  1. 编辑/etc/nginx/nginx.conf文件:
    将http指令内server部分注释,然后添加以下部分:
    (此处根据wordpress官方网站上的建议,详见[Nginx « WordPress Codex](https://codex.wordpress.org/Nginx))
  2. 將wordpress的目录属主和属组设为nginx,开启SELinux的系统需要设置允许Nginx访问目录以及80、443两个端口的安全规则。
  3. 启动Nginx
  4. 通过浏览器访问绑定的域名,得到有“No input file specified.”提示的页面,而且访问日志(access.log)中显示该请求的状态码是404。可通过修改虚拟目录下所有的文件属主为nginx解决此问题。重新访问,已经可正常访问。

配置HTTPS

这里使用Let’s Encrypt提供的HTTPS证书,通过Certbot自动获取证书。
可以在以下网站查找到各种平台和服务器如何获取和自动部署HTTPS证书的教程:https://certbot.eff.org/

获取证书的步骤如下:

  1. 运行如下命令安装依赖:
  2. 运行Certbot,將自动部署HTTPS证书,:

    • 如果出现“ImportError: ‘pyOpenSSL’ module missing required functionality. Try upgrading to v0.14 or newer.”错误,解决办法见站内文章:解决certbot安装证书时出现的“ImportError: ‘pyOpenSSL’ module missing required functionality. Try upgrading to v0.14 or newer.”错误
    • 如果出现:

      这样的错误,要检查443端口是否开放。当出现以下消息时表示部署成功:

检查HTTPS的安全性:

访问:
https://www.ssllabs.com/ssltest/analyze.html?d=domian1.com
https://www.ssllabs.com/ssltest/analyze.html?d=domian2.com
其中,可通过以下方法增加安全性从而获得更高的评分:

  • 配置HSTS(HTTP严格传输安全,HTTP Strict Transport Security)
    1. 將下面的语句插入到SSL相关的server 指令中:
  • 使用前向安全性:
    1. 生成一个更强壮的DHE参数
    2. 在/etc/nginx/nginx.conf http块添加:
  • 启用OCSP装订:
    1. 生成证书链文件:
    2. 编辑Nginx配置文件,在http块中添加:
  • 启用HTTP公钥固定扩展(HPKP),具体步骤请移步[HTTPS配置HPKP](/2017/07/926.html)
  • 配置加密套件:

    可能Nginx会提示重复的ssl_ciphers,这时注释掉这行。
  • 重启Nginx

设定计划任务

每天11:59和23:59执行证书的更新操作
编辑/etc/crontab文件:

LEMP的部署到此完成。

部署过程中出现的一些问题及解决方案

  • 如果重启nginx或者重启电脑后启动之时出现如下的错误日志:

    通过取消注释并修改Nginx配置文件方式来解决该问题:

启动Nginx即可解决问题!
参考资料:
How to Install Laravel 5.x with Nginx and PHP-FPM 7.1 on CentOS 7
Certbot
微信公众号:codelast的文章《为nginx服务器网站添加HTTPS/配置SSL证书》
解决NGINX PHP “No input file specified”
PID file /run/nginx.pid not readable (yet?) after start | SvennD
增强 nginx 的 SSL 安全性-系统运维|Linux.中国-开源社区

Created on 2017.07.02


© 2017 – 2018, Navin. All rights reserved.

鉴于本人的相关知识储备以及能力有限,本博客的观点或者描述如有错漏或是有考虑不周到的地方还请多多包涵,也欢迎指正,一起学习,共同进步。