Nginx+php(FastCGI)+Memcached+Mysql+APC高性能web服务器

本文涉及的产品
RDS AI 助手,专业版
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:
前言*Nginx+php(FastCGI)+Memcached+Mysql+APC 是目前主流的高性能服务器搭建方式!适合大中型网站,小型站长也可以采用这种组合!
Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括 国内最大的电子地图MapBar、新浪博客、新浪播客、网易新闻等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,豆瓣、YUPOO相册、海内SNS、迅雷在线等新兴Web 2.0网站,更多的网站都在使用Nginx配置
 
  1. 下载所需的安装包:这里采用源码包编译安装:本博客集成下载  
  2. http://blog.mgcrazy.com/download/nginx-0.7.61.tar.gz  
  3. http://blog.mgcrazy.com/download/pcre-8.01.tar.gz  
  4. http://blog.mgcrazy.com/download/memcache-2.2.5.tgz  
  5. http://blog.mgcrazy.com/download/libevent-1.4.12-stable.tar.gz  
  6. http://blog.mgcrazy.com/download/APC-3.1.4.tgz  
  7.    
  8. 下载到 /usr/src下  
  9. 另外还有两个包mysql-5.1.41.tar.gz、php-5.3.5.tar.gz 【其他相似版本也可以!】可以在官网下载。  
  10. 一、正式安装Nginx、【安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等】  
  11. 首先安装pcre:  
  12. cd  /usr/src  &&tar xzf pcre-8.01.tar.gz   &&cd pcre-8.01  &&  ./configure   --prefix=/usr/local/pcre  &&make &&make install  
  13. 然后再安装nginx :  
  14. useradd www  && cd  /usr/src && tar xzf  nginx-0.7.61.tar.gz   &&cd  nginx-0.7.61  &&  ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/src/pcre-8.01  --user=www --group=www  &&make  &&make install  
  15.  
  16. 【nginx注意*  --with-pcre=/usr/src/pcre-8.01指向的是源码包解压的路径,而不是安装的路径,否则会报  
  17. make[1]: *** [/usr/local/pcre/Makefile] Error 127 错误】
二、接下来安装mysql
 
  1. cd   /usr/src && tar xzf  mysql-5.1.41.tar.gz   && cd mysql-5.1.41  && ./configure --prefix=/usr/local/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase  && make  &&make install  
  2.    
  3. mysql安装完毕,创建mysql用户和组并初始化数据库,并启动数据库。  
  4.    
  5. cd  /usr/local/mysql && useradd mysql && chown -R  mysql:mysql   /usr/local/mysql  &&  /usr/local/mysql/bin/mysql_install_db  --user=mysql   &&   chown -R   mysql:mysql  var/  && ./bin/mysqld_safe   --user=mysql &
三、安装 php :
 
  1. cd   /usr/src    &&tar xzf  php-5.3.5.tar.gz   && cd php-5.3.5  && ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex  --enable-fpm  --enable-sockets  && make  &&make install
  安装完毕!【注意这个参数在此可以不加 --enable-fastcgi;其他之前版本需要加上,以上安装根据自己的选择添加,如果报错,根据具体报错找原因】
 
