一、Nginx簡介
1、Nginx("engine x")是俄羅斯人編寫的一款高性能的HTTP和反向代理伺服器。Nginx能夠
選擇高效的epoll(Linux 2.6核心)、kqueue(FreeBSD)、eventport(Solaris 10)作為網絡
I/O模型,在高連接配接并發的情況下,Nginx是Apache伺服器不錯的替代品,它能支援高達50 000
個并發連接配接數的響應,而記憶體、CPU等系統資源消耗卻非常低,運作非常穩定。
國内,已經有新浪、網易、Discuz、六間房等著名公司使用Nginx作為Web伺服器或反向代理伺服器。
2、為什麼選擇Nginx
1)它可以高并發連接配接
2)記憶體消耗少
3)成本低廉,且開源
4)配置簡單、節省帶寬、穩定性高、支援熱部署
二、Nginx安裝
1、目前分為三個版本:舊的穩定版(0.6.x)、最新的穩定版(0.7.x)、開發版(0.8.x)
(這裡使用0.7.x版本為例)
2、GCC編譯器及相關工具
#yum -y install gcc gcc-c++ autoconf automake
3、子產品依賴
Nginx的一些子產品需要其他第三方庫的支援
#yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
4、源碼安裝Nginx
#tar zxvf nginx-0.7.67.tar.gz
#cd nginx-0.7.67
#./configure
#make
#make install
(預設安裝在/usr/local/nginx目錄,編輯.bash_profile,添加
PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/nginx/sbin/nginx,并激活)
四、Nginx的啟動、停止、平滑重新開機
Linux下,Nginx服務主要的操作就是啟動、停止和平滑重新開機
1、啟動:nginx -c /usr/local/nginx/conf/nginx.conf
netstat -tunlp檢視80端口是否開啟
2、停止:ps -ef|grep nginx
或kill - TERM `cat /usr/local/nginx/logs/nginx.pid`
或強制停止:pkill -9 nginx
3、Nginx的平滑重新開機
先測試文法:
[root@localhost ~]# nginx -t
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
此出現則ok
重新開機:
kill -HUP Nginx的主程序号(即nginx: master process /usr/local/nginx/sbin/nginx)
或kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
五、Nginx的虛拟主機配置
(/usr/local/nginx/conf/nginx.conf)
1、基于ip的虛拟主機配置
#ifconfig eth0:0 192.168.0.4/24
#route add -host 192.168.0.4 dev eth0:0
#ifconfig eth0:1 192.168.0.5/24
#route add -host 192.168.0.5 dev eth0:1
重新開機失效,可添加到/etc/rc.local
(nginx.conf)
http {
#第一個虛拟主機
server {
listen 192.168.0.3:80;
server_name 192.168.0.3;
access_log logs/server1.access.log combined;
location / {
root /data0/htdocs/server1;
index index.html index.htm;
}
}
#第二個虛拟主機
listen 192.168.0.4:80;
server_name 192.168.0.4;
access_log logs/server2.access.log combined;
root /data0/htdocs/server2;
#第三個虛拟主機
listen 192.168.0.5:80;
server_name 192.168.0.5;
access_log logs/server3.access.log combined;
root /data0/htdocs/server3;
}
2、配置基于域名的虛拟主機
listen 80;
server_name a.sea.com;
access_log logs/a.sea.com.access.log combined;
root /data0/htdocs/a.sea.com;
server_name b.sea.com;
access_log logs/b.sea.com.access.log combined;
server_name c.sea.com;
access_log logs/c.sea.com.access.log combined;
root /data0/htdocs/c.sea.com;
六、Nginx負載均衡及反向代理
1、負載均衡
Upstream子產品是Nginx負載均衡的主要子產品,它提供了一個簡單方法來實作在輪詢和用戶端ip之間的後端
伺服器負載均衡,并可以對後端伺服器進行健康檢查。
upstream backend {
server backend1.example.com weight=5
server backend2.example.com:8080;
server unix:/tmp/backend3;
server {
location / {
proxy_pass http://backend;
2、反向代理
worker_processes 10;
error_log /data1/logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
include mime.types;
default_type application/octet-stream;
server_name_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
limit_zone crawler $binary_remote_addr 10m;
client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 16k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
upstream php_server_pool {
server 192.168.0.10:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.0.11:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.0.12:80 weight=4 max_fails=2 fail_timeout=30s;
upstream message_server_pool {
server 192.168.0.13:3245;
server 192.168.0.14:3245 down;
upstream bbs_server_pool {
server 192.168.0.15:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.0.16:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.0.17:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.0.18:80 weight=1 max_fails=2 fail_timeout=30s;
#第一個虛拟主機,反向代理php_server_pool這組伺服器
server
{
listen 80;
server_name www.sea.com;
location /
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://php_server_pool;
proxy_set_header Host www.sea.com;
proxy_set_header X-Forwarded-For $remote_addr;
access_log /data1/logs/www.sea.com_access.log;
#第二個虛拟主機
server_name www1.sea.com;
location /message/
proxy_pass http://message_server_pool;
proxy_set_header Host $host;
access_log /data1/logs/message.sea.com_access.log;
server_name bbs.sea.com *.bbs.sea.com;
proxy_pass http://bbs_server_pool;
access_log off;
七、編譯安裝MySQL 5.1.44
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
tar zxvf mysql-5.1.44.tar.gz
cd mysql-5.1.44/
./configure --prefix=/usr/local/web_server/mysql/ --enable-shared --enable-assembler --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase --with-charset=utf8 --with-extra-charsets=gbk,gb2312,utf8 --with-mysqld-user=mysql
make && make install
mkdir /usr/local/web_server/mysql/var
mkdir /usr/local/web_server/mysql/tmp
mkdir /usr/local/web_server/mysql/logs
mkdir /usr/local/web_server/mysql/etc
chmod +w /usr/local/web_server/mysql/
chown -R mysql:mysql /usr/local/web_server/mysql/
cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
cp support-files/my-huge.cnf /etc/my.cnf
/usr/local/web_server/mysql/bin/mysql_install_db --basedir=/usr/local/web_server/ --datadir=/usr/local/web_server/mysql/var --user=mysql
登陸到mysql,執行一下語句:
grant all PRIVILEGES on *.* to mysql@'localhost' identified by '123456';
grant all PRIVILEGES on *.* to mysql@'%' identified by '123456';
執行了上面的語句後,再執行下面的語句,方可立即生效。
flush privileges;
3. 安裝postgresql
/usr/sbin/groupadd postgres
/usr/sbin/useradd -g postgres postgres
tar jxvf postgresql-8.3.12.tar.bz2
cd postgresql-8.3.12
./configure --prefix=/usr/local/web_server/pgsql
chmod +w /usr/local/web_server/pgsql/
chown -R postgres:postgres /usr/local/web_server/pgsql/
八、編譯安裝PHP(FastCGI模式)
1、php-5.2.14.tar.bz2
php-5.2.14-fpm-0.5.14.diff.gz
mysql-5.1.46-linux-i686-glibc23.tar.gz
libiconv-1.13.1.tar.gz
libmcrypt-2.5.7.tar.gz
mcrypt-2.6.8.tar.gz
memcache-2.2.5.tgz
mhash-0.9.9.9.tar.bz2
eaccelerator-0.9.6.1.tar.bz2
PDO_MYSQL-1.0.2.tgz
ImageMagick.tar.gz
imagick-2.2.2.tgz
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13/
./configure --prefix=/usr/local
make
make install
tar zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7/
./configure
make
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
tar jxvf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9/
cd ../
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
2、
tar zxvf php-5.2.13.tar.gz
gzip -cd php-5.2.13-fpm-0.5.13.diff.gz | patch -d php-5.2.13 -p1
cd php-5.2.13
./configure --prefix=/usr/local/web_server/php5 --with-config-file-path=/usr/local/web_server/php5/etc --with-pgsql=/usr/local/web_server/pgsql --with-pdo-pgsql=/usr/local/web_server/pgsql --with-iconv-dir=/usr/local/web_server/ --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-fastcgi --enable-fpm --with-libevent=/usr/local/web_server/libevent/ --enable-force-cgi-redirect --enable-mbstring=all --with-mcrypt=/usr/local/web_server/ --with-gd --enable-gd-native-ttf --with-openssl --with-pcre-dir=/usr/local/web_server/pcre/ --with-pcre-regex=/usr/local/web_server/pcre --with-mhash --enable-pcntl --enable-sockets --without-sqlite --without-pdo-sqlite --enable-memcache --enable-zip --with-mysql=/usr/local/web_server/mysql --with-mysqli=/usr/local/web_server/mysql/bin/mysql_config --with-pdo-mysql=shared,/usr/local/web_server/mysql --enable-sysvshm
ZEND_EXTRA_LIBS='-liconv' make
(如果出現錯誤,按照以下方式做
編輯 Makefile 大約 70 行左右的地方:
EXTRA_LIBS = ….. -lcrypt
在最後加上 -liconv,例如:
EXTRA_LIBS = ….. -lcrypt -liconv
然後重新再次 make 即可,不用make clean 直接make)
make install
cp php.ini-dist /usr/local/web_server/php5/etc/php.ini
5、編譯安裝PHP5擴充子產品 (參考:http://willko.javaeye.com/blog/332993)
安裝memcached (memcached: http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz )
tar zxvf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure --prefix=/usr/local/web_server/memcached --enable-threads --enable-64bit --with-libevent=/usr/local/web_server/libevent/
php安裝對memcached的支援
php有兩個版本的memcached用戶端
1.memcached
這個是新版的用戶端基于libmemcached,是以必須要安裝libmemcached
先安裝libmemcached
下載下傳位址:http://download.tangent.org/libmemcached-0.44.tar.gz
tar zxvf libmemcached-0.44.tar.gz
cd libmemcached-0.44
./configure --prefix=/usr/local/web_server/libmemcached/ --with-memcached --with-libevent-prefix=/usr/local/web_server/libevent/
安裝php memcached用戶端
下載下傳位址:http://pecl.php.net/get/memcached
tar zxvf memcached-0.1.4.tgz
cd memcached-0.1.4
/usr/local/web_server/php5/bin/phpize
./configure --prefix=/usr/local/web_server --with-php-config=/usr/local/web_server/php5/bin/php-config --with-libmemcached-dir=/usr/local/web_server/libmemcached/ --enable-memcached
make && make instal
2.memcache
下載下傳位址:http://pecl.php.net/get/memcache
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
./configure --prefix=/usr/local/web_server --with-php-config=/usr/local/web_server/php5/bin/php-config --enable-memcache
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
./configure --prefix=/usr/local/web_server/ --enable-eaccelerator=shared --with-php-config=/usr/local/web_server/php5/bin/php-config
make
按shift+g鍵跳到配置檔案(php.ini)的最末尾,加上以下配置資訊:
引用
[eaccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
./configure --prefix=/usr/local/web_server/ --with-php-config=/usr/local/web_server/php5/bin/php-config --with-pdo-mysql=/usr/local/web_server/mysql
cd PDO_MYSQL-1.0.2
./configure --prefix=/usr/local/web_server/ --with-php-config=/usr/local/web_server/php5/bin/php-config --with-pdo-pgsql=/usr/local/web_server/pgsql/
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.5.1-2/
./configure --prefix=/usr/local/web_server/
tar zxvf imagick-2.3.0.tgz
cd imagick-2.3.0/
./configure --prefix=/usr/local/web_server/ --with-php-config=/usr/local/web_server/php5/bin/php-config --with-imagick=/usr/local/web_server/
wget http://www.ftphp.com/scws/down/scws-dict-chs-utf8.tar.bz2
wget http://www.ftphp.com/scws/down/scws-dict-chs-gbk.tar.bz2
tar jxvf scws-1.1.3.tar.bz2
cd scws-1.1.3
./configure --prefix=/usr/local/web_server/scws
cd /usr/local/src
tar jxvf scws-dict-chs-utf8.tar.bz2 -C /usr/local/web_server/scws/etc/
tar jxvf scws-dict-chs-gbk.tar.bz2 -C /usr/local/web_server/scws/etc/
cd scws-1.1.3/phpext/
./configure --with-scws=/usr/local/web_server/scws/ --with-php-config=/usr/local/web_server/php5/bin/php-config