ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# :-: **健康方舟云上部署总览图** 服务器端采用Nginx+ ![](https://img.kancloud.cn/44/d9/44d963c42da83ec9cb528c08f0ab866c_854x828.png) ## :-: 阿里云相关部署 云服务器配置: 云服务器放开对应端口:22(服务器连接ssh接口)、3306(mysql接口)、6379(redis接口)、80(HTTP接口)、443(HTTPS接口) 云数据库RDS部署: 建立与服务器同区域的RDS数据库服务 ![](https://img.kancloud.cn/22/17/2217f1815b7374b59f73e67184bf61a4_1522x564.png) 设置定时备份 ![](https://img.kancloud.cn/75/d3/75d3f77e4bd74d86a11c53509af5d028_1681x337.png) 配置数据库帐号密码 ![](https://img.kancloud.cn/ab/b4/abb47e8694f979717d6437c183cbb10f_1453x667.png) oss存储桶: 建立与服务器同区域的oss存储桶 ![](https://img.kancloud.cn/4e/43/4e4383a144782faa6b47f685aa7a7a54_806x877.png) 配置图片存储域名 ![](https://img.kancloud.cn/87/cd/87cd02e0d41b3ac45524a839d7a1ee25_1602x473.png) 配置图片存储样式 ![](https://img.kancloud.cn/c6/e9/c6e98403b734081bc60e6aff8a36e35d_1531x480.png) ## :-: 服务器相关部署 ## **Nginx 1.17.10安装:** ### 一、安装编译工具及库文件 ~~~ yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel ~~~ ### 二、首先要安装 PCRE PCRE 作用是让 Nginx 支持 Rewrite 功能。 1、下载 PCRE 安装包,下载地址: [http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz](http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz) ~~~ [root@bogon src]# cd /usr/local/src/ [root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz ~~~ ![](https://www.runoob.com/wp-content/uploads/2015/01/nginx1.png) 2、解压安装包: ~~~ [root@bogon src]# tar zxvf pcre-8.35.tar.gz ~~~ 3、进入安装包目录 ~~~ [root@bogon src]# cd pcre-8.35 ~~~ 4、编译安装  ~~~ [root@bogon pcre-8.35]# ./configure [root@bogon pcre-8.35]# make && make install ~~~ 5、查看pcre版本 ~~~ [root@bogon pcre-8.35]# pcre-config --version ~~~ ![](https://www.runoob.com/wp-content/uploads/2015/01/nginx2.png) ### 安装 Nginx 1、下载 Nginx,下载地址:[https://nginx.org/en/download.html](https://nginx.org/en/download.html) ~~~ [root@bogon src]# cd /usr/local/src/ [root@bogon src]# wget http://nginx.org/download/nginx-1.6.2.tar.gz ~~~ ![](https://www.runoob.com/wp-content/uploads/2015/01/nginx3.png)2、解压安装包 ~~~ [root@bogon src]# tar zxvf nginx-1.6.2.tar.gz ~~~ 3、进入安装包目录 ~~~ [root@bogon src]# cd nginx-1.6.2 ~~~ 4、编译安装 ~~~ [root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35 [root@bogon nginx-1.6.2]# make [root@bogon nginx-1.6.2]# make install ~~~ 5、查看nginx版本 ~~~ [root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v ~~~ ![](https://www.runoob.com/wp-content/uploads/2015/01/nginx4.png) 到此,nginx安装完成。 * * * ## Nginx 配置 创建 Nginx 运行使用的用户 www: ~~~ [root@bogon conf]# /usr/sbin/groupadd www  [root@bogon conf]# /usr/sbin/useradd -g www www ~~~ 配置nginx.conf ,将/usr/local/webserver/nginx/conf/nginx.conf替换为以下内容 ~~~ [root@bogon conf]#  cat /usr/local/webserver/nginx/conf/nginx.conf user www www; worker_processes 2; #设置值和CPU核心数一致 error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别 pid /usr/local/webserver/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; events {   use epoll;   worker_connections 65535; } http {   include 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';    #charset gb2312;         server_names_hash_bucket_size 128;   client_header_buffer_size 32k;   large_client_header_buffers 4 32k;   client_max_body_size 8m;         sendfile on;   tcp_nopush on;   keepalive_timeout 60;   tcp_nodelay on;   fastcgi_connect_timeout 300;   fastcgi_send_timeout 300;   fastcgi_read_timeout 300;   fastcgi_buffer_size 64k;   fastcgi_buffers 4 64k;   fastcgi_busy_buffers_size 128k;   fastcgi_temp_file_write_size 128k;   gzip on;    gzip_min_length 1k;   gzip_buffers 4 16k;   gzip_http_version 1.0;   gzip_comp_level 2;   gzip_types text/plain application/x-javascript text/css application/xml;   gzip_vary on;     #limit_zone crawler $binary_remote_addr 10m;  #下面是server虚拟主机的配置  server   {     listen 80;#监听端口     server_name localhost;#域名     index index.html index.htm index.php;     root /usr/local/webserver/nginx/html;#站点目录       location ~ .*\.(php|php5)?$     {       #fastcgi_pass unix:/tmp/php-cgi.sock;       fastcgi_pass 127.0.0.1:9000;       fastcgi_index index.php;       include fastcgi.conf;     }     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$     {       expires 30d;   # access_log off;     }     location ~ .*\.(js|css)?$     {       expires 15d;    # access_log off;     }     access_log off;   } } ~~~ 检查配置文件nginx.conf的正确性命令: ~~~ [root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -t ~~~ ![](https://www.runoob.com/wp-content/uploads/2015/01/nginx5.png) * * * ## 启动 Nginx Nginx 启动命令如下: ~~~ [root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx ~~~ ![](https://www.runoob.com/wp-content/uploads/2015/01/nginx6.png) * * * ## 访问站点 从浏览器访问我们配置的站点ip: ![](https://www.runoob.com/wp-content/uploads/2015/01/nginx7.png) * * * ## Nginx 其他命令 以下包含了 Nginx 常用的几个命令: ~~~ /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx /usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx ~~~ # MySQL 安装配置 MySQL 是最流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 MySQL由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。 * * * ## MySQL 安装 本教程的系统平台:CentOS release 6.6 (Final) 64位。 ### 一、安装编译工具及库文件 ~~~ yum -y install gcc gcc-c++ make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison patch unzip libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2 flex libaio-devel ~~~ ### 二、 安装cmake 编译器 cmake 版本:cmake-3.1.1。 1、下载地址:[http://www.cmake.org/files/v3.1/cmake-3.1.1.tar.gz](http://www.cmake.org/files/v3.1/cmake-3.1.1.tar.gz) ~~~ $ wget http://www.cmake.org/files/v3.1/cmake-3.1.1.tar.gz ~~~ ![mysql1](https://www.runoob.com/wp-content/uploads/2015/01/mysql1.png) 2、解压安装包 ~~~ $ tar zxvf cmake-3.1.1.tar.gz ~~~ 3、进入安装包目录 ~~~ $ cd cmake-3.1.1 ~~~ 4、编译安装  ~~~ $ ./bootstrap $ make && make install ~~~ * * * ### 安装 MySQL 5.6.50 MySQL版本:mysql-5.6.15。 1、下载地址: [http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.50.tar.gz](http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.50.tar.gz) ~~~ $ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz ~~~ ![mysql2](https://www.runoob.com/wp-content/uploads/2015/01/mysql2.png) 2、解压安装包 ~~~ $ tar zxvf mysql-5.6.15.tar.gz ~~~ 3、进入安装包目录 ~~~ $ cd mysql-5.6.15 ~~~ 4、编译安装  ~~~ $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_INNODB_MEMCACHED=1 -DWITH_DEBUG=OFF -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DENABLED_PROFILING=ON -DMYSQL_MAINTAINER_MODE=OFF -DMYSQL_DATADIR=/usr/local/webserver/mysql/data -DMYSQL_TCP_PORT=3306 $ make && make install ~~~ 5、查看mysql版本: ~~~ $ /usr/local/webserver/mysql/bin/mysql --version ~~~ ![mysql3](https://www.runoob.com/wp-content/uploads/2015/01/mysql3.png) 到此,mysql安装完成。 * * * ## MySQL 配置 1、创建mysql运行使用的用户mysql: ~~~ $ /usr/sbin/groupadd mysql $ /usr/sbin/useradd -g mysql mysql ~~~ 2、创建binlog和库的存储路径并赋予mysql用户权限 ~~~ $ mkdir -p /usr/local/webserver/mysql/binlog /www/data_mysql $ chown mysql.mysql /usr/local/webserver/mysql/binlog/ /www/data_mysql/ ~~~ 3、创建my.cnf配置文件 将/etc/my.cnf替换为下面内容 ~~~ $ cat /etc/my.cnf [client] port = 3306 socket = /tmp/mysql.sock [mysqld] replicate-ignore-db = mysql replicate-ignore-db = test replicate-ignore-db = information_schema user = mysql port = 3306 socket = /tmp/mysql.sock basedir = /usr/local/webserver/mysql datadir = /www/data_mysql log-error = /usr/local/webserver/mysql/mysql_error.log pid-file = /usr/local/webserver/mysql/mysql.pid open_files_limit = 65535 back_log = 600 max_connections = 5000 max_connect_errors = 1000 table_open_cache = 1024 external-locking = FALSE max_allowed_packet = 32M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 600 #thread_concurrency = 8 query_cache_size = 128M query_cache_limit = 2M query_cache_min_res_unit = 2k default-storage-engine = MyISAM default-tmp-storage-engine=MYISAM thread_stack = 192K transaction_isolation = READ-COMMITTED tmp_table_size = 128M max_heap_table_size = 128M log-slave-updates log-bin = /usr/local/webserver/mysql/binlog/binlog binlog-do-db=oa_fb binlog-ignore-db=mysql binlog_cache_size = 4M binlog_format = MIXED max_binlog_cache_size = 8M max_binlog_size = 1G relay-log-index = /usr/local/webserver/mysql/relaylog/relaylog relay-log-info-file = /usr/local/webserver/mysql/relaylog/relaylog relay-log = /usr/local/webserver/mysql/relaylog/relaylog expire_logs_days = 10 key_buffer_size = 256M read_buffer_size = 1M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 64M myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_repair_threads = 1 myisam_recover interactive_timeout = 120 wait_timeout = 120 skip-name-resolve #master-connect-retry = 10 slave-skip-errors = 1032,1062,126,1114,1146,1048,1396 #master-host = 192.168.1.2 #master-user = username #master-password = password #master-port = 3306 server-id = 1 loose-innodb-trx=0  loose-innodb-locks=0  loose-innodb-lock-waits=0  loose-innodb-cmp=0  loose-innodb-cmp-per-index=0 loose-innodb-cmp-per-index-reset=0 loose-innodb-cmp-reset=0  loose-innodb-cmpmem=0  loose-innodb-cmpmem-reset=0  loose-innodb-buffer-page=0  loose-innodb-buffer-page-lru=0  loose-innodb-buffer-pool-stats=0  loose-innodb-metrics=0  loose-innodb-ft-default-stopword=0  loose-innodb-ft-inserted=0  loose-innodb-ft-deleted=0  loose-innodb-ft-being-deleted=0  loose-innodb-ft-config=0  loose-innodb-ft-index-cache=0  loose-innodb-ft-index-table=0  loose-innodb-sys-tables=0  loose-innodb-sys-tablestats=0  loose-innodb-sys-indexes=0  loose-innodb-sys-columns=0  loose-innodb-sys-fields=0  loose-innodb-sys-foreign=0  loose-innodb-sys-foreign-cols=0 slow_query_log_file=/usr/local/webserver/mysql/mysql_slow.log long_query_time = 1 [mysqldump] quick max_allowed_packet = 32M ~~~ 4、初始化数据库 ~~~ $/usr/local/webserver/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf  --user=mysql ~~~ 显示如下信息: ~~~ Installing MySQL system tables...2015-01-26 20:18:51 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). OK Filling help tables...2015-01-26 20:18:57 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). OK ... ~~~ 5、创建开机启动脚本 ~~~ $ cd /usr/local/webserver/mysql/ $ cp support-files/mysql.server /etc/rc.d/init.d/mysqld  $ chkconfig --add mysqld  $ chkconfig --level 35 mysqld on ~~~ 6、启动mysql服务器 ~~~ $ service mysqld start ~~~ ![mysql4](https://www.runoob.com/wp-content/uploads/2015/01/mysql4.png) 7、连接 MySQL ~~~ $ /usr/local/webserver/mysql/bin/mysql -u root -p ~~~ ![mysql5](https://www.runoob.com/wp-content/uploads/2015/01/mysql5.png) ## 修改MySQL用户密码 ~~~ mysqladmin -u用户名 -p旧密码 password 新密码 ~~~ 或进入mysql命令行 ~~~ SET PASSWORD FOR '用户名'@'主机' = PASSWORD(‘密码'); ~~~ 创建新用户并授权: ~~~ grant all privileges on *.* to 用户名@'%' identified by '密码' with grant option; ~~~ ### 其他命令 * 启动:service mysqld start * 停止:service mysqld stop * 重启:service mysqld restart * 重载配置:service mysqld reload [](https://www.runoob.com/linux/nginx-install-setup.html)[Nginx 安装配置](https://www.runoob.com/linux/nginx-install-setup.html "Nginx 安装配置") ## 1 篇笔记写笔记 1.    li1121567428   li1\*\*\*567428@live.com 63 启动MySQL服务器程序,确认状态 1)启动MySQL服务程序 启动服务并查看状态: ~~~ [root@dbsvr1 pub]# service mysql start Starting MySQL... [确定] [root@dbsvr1 pub]# service mysql status MySQL running (31724) [确定] ~~~ 服务器进程为mysqld,监听的默认端口为TCP 3306: ~~~ [root@dbsvr1 pub]# netstat -anpt | grep mysql tcp 0 0 :::3306 :::* LISTEN 31724/mysqld ~~~ 2)查看MySQL服务器进程、运行用户 提供连接服务的进程为mysqld,由其父进程mysqld\_safe启动。 ~~~ [root@dbsvr1 pub]# ps -elf | grep mysqld 4 S root 31619 1 0 80 0 - 2834 wait 15:14 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid file=/var/lib/mysql/dbsvr1.tarena.com.pid 4 S mysql 31724 31619 0 80 0 - 252496 poll_s 15:14 pts/0 00:00:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/dbsvr1.tarena.com.err --pid-file=/var/lib/mysql/dbsvr1.tarena.com.pid ~~~ 数据库的默认存放位置为 /var/lib/mysql: ~~~ [root@dbsvr1 pub]# ls /var/lib/mysql/ auto.cnf ibdata1 mysql RPM_UPGRADE_HISTORY dbsvr1.tarena.com.err ib_logfile0 mysql.sock RPM_UPGRADE_MARKER-LAST dbsvr1.tarena.com.pid ib_logfile1 performance_schema test ~~~ 安装PHP7.2 1)依赖包安装 yum install gcc-c++ libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel gd net-snmp-\* libzip版本低问题处理 libzip要求1.1及以上,系统提供1.0需要升级 官方网站: [https://libzip.org/](https://links.jianshu.com/go?to=https%3A%2F%2Flibzip.org%2F) \[root@apache\_251 ~\]# wget [https://libzip.org/download/libzip-1.5.2.tar.gz](https://links.jianshu.com/go?to=https%3A%2F%2Flibzip.org%2Fdownload%2Flibzip-1.5.2.tar.gz) \[root@apache\_251 ~\]# tar xf [libzip-1.5.2.tar.gz](https://links.jianshu.com/go?to=https%3A%2F%2Flibzip.org%2Fdownload%2Flibzip-1.5.2.tar.gz) \[root@apache\_251 ~\]# cd [libzip-1.5.2](https://links.jianshu.com/go?to=https%3A%2F%2Flibzip.org%2Fdownload%2Flibzip-1.5.2.tar.gz) \[root@apache\_251 libzip-1.5.2\]# mkdir build \[root@apache\_251 build\]# cd build \[root@apache\_251 build\]#cmake .. \[root@apache\_251 build\]#make \[root@apache\_251 build\]#make install 2)配置 \[root@apache\_251 ~\]# tar xf php-7.3.4.tar.bz2 \[root@apache\_251 php-7.3.4\]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysqli=mysqlnd --enable-pdo --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local/ --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-pcre-regex --with-zlib --with-bz2 --enable-calendar --disable-phar --with-curl --enable-dba --with-libxml-dir --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-jis-conv --with-mhash --enable-mbstring --enable-opcache=yes --enable-pcntl --enable-xml --disable-rpath --enable-shmop --enable-sockets --enable-zip --enable-bcmath --with-snmp --disable-ipv6 --with-gettext --disable-rpath --disable-debug --enable-embedded-mysqli --with-mysql-sock=/usr/local/mysql/ ~~~jsx 配置参数说明 ---prefix=/usr/local/php 安装路径 --with-config-file-path=/usr/local/php/etc 配置文件路径 --with-mysqli=mysqlnd --enable-embedded-mysqli --with-mysql-sock=/usr/local/mysql/ mysql支持及客户端设置 --enable-pdo --with-pdo-mysql=mysqlnd 开启php pdo,PDO一是PHP数据对象(PHP Data Object)的缩写 --with-iconv-dir=/usr/local/ 指定转码工具,各种字符集间的转换 --enable-fpm --with-fpm-user=www --with-fpm-group=www 支持php-fpm,允许以服务的方式启动PHP --with-pcre-regex 支持pcre正则表达式 --with-zlib --with-bz2 --with-zlib-dir --enable-zip 支持压缩 --enable-calendar 支持日历 --disable-phar PHAR (“Php ARchive”) 是PHP里类似于JAR的一种打包文件。如果你使用的是 PHP 5.3 或更高版本,那么Phar后缀文件是默认开启支持的. --with-curl 支持curl --enable-dba 开启dba函数支持 --with-libxml-dir 支持xml文件库 对xml读取和查询 --enable-ftp 支持ftp --with-gd --with-jpeg-dir --with-png-dir 支持图片 --with-freetype-dir 支持字库 --enable-gd-jis-conv 支持gd库 --with-mhash --enable-mbstring 支持加密 --enable-opcache=yes 开启opcache --enable-pcntl 开启PHP进程控制支持 默认是关闭的 --enable-xml 允许xml文件 --disable-rpath 关闭额外的运行库文件 --enable-shmop 开启Shmop 是一个易用的允许PHP读取、写入、创建和删除Unix共享内存段的函数集 --enable-sockets 打开 sockets 支持 --enable-bcmath 增加bcmath扩展的支持,这是一个支持大整数计算的扩展。 --with-snmp 支持snmp --disable-ipv6 关闭IPV6支持 --with-gettext 打开gnu 的gettext 支持,编码库用到 --disable-debug 关闭调试模式 ~~~ 3)编译 \[root@apache\_251 php-7.3.4\]# make 4)安装 \[root@apache\_251 php-7.3.4\]# make install 5)拷贝一个配置文件 \[root@apache\_251 php-7.3.4\]# cp /usr/src/php-7.3.4/php.ini-production /usr/local/php/etc/php.ini ## 三、PHP配置 #### **关于PHP工作方式** * #### 作为模块运行 * #### 独立服务运行 1)作为apache模块运行 # if bind to apache \--with-apxs2=/usr/local/apache2/bin/apxs AddType application/x-httpd-php .php # if no mysql ./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 2)作为服务运行 思考问题 apache如何将PHP请求交给PHP呢 PHP是一门语言 ~~~objectivec 思路 CGI fastcgi ~~~ CGI 公共网关接口 (COMMON GATEWAY INTERFACE),是一个协议 ~~~objectivec 它的作用就是帮助服务器与语言通信. 就是apache和php进行通信,因为apache和php的语言不通,因此需要一个沟通转换的过程,而CGI就是这个 沟通的协议。 ~~~ FastCGI 快速通用网关接口(FastCommonGatewayInterface),是CGI的升级版,一种语言无关的协议,FastCGI是用来提高CGI程序性能的 缺点:传统的cgi协议在每次连接请求时,会开启一个进程进行处理,处理完毕会关闭该进程,因此下次连接,又要再次开启一个进程进行处理,因此有多少个连接就有多少个cgi进程,这也就是为什么传统的cgi会显得缓慢的原因,因此过多的进程会消耗资源和内存。而fast-cgi则是一个进程可以处理多个请求,和上面的cgi协议完全不一样,cgi是一个进程只能处理一个请求,这样就会导致大量的cgi程序,因此会给服务器带来负担。 php-fpm:是一个实现了FastCGI(协议)的程序 是php提供给http前端服务器(web serve)的fastcgi协议接口程序,允许一个进程对多个连接进行处理,而不会立即关闭这个进程,而是会接着处理下一个连接。 PHP-CGI:PHP-CGI是php自带的Fast-CGI管理器。 PHP-CGI的不足: php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。 直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。) PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,对于PHP 5.3.3之前的php来说,是一个补丁包 ,旨在将FastCGI进程管理整合进PHP包中。如果你使用的是PHP5.3.3之前的PHP的话,就必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。从PHP 5.4 RC2开始,php-fpm已经转正了 **PHP-FPM特点** 1. listen:The address on which to accept FastCGI requests.它支持TCP Socket和unix socket两种通讯协议。可设置listen = \[::\]:9000。 2. listen.allowed\_clients:List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. 该配置项为逗号分隔的列表,如listen.allowed\_clients = 127.0.0.1,172.17.0.5。 3. pm:Choose how the process manager will control the number of child processes. 该配置项设置FPM管理进程池的方式,包括static、dynamic、ondemand三种。 4. pm.max\_requests:The number of requests each child process should execute before respawning. This can be useful to work around memory leaks in 3rd party libraries.设置每个子进程处理请求数的上限,对于处理第三方库中的内存泄漏很有用。 5. pm.status\_path:The URI to view the FPM status page. 支持状态页面监控php-fpm **PHP-FPM工作原理:** 1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module) 2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。 3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。 4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。 在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。 # php-fpm服务设置 pool 每个pool可以监听不同的sock、tcp/ip,pool池是支持定义多个pool的。所有的网站使用同一个池,那其中一个网站发生一些故障,比如程序员写的一些程序有问题,就会把php资源耗尽,这样的结果就是其他站点的php也会502。所以有必要把每一个站点隔离开。每个pool的名字要唯一。 #### PHP服务配置 # 主配置文件 \[root@apache\_251 var\]# egrep -v ";|$" /usr/local/php/etc/php-fpm.conf \[global\] pid = run/php-fpm.pid error\_log = log/php-fpm.log daemonize = yes include = /usr/local/php/etc/php-fpm.d/\*.conf # 子配置文件 \[root@apache\_251 var\]# cp /usr/local/php/etc/php-fpm.d/[www.conf.default](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.conf.default) /usr/local/php/etc/php-fpm.d/[www.conf](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.conf) \[root@apache\_251 var\]# egrep -v ";|$" /usr/local/php/etc/php-fpm.d/[www.conf](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.conf) \[www\] user = www group = www listen = 127.0.0.1:9000 listen.owner = www listen.group = www listen.mode = 0660 pm = dynamic pm.max\_children = 5 pm.start\_servers = 2 pm.min\_spare\_servers = 1 pm.max\_spare\_servers = 3 ~~~csharp 注释 # 全局配置 [global] # PID、可以不填 pid = /usr/local/php/var/run/php-fpm.pid # 错误日志路径、可以不填 error_log = /usr/local/php/var/log/php-fpm.log # www虚拟主机配置、可写多个 # pool命名:www [www] # 监听socket方式 # 可以写成listen = 127.0.0.1:9000 listen = /tmp/php-fcgi.sock # 开启php-fpm的执行用户 user = www # 开启php-fpm的所属组 group = www # 监听socket listen的用户,和web服务器软件的一致 listen.owner = nobody # 监听socket listen的组,和web服务器软件的一致 listen.group = nobody # 怎样的形式启用进程 pm = dynamic # 最大开启子进程数 pm.max_children = 50 # 一开始启动多少子进程 pm.start_servers = 20 # 空闲时保留多少个子进程 pm.min_spare_servers = 5 # 最多空闲子进程 pm.max_spare_servers = 35 # 进程处理多少个请求之后销毁重建 pm.max_requests = 500 # 限定打开最大的文件数 rlimit_files = 1024 ~~~ ## 四、PHP启动 \[root@apache\_251 ~\]# cp /usr/src/php-7.3.4/sapi/fpm/php-fpm.service /etc/systemd/system/ \[root@apache\_251 ~\]# systemctl daemon-reload \[root@apache\_251 ~\]# systemctl enable php-fpm \[root@apache\_251 ~\]# systemctl start php-fpm ## :-: 程序相关部署 数据库信息配置位置:/www/wwwroot/shop.gimp.cn/database.php > <?php return [ // 默认使用的数据库连接配置 'default' => 'mysql', // 自定义时间查询规则 'time_query_rule' => [], // 自动写入时间戳字段 // true为自动识别类型 false关闭 // 字符串则明确指定时间字段类型 支持 int timestamp datetime date 'auto_timestamp' => true, // 时间字段取出后的默认时间格式 'datetime_format' => 'Y-m-d H:i:s', // 数据库连接配置信息 'connections' => [ 'mysql' => [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '127.0.0.1', // 数据库名 'database' => 'shop_gimp_cn', // 用户名 'username' => 'shop_gimp_cn', // 密码 'password' => 'kWy2dB8b8S4THi8p', // 端口 'hostport' => '3306', // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => 'hyok', // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'deploy' => 0, // 数据库读写是否分离 主从式有效 'rw_separate' => false, // 读写分离后 主服务器数量 'master_num' => 1, // 指定从服务器序号 'slave_no' => '', // 是否严格检查字段是否存在 'fields_strict' => false, // 是否需要断线重连 'break_reconnect' => true, // 监听SQL 'trigger_sql' => true, // 开启字段缓存 'fields_cache' => true, // 字段缓存路径 'schema_cache_path' => app()->getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR, ], // 更多的数据库配置信息 ], ]; OSS相关配置(如下图):https://test.gimp.cn/alioss/admin/config/config.html ![](https://img.kancloud.cn/85/50/8550f429a8a2a0517bdcfce753e50d7a_1172x668.png)