墨斋记

Good Luck To You!

CentOS 7 配置 LNMP + FTP 环境

配置生产环境

1. 安装 nginx

#安装nginx官方版本yum install nginx #或安装带 Pagespeed 的 nginxyum install ulyaoth-nginx-mainline-pagespeed systemctl enable nginx #随系统启动systemctl start nginx #启动服务



 2. 安装 php

yum install php php-fpm php-mysql php-pdo php-gd php-intl php-bcmath php-cli php-mbstring php-mcrypt php-pecl-zipsystemctl start php-fpm #启动服务systemctl enable php-fpm #随系统启动

安装 Zend Opcache 缓存扩展



yum install php-opcache

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



systemctl disable httpd #禁止随系统启动systemctl stop httpd #停用服务

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

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

#查看用户cat /etc/passwd#查看用户组cat /etc/group

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



#新建名为 webroot 的用户组groupadd webroot #添加一个名为 webroot 的帐户, 不允许登录系统. 并加入到 webroot 用户组.useradd -g webroot -s /sbin/nologin webroot #查看某用户所属的用户组groups webroot

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



chown -R webroot:webroot /usr/share/nginx/html

配置 Nginx


nano /etc/nginx/nginx.conf


修改为


#上一步中新增的用户名user  webroot;#nginx 使用的线程数, cpu核数 * 2 最佳.worker_processes 2;#并发请求时使用线程的顺序, 用二进制位表示.worker_cpu_affinity 01 10; error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;  events {    #最大连接数    worker_connections  1024;    #允许 Nginx 在已经得到一个新连接的通知时接收尽可能更多的连接    multi_accept on;} http {    include /etc/nginx/mime.types;    default_type application/octet-stream;     log_format main '$remote_addr - $remote_user [$time_local] "$request" '    '$status $body_bytes_sent "$http_referer" '    '"$http_user_agent" "$http_x_forwarded_for"';     access_log /var/log/nginx/access.log main;     sendfile on;    #tcp_nopush on;     keepalive_timeout 65;     #启用 gzip 压缩    gzip on;    gzip_vary on;    gzip_http_version 1.1;    gzip_min_length 1k;    gzip_buffers 4 8k;    gzip_comp_level 2;    gzip_types text/plain text/css               application/x-javascript text/xml               application/xml application/xml+rss               text/javascript application/javascript               image/svg+xml;     include /etc/nginx/conf.d/*.conf;}

各选项说明

  • 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,从而可能给不支持压缩的客户端返回缓存的压缩版本.
    有两个方案可以避免这种情况发生:

    nginx 使用第二种方案.

    1. 将响应头中的 Cache-Control 字段设为 private,告诉中间实体不要缓存它.

    2. 增加 Vary: Accept-Encoding 响应头,明确告知缓存服务器按照 Accept-Encoding 字段的内容,分别缓存不同的版本.

启用 https

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

设置默认虚拟主机

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

server {    listen       80 default;    server_name  localhost;     #以下省略}

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



location / {      root   html;      index  index.html index.htm;}

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



root /usr/share/nginx/html; location / {      index  index.html index.htm index.php;}


使用 php-fpm


location ~ .php$ {    fastcgi_pass   127.0.0.1:9000;    fastcgi_index  index.php;    fastcgi_param SCRIPT_FILENAME $request_filename;    #或者像下面这样也是可以的    #fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;    include        fastcgi_params;}

禁止访问 .htxxx 文件

location ~ /.ht {    deny all;}


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


#设置静态文件过期时间为10天location ~ .*.(gif|jpg|jpeg|png|bmp|swf)${    expires 10d;} #设置js, css文件过期时间为1天location ~ .*.(js|css)?${    expires 1d;}

最后的样子如下

nano /etc/php-fpm.d/www.conf#修改用户名和用户组, 优化参数.user = webrootgroup = webroot pm.max_children = 20pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 20pm.max_requests = 120

保存退出

重启 Nginx 与 php-fpm 服务

systemctl restart nginxsystemctl restart php-fpm

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




nano /usr/share/nginx/html/phpinfo.php<?php  phpinfo();?>

保存退出

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

systemctl stop iptablessystemctl stop firewalld #如果使用 firewallD 防火墙, 则是这样关闭

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

3. 安装 MariaDB 数据库

yum install mariadb-server mariadb-client#如果出示包冲突, 可能是因为已经安装了 mysql 相关的包, 应先卸载.yum remove mysql*#然后再次安装即可.systemctl enable mariadb #随系统启动systemctl start mariadb #启动服务#查询当前所有用户mysqluse mysql;select host,user,password from user;#增加新用户:	grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”mysqlgrant <select,insert,update,delete|all> on *.* to user1@'%' identified by "password1";flush privileges;#如果你不想user1有密码,可以再打一个命令将密码去掉。mysqlgrant <select,insert,update,delete|all> on *.* to user1@'%' identified by "";flush privileges;quit

根据服务器配置优化 MariaDB

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



cp /usr/share/mysql/my-large.cnf /etc/my.cnf.d/myserver.cnfnano /etc/my.cnf.d/myserver.cnf#去掉 innodb 前的”#”号以启用 InnoDB 引擎, 优化各项参数[client]default-character-set = utf8 [mysqld]#将默认引擎改为 innodbdefault-storage-engine = innodbcharacter-set-server=utf8 port = 3306socket = /var/lib/mysql/mysql.sockskip-external-lockingkey_buffer_size = 96Mmax_allowed_packet = 4Mtable_open_cache = 512sort_buffer_size = 2Mread_buffer_size = 2Mread_rnd_buffer_size = 4Mmyisam_sort_buffer_size = 64Mthread_cache_size = 8query_cache_size= 32M# Try number of CPU's*2 for thread_concurrencythread_concurrency = 2 innodb_data_home_dir = /var/lib/mysqlinnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /var/lib/mysql# You can set .._buffer_pool_size up to 50 - 80 %# of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 96Minnodb_additional_mem_pool_size = 20M# Set .._log_file_size to 25 % of buffer pool sizeinnodb_log_file_size = 64Minnodb_log_buffer_size = 8M#日志先写到磁盘缓存, 再写到磁盘, 而不是强制写入磁盘innodb_flush_log_at_trx_commit = 2innodb_lock_wait_timeout = 50

保存退出, 重启 MariaDB.


systemctl restart mariadb

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




https://blog.itnmg.net/2015/03/11/centos-7-lnmp-ftp/


发表评论:

Powered By Z-BlogPHP 1.7.3

冀公网安备13019902000834
冀ICP备18019600号-1
Copyright CC Some Rights Reserved.Contact Email:chengyingbo88@163.com