博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx 3.nginx+fastcgi
阅读量:4509 次
发布时间:2019-06-08

本文共 6058 字,大约阅读时间需要 20 分钟。

死磕nginx 3.nginx+fastcgi

互联网服务器有个非常典型的架构lamp(linux+apache+mysql+php),由于其开源和强大的兼容性而风靡一时,不过随着nginx的横空出世,lamp逐渐被lnmp替代,即Linux+nginx+mysql+php

fastcgi:fastcgi是语言无关的,可伸缩架构的CGI开放扩展,其主要的行为将CGI解释器进程保持在内存中并因此获得较高的性能,众所周知,CGI的反复加载时CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程金鼎管理调度,则可提供良好的性能、伸缩性、Fail-Over特性等。


1、FastCGI的工作原理

  1. FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi进程)并等待来自webserver的请求,在本文中,采用PHP-FPM进程管理器启动多个php-cgi FastCGI进程,启动php-cgi FastCGI进程时,可以配置TCP和UNIX套接字两种方式启动
  2. 当客户端请求到达web服务器(nginx)时,web服务器将采用TCP协议或者UNIX套接字方式转到FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程),web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
  3. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回到web服务器(nginx),当FastCGI子进程关闭连接时,请求便告知处理完成,。FastCGI子进程接着等待来自FastCGI管理器的下一个连接,而在一般普通的CGI模式中,php-cgi在此时便退出了。

所以你可以想象普通的CGI模式有多慢,每一个web请求PHP都必须重新解析php.ini、重新载入全部扩展并重新初始化全部数据结构。使用FastCGI,所有的这些都只在进程启动时发生一次,一个额外的好处是,持续数据库连接可以工作。

php FastCGI的优点

  • PHP脚本运行速度更快,PHP解释程序被载入内存而不用每次都需要从存储器中读取,此举极大提升了依靠脚本运行站点的性能。
  • 需要使用的系统资源更少,由于服务器不用每次都需要载入PHP解释程序,你可以将站点传输速度提升而不必增加CPU负担。
  • 不需要对现有代码进行任何改变

部署lnmp环境示例

组件版本

linux:centos6.5

php:5.5

nginx:1.8

mysql:5.5.18

nginx的安装

可以参考nginx的第一篇文章

mysql的安装

1、依赖yum -y install cmake gcc-c++ make bison-devel ncurses-devel增加用户useradd mysql2、解压安装 安装包自行下载tar -zxf mysql-5.5.18.tar.gzcd mysql-5.5.18cmake \-DCMAKE_INSTALL_PREFIX=/home/nick/mysql \-DMYSQL_UNIX_ADDR=/home/nick/mysql/mysql.sock \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_DATADIR=/home/nick/mysql/datamake && make installcd /home/nick/mysql && mkdir etc tmp var log3、重命名系统自带的my.cnfmv /etc/my.cnf /etc/my.cnf.bak4、配置文件 复制到/home/nick/mysql/etc/my.cnf里面[client]port = 3306socket = /home/nick/mysql/mysql.sockdefault-character-set = utf8mb4[mysqld]port = 3306socket = /home/nick/mysql/mysql.sockbasedir = /home/nick/mysqldatadir = /home/nick/mysql/datapid-file = /home/nick/mysql/log/mysql.piduser = mysqlbind-address = 0.0.0.0server-id = 1init-connect = 'SET NAMES utf8mb4'character-set-server = utf8mb4#skip-name-resolve#skip-networkingback_log = 300max_connections = 100max_connect_errors = 6000open_files_limit = 65535table_open_cache = 128max_allowed_packet = 1Mbinlog_cache_size = 1Mmax_heap_table_size = 2Mtmp_table_size = 4Mread_buffer_size = 1Mread_rnd_buffer_size = 2Msort_buffer_size = 2Mjoin_buffer_size = 2Mkey_buffer_size = 1Mthread_cache_size = 8query_cache_type = 1query_cache_size = 2Mquery_cache_limit = 1Mft_min_word_len = 4log_bin = mysql-binbinlog_format = mixedexpire_logs_days = 30log_error = /home/nick/mysql/log/mysql-error.logslow_query_log = 1long_query_time = 1slow_query_log_file = /home/nick/mysql/log/mysql-slow.logperformance_schema = 0explicit_defaults_for_timestamp#lower_case_table_names = 1skip-external-lockingdefault_storage_engine = InnoDB#default-storage-engine = MyISAMinnodb_file_per_table = 1innodb_open_files = 500innodb_buffer_pool_size = 16Minnodb_write_io_threads = 4innodb_read_io_threads = 4innodb_thread_concurrency = 0innodb_purge_threads = 1innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 1Minnodb_log_file_size = 8Minnodb_log_files_in_group = 3innodb_max_dirty_pages_pct = 90innodb_lock_wait_timeout = 120bulk_insert_buffer_size = 8Mmyisam_sort_buffer_size = 8Mmyisam_max_sort_file_size = 1Gmyisam_repair_threads = 1interactive_timeout = 28800wait_timeout = 28800[mysqldump]quickmax_allowed_packet = 8M5、初始化数据库/home/nick/mysql/scripts/mysql_install_db6、启动数据库home/qfpay/mysql/bin/mysqld_safe &7、supervisr的启动方式[program:mysql]command= /home/nick/mysql/bin/mysqld --defaults-file=/home/nick/mysql/etc/my.cnfdirectory=/home/nick/mysqluser=nick

