Nginx is a high performance web and proxy (web and mail proxy) server. Generally, nginx is used as a front-end proxy server to Apache webserver.
Nginx is known to be slow while serving dynamic pages like php. Normally, nginx is using fast-cgi method which is slow. Therefore, it's a good idea to run Apache as back-end server to Nginx and serve dynamic php pages from Apache. If your website's php pages suitable to cache for a certain time, you can use Nginx proxy module and proxy_store command to cache Apache served php pages output in Nginx automatically as html. Here, I'll give you instructions how to use Nginx's memcache module and Danga Software's memcached deamon to store your content in memory and serve it. Serving content from memory will be faster than serving it from disk. memcached's default listening port is 11211. You can find instructions on Danga Software's website how to compile and run memcached.
Now, we can look our Nginx configuration for memcache implementation. Let's suppose we have two Apache webservers running on two different physical servers. IP addresses of the Apache webservers are 192.168.2.3 and 192.168.2.4. We'll use those Apache webservers as back-end servers. We have a Nginx server as front-end to them on 192.168.2.1 ip adress. First of all, we have to tell Nginx about those back-end servers. We use Nginx upstream module for this purpose. As you can see below, we defined a upstream named "backend". The configuration has our two Apache webservers ip addresses. Upstream module let's you also give weight to each server in configuration. Our first server's hardware configuration is better than the second one, so we gave the first one weight value 2. This configuration should be in http section of Nginx configration file (nginx.conf).
upstream backend {
server 192.168.2.3 weight=2;
server 192.168.2.4;
}
We have created our upstream configuration. Now, we have to tell Nginx, which files will be server by memcache module. I have decided to only serve some image types by memcache. The following configuration part should be in server section of Nginx configuration. The "location" directive tell's the nginx to handle every file which ends with given extensions like .jpg,.png and .gif in url. As first step, Nginx will check the url in memcached. Memcached is simple key value memory database. Every row has a unique key.In our case the key is our url. If Nginx, finds the key (url) in memcached, it will get contents of the key from mecached and send it back to client. This operation is running completely from memory. In case that the key (url) not found, it will fallback to 404 and as you can see, we catch 404 error and send request to our back-end Apache servers. Nginx will then send Apache's response to client.
location ~* \.(jpg|png|gif)$ {
access_log off;
expires max;
add_header Last-Modified "Thu, 26 Mar 2000 17:35:45 GMT";
set $memcached_key $uri;
memcached_pass 127.0.0.1:11211;
error_page 404 = /fetch;
}
location /fetch {
internal;
access_log off;
expires max;
add_header Last-Modified "Thu, 26 Mar 2000 17:35:45 GMT";
proxy_pass http://backend;
break;
}
Of course, we have a drawback here. Nginx's memcache module never put anything automatically in memcached. You have to store your information in it manually by using something like a script. Considering our example, if we forget to store information about a file in memcached, it will be always served by back-end Apache servers. Here is a simple php script, which finds given image types and deploy it into memcached for Nginx.
$val -> ".filesize($val)."\n";
$value = file_get_contents($val);
memcache_add($memcache_obj, $url, $value, false, 0);
}
?>
You need to run this script one time, it will find all given image types and store them into memcached. I run this on one of the Apache back-end servers. It will store data into memcached. This memcached is located on Nginx server which ip address is 192.168.2.1 .
http://www.quantrimang.com.vn/hedieuhanh/linux/84042_Cai-dat-Memcached-va-module-PHP5-MemCached-tren-Debian-6-0-Squeeze.aspx
Cài đặt Memcached và module PHP5-MemCached trên Debian 6.0 – Squeeze
Trong bài viết dưới đây, chúng tôi sẽ giới thiệu và hướng dẫn các bạn một số bước cơ bản để cài đặt Memcached và module PHP5-MemCached hỗ trợ trên nền tảng Debian 6.0(Squeeze) cùng với Apache2. Về mặt bản chất, Memcached là 1 hệ thống mã nguồn mở, hoàn toàn miễn phí, hiệu suất hoạt động khá cao trong việc phân phối bộ nhớ đệm dành cho các đối tượng trong hệ thống. Thông thường, Memcached được ứng dụng để tăng tốc độ các ứng dụng web dựa trên cơ chế giảm tải dung lượng cơ sở dữ liệu.1. Quá trình cài đặt:
Để tiến hành cài đặt, các bạn sử dụng câu lệnh sau:
apt-get install memcached php5-memcached
"apt-get" là cấu trúc lệnh cơ bản để xử lý các gói dữ liệu cần thiết – package. Ví dụ, khi muốn cài Memcached và một số module php có liên quan, nhưng lại không chắc chắn về tên chính xác của gói cài đặt, hãy sử dụng cấu trúc lệnh dưới đây để tìm kiếm:
apt-cache search memcache
Hệ thống sẽ trả về danh sách kết quả như sau:
memcached - A high-performance memory object caching system
memcachedb - Persistent storage engine using the memcache protocol
......
php5-memcache - memcache extension module for PHP5
php5-memcached - memcached extension module for PHP5
Tại đây, các bạn sẽ thấy php5-memcache và php5-memcached, về bản chất thì php5-memcached là gói mới hơn và được bổ sung thêm nhiều tính năng. Chúng ta sẽ áp dụng php5-memcached trong bài thử nghiệm này.
2. Kiểm tra:
Kiểm tra:
Sau khi cài đặt thành công, memcached sẽ hoạt động ngay. Nếu muốn kiểm tra thì chúng ta dùng lệnh:
netstat -tap | grep memcached
Kết quả hiển thị sẽ trông giống như sau:
tcp 0 0 localhost:11211 *:* LISTEN 2132/memcached
Nếu muốn thay đổi cấu hình hoặc thiết lập thì các bạn hãy sử dụng file /etc/memcached.conf.
Kiểm tra module PHP5-Memcached:
Trước tiên chúng ta cần khởi động lại web server Apache:
/etc/init.d/apache2 restart
Tạo mới file phpinfo.php:
vi phpinfo.php
và nhập mã:
Sau đó, mở trình duyệt và gõ file php để kiểm tra kết quả. Quá trình ứng dụng của Memcached tuy khá đơn giản, nhưng tùy vào từng trường hợp và mô hình áp dụng thì người quản trị phải thay đổi thông số cấu hình sao cho phù hợp. Các bạn có thể tham khảo thêm tại đây.
Ví dụ tham khảo:
addServer('localhost', 11211);
$m->set('key', 'hello world');
var_dump($m->get('key'));
?>
Chúc các bạn thành công!
Đương dẫn tìm hiểu thêm về module PHP-MemCached và MemCached.
http://blog.cuongnv.com/2009/08/su-dung-nginx-va-memcached-e-tang-toc.html
Sử dụng Nginx và memcached để tăng tốc Apache trên Debian Lenny
Trong bài viết này, tôi giới thiệu cách thức cài đặt Nginx kết hợp với memcached trên Debian "lenny" 5.0 nhằm tăng hiệu năng phục vụ của web server mà ở đây là Apache 2.2. Bài viết này là tổng hợp từ nhiều nguồn khác nhau trên Internet và là bản ghi chép của tôi trong quá trình nâng cấp một web server thực tế có lượng truy cập lớn.1. Giới thiệu
Gần đây, web server mà tôi quản lí (phi vụ lợi) có lượng truy cập tăng đột biến mà không phải vì bị tấn công. Tải (load) của server những lúc cao điểm thường lên ~40 trong khi chỉ có 8 cores phục vụ với 8GB RAM. Công việc tối ưu bắt đầu.
- Nginx (phát âm giống "engine x") là một máy chủ web (web server), proxy ngược (reserve proxy) và e-mail proxy (IMAP/POP3) nhẹ, hiệu năng cao, sử dụng giấy phép kiểu BSD. Nó có thể chạy trên UNIX, Linux, các dòng BSD, Mac OS X, Solaris và Microsoft Windows.
- memcached (phát âm là mem-cash-dee) là một hệ thống lưu trữ bản sao các đối tượng (objects) và dữ liệu được truy cập nhiều lần để tăng tốc độc truy xuất. Nó thường được sử dụng để tối ưu hóa việc tải dữ liệu từ cơ sở dữ liệu cho các ứng dụng trên nền web. Vào lúc đầu, hệ thống memcached được phát triển bởi Danga Interactive và dùng cho LiveJournal. Sau đó memcached trở nên phổ biến và được dùng trên các trang web khác.
Trong bài viết này, tôi chỉ hướng dẫn cài đặt trên Debian "lenny" 5.0. Cài đặt trên Ubuntu "chắc" cũng tương tự, nếu có thì chỉ là thay đổi chút ít. Ở đây tôi không hướng dẫn cài ACL và mpm-itk mà sẽ giới thiệu trong một dịp khác.
Chúng ta cần cài module rpaf của Apache vì request gửi đến Apache sẽ xuất pháp từ Nginx và do vậy mang IP của máy chạy Nginx. Module rpaf sẽ giúp Apache nhận ra IP thực của client trong request mà Nginx gửi sang.
Ta được:
Bật module php5 và rpaf:
Ta tạo một website làm ví dụ, ở đây tôi sử dụng tên miền blog.cuongnv.com. Ta tạo một file cấu hình cho website này như sau:
Và điền nội dung như sau (thư mục gốc cho web của domain này là /home/www/blog.cuongnv.com/public_html).
ServerName blog.cuongnv.com
ServerAdmin blog@cuongnv.com
DocumentRoot "/home/www/blog.cuongnv.com/public_html"
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
ErrorLog /var/log/apache2/blog.cuongnv.com_error_log
LogFormat "%h %l %>s %b" common
CustomLog /var/log/apache2/blog.cuongnv.com_access_log common
Kích hoạt domain này (bản chất là tạo một soft link trong thư mục /etc/apache2/sites-enabled tới file tương ứng trong thư mục /etc/apache2/sites-available):
Khởi động lại dịch vụ Apache:
Khởi động lại dịch vụ memcached nếu chưa tự khởi động khi cài xong:
Như vậy là xong phần cấu hình cho Apache. Bây giờ chúng ta sẽ cấu hình cho Nginx. Cấu trúc thư mục trong /etc của Nginx cũng hoàn toàn tương tự như của Apache.
Điền nội dung sau:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 32 4k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
Bây giờ là công việc cấu hình một virtual host cho domain blog.cuongnv.com để tương ứng với Apache. Tạo file:
Với nội dung như sau:
listen 80;
server_name blog.cuongnv.com;
access_log /var/log/nginx/blog.cuongnv.com.access.log;
location / {
proxy_pass http://blog.cuongnv.com:8080;
include /etc/nginx/proxy.conf;
}
location ~ \.php$ {
proxy_pass http://blog.cuongnv.com:8080;
include /etc/nginx/proxy.conf;
}
# Danh sach file tinh vi dụ
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|tar|mid|midi|wav|js)$ {
expires max;
set $memcached_key "$scheme://$host$request_uri";
memcached_pass 127.0.0.1:11211;
error_page 404 = /fallback;
}
location /fallback {
internal;
expires max;
proxy_pass http://blog.cuongnv.com:8080;
include /etc/nginx/proxy.conf;
break;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
Kích hoạt domain trên:
Khởi động lại Nginx:
Bây giờ bạn đã có thể truy cập vào website vừa cấu hình một cách bình thường do Nginx phục vụ, ở đây là: http://blog.cuongnv.com. Ngoài ra, bạn có thể truy cập trực tiếp dịch vụ của Apache tại http://blog.cuongnv.com:8080. Tất nhiên đây là các link giả định, thực tế phải là đường link của bạn.
Tạo file tương ứng trong /etc/cron.daily:
Điền nội dung sau:
');
$newval = array('http://blog.cuongnv.com');
$memcache_obj = memcache_connect('127.0.0.1', 11211);
while (list($key, $val) = each($mylist))
{
$url = str_replace($srch, $newval, $val);
echo "$key => $url -> " . filesize($val) . "\n";
$value = file_get_contents($val);
memcache_add($memcache_obj, $url, $value, false, 0);
}
?>
Sửa quyền của file để là file chạy và khởi động lại dịch vụ cron:
Tài liệu tham khảo
- Nginx wiki
- Top 10 Nginx Tutorial
- Using Nginx As Reverse-Proxy Server On High-Loaded Sites
- Speeding up your nginx server with memcached
http://gaquay.wordpress.com/2009/04/09/cai-dat-nginx-tu-file-ma-nguon/
Cài đặt Nginx từ file mã nguồn
Cài đặt các gói cần thiết cho nginx:
yum install pcre-devel zlib-devel openssl-devel
Sau đó download file mã nguồn nginx từ trang chủ: http://nginx.net/
Tại thời điểm hiện tại phiên bản mới nhất là 0.7.5.0
wget http://sysoev.ru/nginx/nginx-0.7.50.tar.gz
Giải nén:
tar -xf nginx-0.7.50.tar.gz
cd nginx-0.7.50
Và tiến hành cài đặt:
./configure –sbin-path=/usr/local/sbin –with-http_ssl_module
make
make install
Nếu trước đây bạn có sử dụng apache hay các phần mềm khác cài đặt bằng yum, thì hầu hết việc khởi chạy hay dừng chương trình thông qua /etc/init.d/ . Nhưng khi biên dịch từ file mã nguồn thì không như vậy. Vì vậy chúng ta phải tạo bằng tay đoạn mã này.
nano /etc/init.d/nginx
Sau đó copy đoạn mã này vào và save lại:
#!/bin/sh
#
# nginx – this script starts and stops the nginx daemin
#
# chkconfig: – 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid# Source function library.
. /etc/rc.d/init.d/functions# Source networking configuration.
. /etc/sysconfig/network# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0nginx=”/usr/local/sbin/nginx”
prog=$(basename $nginx)NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf”
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $”Starting $prog: “
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}stop() {
echo -n $”Stopping $prog: “
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}restart() {
configtest || return $?
stop
start
}reload() {
configtest || return $?
echo -n $”Reloading $prog: “
killproc $nginx -HUP
RETVAL=$?
echo
}force_reload() {
restart
}configtest() {
$nginx -t -c $NGINX_CONF_FILE
}rh_status() {
status $prog
}rh_status_q() {
rh_status >/dev/null 2>&1
}case “$1″ in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $”Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}”
exit 2
esac
Phân quyền thi hành cho đoạn mã này:
chmod +x /etc/init.d/nginx
/sbin/chkconfig nginx on
Và bây giờ việc start, stop, hay reload thông qua các dòng lệnh sau:
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx reload
Với việc cài đặt bằng mã nguồn thì file config sẽ nằm ở: /usr/local/nginx/conf/nginx.conf
Nguồn: http://khanh.com.vn/post/2011/08/31/Cau-hinh-Nginx-lam-Reserve-Proxy-tren-CentOS.aspxCấu hình Nginx làm Reserve Proxy trên CentOS
I – Giới thiệu:
Nginx là một máy chủ web (web server), proxy ngược (reserve proxy) và e-mail proxy (IMAP/POP3) nhẹ, hiệu năng cao, sử dụng giấy phép mở BSD. Nginx có thể chạy trên UNIX, Linux, các dòng BSD, Mac OS X, Solaris và Microsoft Windows. Theo thống kê của Netcraft, trong số 1 triệu website lớn nhất thế giới, có 6,52% sử dụng nginx. Tại Nga, quê hương của nginx, có đến 46,9% sử dụng máy chủ này. Nginx chỉ đứng sau Apache và IIS (của Microsoft).
Trên thực tế, số lượng webserver dùng Nginx để chạy website là rất ít, thay vào đó người ta sẽ sử dụng Apache bởi vì Apache tỏ ra tốt hơn Nginx trong việc phục vụ các trang web động (dynamic page). Nhưng vì tính đa dụng nên Apache có rất nhiều thành phần “thừa” khiến cho Web Server của chúng ta trở nên chậm chạp.
Giải pháp đưa ra là chúng ta sẽ sử dụng Nginx để làm proxy ngược. Nginx sẽ chạy ở phía trước (front-end) phục vụ port 80, còn Apache sẽ chạy ở phía sau (back-end) lắng nghe trên port 8080. Các Client truy vấn tới Web Server sẽ theo dạng Client <-----> Nginx <-----> Apache.
Trong bài này, mình sẽ trình bày cách cài đặt và cấu hình Nginx làm Reserve Proxy cho dịch vụ httpd trên hệ điều hành CentOS 6.
II – Yêu cầu:
- Hệ điều hành CentOS (mình sử dụng bản CentOS 6).
- Đã cài đặt dịch vụ httpd (tham khảo tại đây).
III – Thực hiện:
Kích hoạt sử dụng lệnh yum tải các gói từ EPEL:
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm
# yum repolist
Cài đặt Nginx sử dụng lệnh yum
# yum install nginx -y
Cấu hình Reserve Proxy
Tạo file porxy.conf
# vi /etc/nginx/conf.d/proxy.conf
Thêm vào nội dung sau
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
Mở file nginx.conf
# vi /etc/nginx/nginx.conf
Thêm vào thông tin như sau
server {
listen 80;
server_name khanh.com.vn www.khanh.com.vn;
access_log /var/log/nginx/khanh.com.access.log ;
error_log /var/log/nginx/khanh.com.error.log ;
location / {
proxy_pass http://192.168.10.109:8080/ ;
include /etc/nginx/conf.d/proxy.conf;
}
}
Trong đó:
- Listen 80: là port mà Nginx lắng nghe Client.
- Server_name: Domain của Website
- Proxy_pass: địa chỉ IP của Web Server kèm Port của httpd
- Include: trỏ tới tệp tin proxy.conf vừa cấu hình ở trên.
Sau khi sửa xong nội dung file nginx.conf, ta lưu lại và kiểm tra nội dung cấu hình đã chính xác chưa
# nginx -t
Sau đó khởi động lại Nginx
# /etc/init.d/nginx restart
Tiếp tục, ta sẽ cấu hình dịch vụ httpd listen trên cổng 8080
Mở file httpd.conf
vi /etc/httpd/conf/httpd.conf
Sửa giá trị NameVirtualHost là *:8080 và Listen là 8080
Sau đó ta sẽ khởi động lại dịch vụ httpd
# service httpd restart
Từ client ta truy cập tới Web Server thành công như hình dưới.
Trên Web Server ta kiểm tra lại các port đang Listen được kết quả như hình bên dưới.
# netstat -ltpn | grep 80
Cấu hình Nginx làm Reserve Porxy thành công!
No comments:
Post a Comment