1. 博客/

Nginx+php-fpm分离部署搭建wordpress

·419 字·2 分钟
Linux Wordpress

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。它是基于事件驱动模型,能承受万级别的高并发http请求。由于其负载性能很好,它合适做前端服务器,而高速处理静态类文件也是它的优点。nginx通过使用ngx_http_fastcgi_module模块也可以将客户端动态请求反向代理到后端的php-fpm,两者之间遵循FastCGI协议。

php-fpm(php-Fastcgi Process Manager)也是FastCGI的具体实现,可以独立运行并提供服务也提供了进程管理的功能。它的工作模式类似于prefork,包含 master 和 worker两种进程。 master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程响应一个请求,而且内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。nginx与php-fpm可以配置在同一台服务器上,也可以独立部署,在并发访问量不是很大时,建议采用后者的结合方式。

本文将分离部署nginx与php-fpm服务,拓扑模型如下:

nginx+php-fpm
php-fpm服务器上部署wordpress,并开启nfs服务,导出wordpress所在目录到nginx服务器,将nginx根目录挂载到导出目录,配置nginx实现只将php动态请求交由php-fpm服务器处理,其它静态文件则有nginx直接响应。

配置nginx服务器
#

使用yum源安装$ yum install -y nginx

创建虚拟服务器配置文件

$ vim /etc/nginx/conf.d/vhost.conf

#http上下文中定义压缩;server中单独定义gzip on|off;
gzip_min_length 64;
gzip_comp_level 2;
gzip_types text/xml text/plain text/css application/json application/x-javascript  application/xml application/xml+rss text/javascript;
gzip_proxied any;

#http上下文中定义fastcgi_cache,server|location中调用
fastcgi_cache_path /data/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;

server{
        server_name www.ffu.com;
        listen 80 ;
        
        #实现https跳转
        rewrite /(.*)$ https://www.ffu.com/$1;
}
server{
        server_name www.ffu.com;
        location / {
        root /data/www/web1;
        index index.php index.html;
        }
        
        #实现https
        listen 443 ssl;
        ssl on;
        ssl_certificate /etc/nginx/nginx.crt;
        ssl_certificate_key /etc/nginx/nginx.key;
        ssl_session_cache shared:sslcache:20m;
        
        #定义访问策略
        allow 192.168.196.0/24;
        deny all;
        
        #启用压缩功能
        gzip on;

        #文件操作优化
        aio on;
        open_file_cache max=1000 inactive=20s;
        open_file_cache_valid 50s;
        open_file_cache_min_uses 2;
        open_file_cache_errors off;
        
        #防盗链,只允许指定域名能引用资源
        valid_referers none block server_names *.ffu.com ffu.* ~\.ffu\.;
        if ($invalid_referer) {
        return http://www.ffu.com/invalid.jpg;
        #return 403;
        }

        location ~* \.php$ {
        #反代php动态请求到后端php-fpm服务器上应用所在的目录
        fastcgi_pass 192.168.196.131:9000;
        fastcgi_param SCRIPT_FILENAME  /data/www/app$fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
        
        #fastcgi缓存设置
        fastcgi_cache fcgi;
        fastcgi_cache_key $request_uri;
        fastcgi_cache_valid 200 302 10m;
        fastcgi_cache_valid 301      1h;
        fastcgi_cache_valid any      1m;
        }
        
        #对php-fpm的内嵌状态页请求直接反代到后端php-fpm服务器
        location ~* ^/(status|ping) {
        fastcgi_pass 192.168.196.131:9000;
        fastcgi_param SCRIPT_FILENAME  $fastcgi_script_name;
        include fastcgi_params;
        }
        
        #指定错误页面
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}

实现ssl加密的私钥及证书申请,这里不再单独介绍,详情参考另一篇 关于使用openssl工具创建私有CA的博客

配置php-fpm服务器
#

  • 使用yum源安装$ yum install -y php-fpm
$ vim /etc/php-fpm.d/www.conf
listen = 192.168.196.131:9000                 <-- 监听的套接字
user = nginx
group = nginx
pm = dynamic
pm = static                                    <--静态配置
pm.max_children = 256                          <--开启的最大php进程数
pm.max_requests = 1024                         <--在执行了1024个请求后重启worker进程
pm.status_path = /status
ping.path = /ping

服务器内存较大时建议直接计算后配置静态资源池,可以减少频繁prefork进程所带来的开销,提高服务质量

  • 配置nfs服务
$ yum install nfs-utils rpcbind
$ useradd -r -s /sbin/nologin nginx                     <-- 创建nginx用户
$ id nginx
uid=996(nginx) gid=994(nginx) groups=994(nginx)

$ vim /etc/exports
#设定导出目录,只允许nginx服务器挂载,压缩所有远程用户为特定用户(nginx)的UID与GID
/data/www/app 192.168.196.129(rw,sync,all_squash,anonuid=996,anongid=994)
  • 配置mysql
$ yum install mariadb-server
$ mysql_secure_installation                             <-- 安全初始化root账户密码
$ mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 10.2.7-MariaDB-log MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database blogdb;                <-- 创建wordpress的数据库
MariaDB [(none)]> grant all on blogdb.* to wpuser@'192.168.196.%' identified by '123456';
<-- 创建wordpress连接mysql的账户
  • 安装wordpress
$ mkdir /data/www
$ tar xf wordpress-4.8-zh_CN.tar.gz -C /data/www/
$ cd /data/www
$ ln -sv wordpress  app                        <--创建指向wordpress的软链接
$ chown -R nginx.nginx app/*

$ mv wp-config-sample.php wp-config.php
$ vim wp-config.php                                     <-- 配置接口连接至mysql服务器

/** WordPress数据库的名称 */
define('DB_NAME', 'blogdb');
/** MySQL数据库用户名 */
define('DB_USER', 'wpuser');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123456');
/** MySQL主机 */
define('DB_HOST', '192.168.196.131');

nginx服务器根目录挂载到nfs导出目录
#

$ vim /etc/fstab
192.168.196.131:/data/www/app /data/www/web1   nfs     defaults      0 0    
$ mount -a
$ mount
192.168.196.131:/data/www/app on /data/www/web1 type nfs (rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.196.131,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.196.131)

客户端浏览器访问wordpress
#

开启各服务之后,在浏览器中访问并创建账户,即完成wordpress部署

wordpress

Related

CentOS6 mariadb二进制安装
·713 字·4 分钟
Linux Mariadb
Keepalived+nginx LB高可用集群实现
·1789 字·9 分钟
Linux Keepalived
LVS DR 负载均衡实现
·596 字·3 分钟
Linux LVS