linux企业运维(三)PHP、PHP与nginx的整合

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、PHP源码编译
  • 二、nginx和 PHP整合(高速缓存)
    • 传统缓存策略与高效缓存策略的差异


前言

一、PHP源码编译

仍然是编译三部曲

 420  ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx  --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring  --enable-bcmath --with-fpm-systemd
  421  make
  422  make install

编译完成之后我们进行启动
首先将php服务复制到系统默认的启动目录中

[root@server1 fpm]# cp php-fpm.service /usr/lib/systemd/system/

然后将default文件复制为系统能够识别的conf文件

[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 php-fpm.d]# cp www.conf.default www.conf

同样将php.ini复制到系统的默认目录下

[root@server1 php-7.4.12]# cp php.ini-production /usr/local/php/etc/php.ini

关闭php服务的下面这个选项,因为开启之后会将许多目录设置为只读,由于系统要写入文件来开启服务,所以我们要给他添加权限,不能让它只读

# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit.
#ProtectSystem=full

最后启动服务,查看9000端口,发现存在,说明服务已经启动

[root@server1 system]# systemctl start php-fpm.service 
[root@server1 system]# netstat -antlp | grep :9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      31598/php-fpm: mast 
[root@server1 system]# vim php-fpm.service 

二、nginx和 PHP整合(高速缓存)

首先对nginx.conf中的内容进行修改

 location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

然后再在html下新建一个index.php,在里边写入函数,我们在浏览器访问我们这个页面就可以看到相应的内容

[root@server1 html]# cat index.php
()
?>

我们新加入一个memcache模块,当我们想要使用phpize脚本的时候会发现用不了,但是它php里边存在,这是因为系统的环境变量没有检测到它,我们就要修改环境变量

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/php/bin

export PATH

查看环境变量,看到加入成功就可以继续

[root@server1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/php/bin

memcache的作用是做高速缓存,因为它是运行在内存中,所以我们要是从memcache中取数据,那么速度会比从数据库中取数据快

当我们进行压测时候会发现,这种方式来处理数据效率会非常高,几乎没有报错出现

Document Path:          /example.php
Document Length:        116 bytes

Concurrency Level:      10
Time taken for tests:   0.463 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      279000 bytes
HTML transferred:       116000 bytes
Requests per second:    2160.47 [#/sec] (mean)
Time per request:       4.629 [ms] (mean)
Time per request:       0.463 [ms] (mean, across all concurrent requests)
Transfer rate:          588.64 [Kbytes/sec] received

传统缓存策略与高效缓存策略的差异

传统缓存策略是由客户端发送请求之后交给nginx,以fastcgi_pass的方式发送给php-fpm来处理,处理完成之后再回到nginx并返回客户端,这种方式会造成数据的阻塞,因为nginx是高并发,所以它会不断地发送数据,但是php-fpm处理速度有限,所以在其中会造成阻塞;
而高效缓存策略就不一样了,它是由nginx完全连接了客户端和memcache,在第一次数据请求完成访问之后,再次访问便会非常快,而且缓存的速度完全由nginx掌握,但是前提是要自行添加几个模块

由于我们需要添加两个模块,所以我们不妨停掉原来的nginx,安装openresty,它就包含了我们需要的模块,和安装nginx一样,configure、make、make install,完了之后我们可以将原来目录下的配置文件cp过来,就不用再重新配置

然后我们在现有的nginx.conf中添加以下内容,目的是设置负载均衡以及以高速缓存的方式访问

   location /memc {
        internal;
        memc_connect_timeout 100ms;
        memc_send_timeout 100ms;
        memc_read_timeout 100ms;
        set $memc_key $query_string;
        set $memc_exptime 300;
        memc_pass memcache;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            set $key $uri$args;
            srcache_fetch GET /memc $key;
            srcache_store PUT /memc $key;
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

进行重载之后,我们测试后发现,缓存数据的速度比之前加速缓存都快了三倍多,并且没有出现错误

Concurrency Level:      10
Time taken for tests:   0.116 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      315000 bytes
HTML transferred:       159000 bytes
Requests per second:    8625.30 [#/sec] (mean)

你可能感兴趣的:(Linux企业运维,php,linux,运维)