CentOS 7 配置 LNMP + FTP 环境

CentOS 7 与前代相比有了巨大改变,  服务管理器, 时间设置等等, 对于习惯了前代版本的人来说还是需要时间适应的.

下面讲一下如何从头配置 CentOS 生产环境, 以 DigitalOcean 云主机为例, 有关此云主机的介绍 请点这里

CentOS 7 为64位系统, 最低内存要求512M.

 一. 添加常用软件源

1. 添加 Remi

Remi 主打 php 及相关扩展, 所以安装 php 这个源是不二选择.
首先进入 Remi 网站, 在 Maintained Enterprise Linux (RHEL / CentOS / Other clones) 列表中找到 Enterprise Linux 7 项后面的 remi-release-7.rpm , 执行下面的命令安装.

编辑 remi.repo 文件

修改 [remi], [remi-php56] 的 enabled 项为启用. 目前已转战 php 7.1

保存退出

编辑 remi-php71.repo, 想用稳定版的 php 7.0 就编辑 remi-php70.repo

修改 [remi-php71] 下的 enabled 项为启用.

保存退出

一般来说, 安装 Remi 源的时候会附带安装 EPEL 源, 如果没有安装, 则按以下方法安装.

2. 添加 EPEL

EPEL 包含丰富的软件, 进入网站往下拉, 找到 How can I use these extra packages? 项, 根据系统架构与版本选 The newest version of ‘epel-release’ for EL7, 点击, 系统会根据来访ip查找最快的源镜像, 国内访问通常会转到搜狐与中科大的源.如果想用美国源, 最好是用代理访问或者在服务器中输入如下命令

这会显示响应中的302跳转情况, 从中找到最终的镜像地址.
如果你是懒人, 那么给你个麻省理工的地址, 直接用吧.

 3. 添加 Nginx

进入 Nginx 官网 , 点右侧的 download 链接, 拉到最下面找到 Pre-Built Packages 项. 点 mainline version(主线版本; stable version 为稳定版本) 版本的链接. 根据提示编辑 repo 文件的内容, 具体操作如下.
在 yum repo 目录创建新的 nginx.repo 文件

输入以下内容

保存退出

4.添加 ulyaoth

这个网站貌似是个人站点, 用于分享资源和技术交流, 使用它的原因是因为这里有带 google Pagespeed 的 Nginx 包. 因 Nginx 集成 Pagespeed 需要从源码编译, 较为麻烦, 所以找了这个现成的.还需观察作者是否会持续更新. 关于 Pagespeed 请参考这里.

CentOS 7 使用下面的源

5. 添加 MariaDB

MariaDB 是 MySql 分支出来的项目, 因为 MySql 被 Oracle 收购且闭源, 所以有了 MariaDB, 并逐步添加新的功能. 最新版 10.x 已不再从 MySql 合并代码.

打开页面 https://downloads.mariadb.org/mariadb/repositories/#mirror=qiming&distro=CentOS ,选择最新版, 将下面的内容保存为 /etc/yum.repos.d/MariaDB.repo

更新 yum, 至此软件源添加完毕.

二. 配置生产环境

1. 安装 nginx

 2. 安装 php

安装 Zend Opcache 缓存扩展

如果 httpd 服务启动了, 停用此服务.

 

为了避免 nginx 与 php-fpm 使用中出现权限不足的问题(例如 wordpress 自动更新时要求授权), 建议将 nginx 与 php-fpm 的执行帐户统一, 且不允许该帐户登录系统, 且只允许操作 html 目录.

查看当前所有用户和用户组

添加一个web相关服务公用帐户并创建一个公用组, 以备后面使用.

将 nginx 的 html 目录所有者改为 webroot, 用户组改为 webroot

配置 Nginx

修改为

各选项说明

  • gzip on;
    该指令用于开启或关闭gzip模块(on/off)
  • gzip_http_version 1.1;
    识别http的协议版本(1.0/1.1)
  • gzip_min_length 1k;
    设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。
  • gzip_buffers 4 8k;
    设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,以8k为单位的4倍申请内存。
  • gzip_comp_level 2;
    gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
  • gzip_types text/plain text/css
    application/x-javascript text/xml
    application/xml application/xml+rss
    指定要压缩的 mime 类型. 无论是否指定, ”text/html” 类型总是会被压缩的.
  • gzip_vary on;
    由于客户端和服务端之间可能存在一个或多个中间实体(如缓存服务器),有些实现得有 BUG 的缓存服务器,会忽略响应头中的 Content-Encoding,从而可能给不支持压缩的客户端返回缓存的压缩版本.
    有两个方案可以避免这种情况发生:

    1. 将响应头中的 Cache-Control 字段设为 private,告诉中间实体不要缓存它.
    2. 增加 Vary: Accept-Encoding 响应头,明确告知缓存服务器按照 Accept-Encoding 字段的内容,分别缓存不同的版本.

    nginx 使用第二种方案.