四、整合Nginx和php(FastCGI)安装完php-5.3.5后支持fastCGI
 vi nginx.conf
 
  1. user  www www;  
  2. worker_processes 8;  
  3. error_log  /usr/local/nginx/logs/error.log  crit;  
  4. pid        /usr/local/nginx/nginx.pid;  
  5. #Specifies the value for maximum file descriptors that can be opened by this process.  
  6. worker_rlimit_nofile 51200;  
  7. events  
  8. {  
  9.   use epoll;  
  10.   worker_connections 51200;  
  11. }  
  12. http  
  13. {  
  14.   include      mime.types;  
  15. default_type  application/octet-stream;  
  16. charset    utf-8;  
  17. error_page  400 404 403 500 502 503 http://blog.mgcrazy.com;     
  18. server_names_hash_bucket_size 128;  
  19. client_header_buffer_size 2k;  
  20. large_client_header_buffers 4 4k;  
  21. client_max_body_size 8m;  
  22. sendfile on;  
  23. tcp_nopush        on;  
  24. keepalive_timeout 60;  
  25. fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2  
  26. keys_zone=TEST:10m  
  27. inactive=5m;  
  28. fastcgi_connect_timeout 300;  
  29. fastcgi_send_timeout 300;  
  30. fastcgi_read_timeout 300;  
  31. fastcgi_buffer_size 4k;  
  32. fastcgi_buffers 8 4k;  
  33. fastcgi_busy_buffers_size 8k;  
  34. fastcgi_temp_file_write_size 8k;  
  35. ##如下设置fastcGI_cache缓存,加速你的web站点!  
  36. fastcgi_cache TEST;  
  37. fastcgi_cache_valid 200 302 1h;  
  38. fastcgi_cache_valid 301 1d;  
  39. fastcgi_cache_valid any 1m;  
  40. fastcgi_cache_min_uses 1;  
  41. fastcgi_cache_use_stale error timeout invalid_header http_500;  
  42. fastcgi_cache_key http://$host$request_uri;    
  43. open_file_cache max=204800 inactive=20s;  
  44. open_file_cache_min_uses 1;  
  45. open_file_cache_valid 30s;  
  46. tcp_nodelay on;  
  47.    
  48. gzip on;  
  49. gzip_min_length       1k;  
  50. gzip_buffers        4 16k;  
  51. gzip_http_version 1.0;  
  52. gzip_comp_level 2;  
  53. gzip_types         text/plain application/x-javascript text/css application/xml;  
  54. gzip_vary on;  
  55.    
  56. ##设置301跳转,让二级域名跳转到你规定的url;  
  57.   server  
  58.   {  
  59.     listen       80;  
  60.     server_name blog.mgcrazy.com wgkgood.gicp.net linux.mgcrazy.com;  
  61.            if ($host = 'wgkgood.gicp.net' ) {  
  62.     rewrite ^/(.*)$ http://blog.mgcrazy.com/$1 permanent;     
  63. }  
  64.     if ($host = 'linux.mgcrazy.com' ) {  
  65.     rewrite ^/(.*)$ http://blog.mgcrazy.com/$1 permanent;  
  66. }  
  67.  
  68.     index index.php index.htm index.html;  
  69.     root  /home/webapps/www;  
  70.     #limit_conn   crawler  20;  
  71.     location ~ .*\.(php|php5)?$  
  72.     {  
  73.       #fastcgi_pass  unix:/tmp/php-cgi.sock;  
  74.       fastcgi_pass  127.0.0.1:9000;  
  75.       fastcgi_index index.php;  
  76.       include fcgi.conf;  
  77.     }  
  78.     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  
  79.     {  
  80.       expires      30d;  
  81.     }  
  82.     location ~ .*\.(js|css)?$  
  83.     {  
  84.       expires      1h;  
  85.     }  
  86.     log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '  
  87.               '$status $body_bytes_sent "$http_referer" '  
  88.               '"$http_user_agent" $http_x_forwarded_for';  
  89.     access_log  /usr/local/nginx/logs/access.log  access;  
  90.       }  
  91. }
 
Nginx配置完毕!启动nginx ;/usr/local/nginx/sbin/nginx 即可,重启nginx命令如下/usr/local/nginx/sbin/nginx –s  reload
 
此配置文件仅供参考,感谢张宴老师!
 
配置fcgi.conf文件如下
 
 
  1. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;  
  2. fastcgi_param  SERVER_SOFTWARE    nginx;  
  3.  
  4. fastcgi_param  QUERY_STRING       $query_string;  
  5. fastcgi_param  REQUEST_METHOD     $request_method;  
  6. fastcgi_param  CONTENT_TYPE       $content_type;  
  7. fastcgi_param  CONTENT_LENGTH     $content_length;  
  8.  
  9. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;  
  10. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;  
  11. fastcgi_param  REQUEST_URI        $request_uri;  
  12. fastcgi_param  DOCUMENT_URI       $document_uri;  
  13. fastcgi_param  DOCUMENT_ROOT      $document_root;  
  14. fastcgi_param  SERVER_PROTOCOL    $server_protocol;  
  15.  
  16. fastcgi_param  REMOTE_ADDR        $remote_addr;  
  17. fastcgi_param  REMOTE_PORT        $remote_port;  
  18. fastcgi_param  SERVER_ADDR        $server_addr;  
  19. fastcgi_param  SERVER_PORT        $server_port;  
  20. fastcgi_param  SERVER_NAME        $server_name;  
  21.  
  22. # PHP only, required if PHP was built with --enable-force-cgi-redirect  
  23. fastcgi_param  REDIRECT_STATUS    200;
 五、配置php配置文件:
 
  1. cd /usr/local/php5/etc/ && cp   php-fpm.conf.default   php-fpm.conf   
  2.    
  3. 然后根据提示修改php-fpm.conf里面的选项。  
  4.    
  5. 配置完毕后,启动php-fpm  
  6. cp /usr/src/php-5.3.5/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 然后启动 /etc/init.d/php-fpm start 即可
