動態nginx緩存優化加速搭建教程[原創]

Nginx+php(FastCGI)+Memcached+Mysql+APC高性能web服務器安裝

Nginx介紹:

Nginx 超越 Apache 的高性能和穩定性,使得國內使用 Nginx 作爲 Web 服務器的網站也越來越多,其中包括國內最大的電子地圖MapBar、新浪博客、新浪播客、網易新聞等門戶網站頻道,六間房、56.com等視頻分享網站,Discuz!官方論壇、水木社區等知名論壇,豆瓣、YUPOO相冊、海內SNS、迅雷在線等新興Web 2.0網站,更多的網站都在使用Nginx配置。

Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。  其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx。


爲什麼Nginx的性能要比Apache高得多?

這得益於Nginx使用了最新的epoll(Linux 2.6內核)和kqueue(freebsd)網絡I/O模型,而Apache則使用的是傳統的select模型。目前Linux下能夠承受高併發訪問的Squid、Memcached都採用的是epoll網絡I/O模型。 處理大量的連接的讀寫,Apache所採用的select網絡I/O模型非常低效。

Nginx 是一個很牛的高性能Web和反向代理服務器, 它具有有很多非常優越的特性:

作爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連接併發的情況下,Nginx是Apache服務器不錯的替代品: Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟件平臺之一. 能夠支持高達 50,000 個併發連接數的響應, 感謝Nginx爲我們選擇了 epoll and kqueue 作爲開發模型.

Nginx作爲負載均衡服務器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作爲 HTTP代理 服務器對外進行服務. Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多. 。Nginx可作爲7層負載均衡服務器來使用。

作爲郵件代理服務器: Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作爲郵件代理服務器), Last.fm 描述了成功並且美妙的使用經驗.

Nginx 是一個安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法), Bugs 非常少的服務器: Nginx 啓動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動. 你還能夠不間斷服務的情況下進行軟件版本的升級 .

總體來說nginx的有以下八大優點:

1.高併發連接:官方測試能支撐5萬併發連接,在實際生產環境中跑到2,~3W併發連接。

2.內存消耗少:在3W併發連接下,開啓的10個NGINX進程才消耗150M內存(15M*10=150M)

3.配置文件非常簡單:風格跟程序一樣通俗易懂。

4.成本低廉:Nginx作爲開源軟件,可以免費使用,而購買F5 BIG-IP、NetScaler

等硬件負載均衡交換機則需要十多萬至幾十萬人民幣。

5.支持rewrite重寫規則:能夠根據域名、URL的不同,將HTTP請求分發到不同的後端服務器羣組。

6.內置的健康檢查功能:如果Nginx Proxy後端的後臺web服務器宕機了,不會音響前端訪問。

7.節省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭。

8.穩定性高:用於反向代理,宕機的概率微乎其微。


介紹這麼多nginx 的優點.下面來具體實現下LEMP架構(linux+nginx+mysql+php/perl/python)


可能有朋友對靜態動態解析過程不太清楚,筆者按照自己理解簡單闡述,如有錯誤地方請前輩多加指點。

nginx只是提供一個靜態web服務,動態web服務還需要與PHP等腳本語言結合使用。


Nginx+php(FastCGI)+Memcached+Mysql+APC 是目前主流的高性能服務器搭建方式!適合大中型網站,小型站長也可以採用這種組合!


前面 nginx php mysql大家已經很熟悉了,這裏簡單介紹下 memcached 和 APC 。

 

一:memcached

 

在很多場合,我們都會聽到 memcached 這個名字,但很多同學只是聽過,並沒有用過或實際瞭解過,只知道它是一個很不錯的東東。這裏簡單介紹一下,memcached 是高效、快速的分佈式內存對象緩存系統,主要用於加速 WEB 動態應用程序。由於nginx對靜態網站加速效果明顯,而動態一直效果不太好,有了memcached,生活將變得簡單。

 

二:APC


Alternative PHP Cache(APC)是 PHP 的一個免費公開的優化代碼緩存。它用來提供免費,公開並且強健的架構來 緩存和優化 PHP 的中間代碼。 



安裝配置:

準備工作,需要上面提到的軟件另外還有兩個包mysql-5.1.41.tar.gz、php-5.3.5.tar.gz (其他相似版本也可以)可以在官網下載。

一、編譯安裝Nginx (安裝nginx之前需要安裝pcre包和zlib以支持重寫,正則以及網頁壓縮等等)


(1)首先配置安裝pcre:

cd  /usr/src  &&tar xzf pcre-8.01.tar.gz   &&cd pcre-8.01  &&  ./configure   --prefix=/usr/local/pcre  &&make &&make install


