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