启用 https

请参考 <<CentOS 7 Nginx Let’ s Encrypt SSL 证书安装配置>>

设置默认虚拟主机

找到 server 节中的 listen 参数, 在端口后面加入 default 表示此虚拟主机为默认值, 当找不到配置 server_name 虚拟主机时会使用这里的默认虚拟主机.

添加默认首页, 找到以下内容

将 root 提到 location 外层, 成为全局设置.
在 index 项中加入 index.php 类型

使用 php-fpm

禁止访问 .htxxx 文件

设置静态文件缓存时间
在 location 下方加入下面的配置.

最后的样子如下

保存退出

配置 php

将允许上传的最大值改为20M(根据需求定).

配置 php-fpm

修改用户名和用户组, 优化参数.

保存退出

重启 Nginx 与 php-fpm 服务

在 /usr/share/nginx/html 中新建 phpinfo.php 文件

保存退出

暂时关闭防火墙, 待所有服务配置完成后统一设置防火墙.

如能在浏览器中使用 ip 访问, 说明安装成功.

3. 安装 MariaDB 数据库

如果出示包冲突, 可能是因为已经安装了 mysql 相关的包, 应先卸载.

然后再次安装即可.

查询当前所有用户

增加新用户:

如,增加一个用户user1密码为password1,让其可以在任何主机上登录, 并对所有数  据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令,注意不要忘了分号.

如果你不想user1有密码,可以再打一个命令将密码去掉。

根据服务器配置优化 MariaDB

根据内存大小选择示例配置文件(位于 /usr/share/mysql/ 中, 以 my-xxxx.cnf 命名), 复制到 /etc/my.cnf.d/ 中, 然后高速参数配置. 我的服务器内存为 512M, 因此选择 my-large.cnf.

去掉 innodb 前的”#”号以启用 InnoDB 引擎, 优化各项参数

保存退出, 重启 MariaDB.

如果遇到无法启动的情况, 可能是因为 InnoDB 中设置的日志文件大小与实际存在的大小不一至. 因为这里是新安装的数据库, 所以直接删除已经存在的日志文件, 重启后会生成新的. 如果是有重要数据的数据库, 则应修改配置值为原文件相应大小.

 

4. 安装 vsFTP

创建vsftp 使用的本地帐号, 禁止在本地登录.

编辑配置文件

我们这里使用虚拟用户的形式, 配置如下.

生成vsftpd虚拟用户数据库文件
建立虚拟用户名单文件

输入以下内容

格式很简单:“一行用户名,一行密码!”。
生成虚拟用户数据文件

配置PAM验证文件

将原有内容注释或删除, 将以下内容加入到文件中.

创建虚拟用户独立配置文件

每个虚拟用户必需有一个同用户名相同的配置文件, 这个文件里保存着对这个用户的个性化配置, 里面的属性可以是 vsftpd.conf 中的任何属性.

创建虚拟用户配置文件目录, 这个目录是在 vsftpd.conf 中 user_config_dir= 配置的.

创建用户配置文件,以用户名命名.

写入以下内容

启动服务

5. 允许通过防火墙

CentOS 7 改用 FirewallD 防火墙. 但目前资料相对较少, 有些复杂的问题不知如何配置, 所以还是改回 iptables.
首先禁用 firewalld , 启用 iptables.

iptables 配置方法

刚安装完 iptables, 执行 iptables -L 命令, 查看默认配置, 看起来像下面的样子.

iptables 的匹配规则是按从上至下的顺序判断的, 遇到 REJECT 如果匹配则停止查找规则. 所以要注意 REJECT 项在规则中的顺序, 避免影响其他规则.

我们把规则清除, 重新配置.

开放 ssh 服务

开放 http 服务

开放 ftp 服务

开放 mysql

保存配置

至此, 防火墙配置完成. 其实熟悉 iptables 命令后有一种更简单的配置方式–直接编辑 iptables 配置存储文件.

用以下内容覆盖原有内容, 注意规则顺序.

保存退出, 重启服务.

 

如果是使用 firewalld 的, 配置方法如下, 使用 iptables 则可忽略.

查看 firewalld 中是否已经定义了 vsftpd 服务

没有找到 vsftpd 服务, 那么我们手动新增一个 vsftpd 服务.

所有的系统预定义服务都在 /usr/lib/firewalld/services 中, 自定义服务则在 /etc/firewalld/services/ 中

先从预定义服务中随便copy 一个到 /etc/firewalld/services/ , 命名为 vsftp.xml

编辑文件

修改名称,描述,协议和端口的定义, 删除不必要的内容. 得到如下所示.

保存退出
添加服务到当前区域

至此, ftp 服务配置完成.

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请输入正确的验证码