(2)然後再編譯安裝nginx :

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

【nginx注意*  --with-pcre=/usr/src/pcre-8.01指向的是源碼包解壓的路徑,而不是安裝的路徑,否則會報

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)、mysql安裝完畢,創建mysql用戶和組並初始化數據庫,並啓動數據庫。


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 &   


【如果mysql啓動報錯,請檢查 /usr/local/mysql/var 目錄,mysql是否有權限】

三、安裝 php :

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=/u

sr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-li

bxml-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


(1)、配置nginx ,拷貝nginx配置文件:

user  www www;

worker_processes 8;

error_log  /usr/local/nginx/logs/error.log  crit;

pid        /usr/local/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.

worker_rlimit_nofile 51200;

events

{

  use epoll;

  worker_connections 51200;

}

http

{

  include      mime.types;

default_type  application/octet-stream;

charset    utf-8;

error_page  400 404 403 500 502 503 http://blog.mgcrazy.com;   

server_names_hash_bucket_size 128;

client_header_buffer_size 2k;

large_client_header_buffers 4 4k;

client_max_body_size 8m;

sendfile on;

tcp_nopush        on;

keepalive_timeout 60;

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2

keys_zone=TEST:10m

inactive=5m;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 4k;

fastcgi_buffers 8 4k;

fastcgi_busy_buffers_size 8k;

fastcgi_temp_file_write_size 8k;

##如下設置fastcGI_cache緩存,加速你的web站點!

fastcgi_cache TEST;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

fastcgi_cache_min_uses 1;

fastcgi_cache_use_stale error timeout invalid_header http_500;

fastcgi_cache_key http://$host$request_uri; 

open_file_cache max=204800 inactive=20s;

open_file_cache_min_uses 1;

open_file_cache_valid 30s;

tcp_nodelay on;


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;


##設置301跳轉,讓二級域名跳轉到你規定的url;

  server

  {

    listen       80;

    server_name blog.mgcrazy.com wgkgood.gicp.net linux.mgcrazy.com;

           if ($host = 'wgkgood.gicp.net' ) {

    rewrite ^/(.*)$ http://blog.mgcrazy.com/$1 permanent;   

}

    if ($host = 'linux.mgcrazy.com' ) {

    rewrite ^/(.*)$ http://blog.mgcrazy.com/$1 permanent;

}


    index index.php index.htm index.html;

    root  /home/webapps/www;

    #limit_conn   crawler  20;

    location ~ .*\.(php|php5)?$

    {

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fcgi.conf;

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

      expires      30d;

    }

    location ~ .*\.(js|css)?$

    {

      expires      1h;

    }

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '

              '$status $body_bytes_sent "$http_referer" '

              '"$http_user_agent" $http_x_forwarded_for';

    access_log  /usr/local/nginx/logs/access.log  access;

      }

}


Nginx配置完畢!啓動nginx ;/usr/local/nginx/sbin/nginx 即可,重啓nginx命令如下/usr/local/nginx/sbin/nginx –s  reload



(2)、配置fcgi.conf文件如下


fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;


fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;


fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;


fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;


# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;


五、配置php配置文件:


cd /usr/local/php5/etc/ && cp   php-fpm.conf.default   php-fpm.conf


然後根據提示編輯php-fpm.conf裏面的選項。


開啓php-fpm

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配置:


cd /usr/src && tar xzf APC-3.1.4.tgz &&cd APC-3.1.4

/usr/local/php5/bin/phpize && ./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php5/bin/php-config &&make&& make install


安裝完後會生成一個apc.so在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/裏面。


七、安裝memcached,使fastcGI支持memcached

首先安裝libevent


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

然後安裝memcached  //緩存加速

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

安裝完後,會在/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/裏生成一個memcache.so 這個模塊:



八、編輯php.ini


默認的php.ini在/usr/local/php5/lib/php.ini 

extension_dir = "./"   //修改路徑

修改爲

extension_dir="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626"

把下面這些添加到最後:

extension = apc.so

extension=memcache.so //這裏引用緩存模塊

[APC]

apc.enabled = 1

apc.shm_segments = 1

apc.shm_size = 64M

apc.optimization = 1

apc.num_files_hint = 0

apc.ttl=7200

apc.user_ttl=7200

apc.gc_ttl = 3600

apc.cache_by_default = on


安裝到此已經完成!

重新啓動nginx和php-fpm ,用測試頁面即可訪問。

此文凝聚筆者不少心血請尊重筆者勞動,轉載請註明出處,侵權必究,本人博客新地址

linux運維培訓 http://www.magedu.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章