六、安装apc配置:
 
  1. cd /usr/src && tar xzf APC-3.1.4.tgz &&cd APC-3.1.4  
  2. /usr/local/php5/bin/phpize && ./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php5/bin/php-config &&make&& make install  
  3.    
  4. 安装完后会生成一个apc.so在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/里面
七、安装memcached,使fastcGI支持memcached
首先安装libevent
 
  1. cd /usr/src && tar xzf libevent-1.4.12-stable.tar.gz && cd libevent-1.4.12-stable && ./configure –prefix=/usr/local/libevent &&make && make install  
  2. 然后安装memcached  
  3. tar xzf memcache-2.2.5.tar.gz && cd memcache-2.2.5 && /usr/local/php5/bin/phpize && ./configure –prefix=/usr/local/memcached --with-libevent=/usr/local/libevent --with-php-config=/usr/local/php5/bin/php-config &&make &&make install  
  4. 安装完后,会在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/里生成一个memcache.so 这个模块
八、接下来修改php.ini
 
  1. 默认的php.ini在/usr/local/php5/lib/php.ini 你也可以指定:  
  2. extension_dir = "./" 
  3. 修改为  
  4. extension_dir="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626" 
  5. 把下面这些添加到最后:  
  6. extension = apc.so  
  7. extension=memcache.so //这里引用缓存模块  
  8. [APC]  
  9. apc.enabled = 1 
  10. apc.shm_segments = 1 
  11. apc.shm_size = 64M 
  12. apc.optimization = 1 
  13. apc.num_files_hint = 0 
  14. apc.ttl=7200 
  15. apc.user_ttl=7200 
  16. apc.gc_ttl = 3600 
  17. apc.cache_by_default = on
安装到此已经完成!
重新启动nginx和php-fpm ,用测试页面访问。
此文章仅供参考!有不妥之处欢迎指正!共同学习!
 

本文转自 wgkgood 51CTO博客,原文链接:http://blog.51cto.com/wgkgood/521209
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
7月前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能MySQL服务器配置,解决常见的性能瓶颈问题。
1072 0
|
9月前
|
安全
基于Reactor模式的高性能服务器之Acceptor组件(处理连接)
本节介绍了对底层 Socket 进行封装的设计与实现,通过 `Socket` 类隐藏系统调用细节,提供简洁、安全、可读性强的接口。重点包括 `Socket` 类的核心作用(管理 `sockfd_`)、成员函数的功能(如绑定地址、监听、接受连接等),以及 `Acceptor` 组件的职责:监听连接、接收新客户端连接并分发给上层处理。同时说明了 `Acceptor` 与 `EventLoop` 和 `TcpServer` 的协作关系,并展示了其成员变量和关键函数的工作机制。
208 2
|
11月前
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
712 37
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
528 28
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
341 25
|
人工智能 安全 大数据
【限时特惠】阿里云服务器7折抢购!高性能+高性价比,开发者与企业必备攻略
阿里云服务器限时7折特惠,高性能、高性价比,为开发者和企业量身打造!新老用户均可参与,灵活配置满足多种需求,全球节点低延迟覆盖。自研神龙架构保障稳定性,安全防护全面,操作便捷,生态丰富。适用于个人开发、企业部署、跨境业务及AI计算等场景。点击专属链接立即抢购,活动名额有限,速来享受云端算力带来的高效体验!
363 0
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
存储 人工智能 弹性计算
2025年阿里云企业高性能云服务器租用价格与选型详解
随着企业数字化转型,阿里云于2025年推出多款高性能云服务器实例,涵盖计算、通用和内存密集型场景。文章分析了企业选择云服务器的核心要点,包括明确业务需求(如计算密集型任务推荐计算型实例)、性能与架构升级(如第八代实例性能提升20%),以及第九代实例支持AI等高算力需求。同时提供了配置价格参考和成本优化策略,助力企业实现效率与成本的最优平衡。
|
应用服务中间件 PHP nginx
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样

推荐镜像

更多