#### PHP的安装

下载程序 wget wget http://cn2.php.net/get/php-5.5.33.tar.gz 先装第三方源 yum install epel-release  安装依赖 yum install -y gd gd-devel  libmcrypt libmcrypt-devel libtool-ltdl libtool-ltdl-devel libxml2 libxml2-devel curl curl-devel t1lib t1lib-devel openssl openssl-devel 解压安装 /configure  \ --disable-debug \ --prefix=/usr/local/php5.5 \ --enable-shmop \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-libxml-dir \ --with-t1lib \ --with-zlib \ --with-mcrypt \  --with-mysqli=mysqlnd \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --enable-sockets \ --with-iconv \ --enable-mbstring \ --enable-mbregex \ --enable-ftp \ --enable-gd-native-ttf \ --with-curl \ --enable-fpm \ --enable-pcntl \ --enable-sysvmsg \ --enable-sysvsem \ --enable-sysvshm \ --enable-zip \ --with-freetype-dir \ --enable-exif \ --with-openssl \ --with-pear \  make && make install   拷贝php.ini: cp php.ini-development /usr/local/php/lib/php.ini  #php-fpm 的简单配置  ;this configuration is for PHP 5.5 for heavy loaded servers[global]error_log = sysloglog_level = errorrlimit_files = 655360rlimit_core = 0[php-nick219]user = nobodygroup = nobody#使用tcplisten = 127.0.0.1:9000#使用sock#listen = fpm.sock#listen.allowed_clients = 127.0.0.1#listen.mode = 666pm = dynamicpm.max_children = 1000pm.start_servers = 20                ;20pm.min_spare_servers = 10        ;10pm.max_spare_servers = 30        ;30pm.max_requests = 500; system max load (request number) = max_children * max_requests = 500,000pm.status_path = /fpm_statusping.path = /statusping.response = okslowlog = /data/phplogs/phpfpm_slow.logrequest_slowlog_timeout = 3slisten.backlog = 4096request_terminate_timeout = 5mrlimit_files = 655360rlimit_core = 0security.limit_extensions = .php .htmlphp_admin_value['date.timezone'] = 'Asia/Shanghai';include rigger ENV filesinclude=env.conf;add conf overrides from yaml

nginx配置

一个简单的配置,直接从server[...]开始server{    listen 80;    server_name nick219.com;    index index.html index.htm index.php;    root /home/nick/www/nick219;        location ~ .*\.(php|php5)?$    {        #fastcgi_pass unix:/tmp/php-cgi.sock;        fastcgi_pass 127.0.0.1:9000;        fastcgi_index index.php        fastcgi_intercept_errors on;        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;        include fastcgi.conf    }      #下面可以配置日志,缓存或者其它位置    }

nginx+fastcgi的配置结束

转载于:https://www.cnblogs.com/colder219/p/5605468.html

你可能感兴趣的文章
Flutter之内置动画(转)
查看>>
uni-app中onLoad不起作用
查看>>
多线程概述
查看>>
Linux_ubuntu命令-用户、权限管理
查看>>
Knowladge_网站学习_RSS 学习
查看>>
TCP/IP,Web世界的基本规则
查看>>
c++ 子类构造函数初始化及父类构造初始化
查看>>
Analysis on Human Various Emotional Expression
查看>>
DataGridView DataGridViewCheckBoxColumn编辑时实时触发事件
查看>>
SignalR---服务端
查看>>
PlayerPrefs存储Vector3等结构数据
查看>>
LightOJ - 1422 Halloween Costumes (区间DP)
查看>>
Dubbo架构设计详解
查看>>
谁终将点燃闪电,必长久如云漂泊
查看>>
小诗句集萃四
查看>>
软件之美: 易用性设计的目标及准则
查看>>
异步回调,事件,线程池与协程
查看>>
matlab函数:c2d离散化函数(待完善)
查看>>
java并发多面性
查看>>
TFS 测试用例导入、导出工具
查看>>