1.Nginx配置檔案測試
1 2 3 |
root@kallen:/usr/local/nginx/sbin# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
2.Nginx啟動
1 |
[root@kallen ~]# /usr/local/nginx/sbin/nginx |
3.Nginx負載均衡
Nginx Architecture:
Nginx LoadBalance:
Nginx High Availability:
Nginx Access Process:
Nginx 的 upstream 目前支援4 種方式的分配——
(1)輪詢(預設) :
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
(2)weight :
指定輪詢機率,weight 和訪問比率成正比,用於後端伺服器效能不均的情況。
(3)ip_hash :
每個請求按訪問ip 的hash 結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session 的問題。可以針對同一個C 類地址段中的客戶端選擇同一個後端伺服器,除非那個後端伺服器宕了才會換一個。
(4)fair(第三方):
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
(5)url_hash(第三方):
按訪問url 的hash 結果來分配請求,使每個url 定向到同一個後端伺服器,後端伺服器為快取時比較有效。
4.Nginx安裝及配置
(1) nginx原始碼安裝
1 |
[root@kallen ~]# cd /usr/local/src/ |
1 2 3 |
[root@kallen ~]# wget http://syslab.comsenz.com/downloads/linux/nginx-0.9.6.tar.gz [root@kallen ~]# tar zxvf nginx-0.9.6.tar.gz [root@kallen ~]# cd nginx-0.9.6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/var/nginx.pid --lock-path=/usr/local/nginx/var/nginx.lock --http-client-body-temp-path=/dev/shm/nginx_temp/client_body --http-proxy-temp-path=/dev/shm/nginx_temp/proxy --http-fastcgi-temp-path=/dev/shm/nginx_temp/fastcgi --user=www --group=www --with-cpu-opt=pentium4F --without-select_module --without-poll_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_memcached_module --without-http_map_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-pcre=/usr/local/src/pcre-8.32/ --with-zlib=/usr/local/zlib |
1 2 |
[root@kallen ~]# make && make install [root@kallen ~]# mkdir /dev/shm/nginx_temp |
有的nginx版本編譯時會因為pcre編譯不過去,需要修改一下
--with-pcre=/usr/local/src/pcre-8.32
,前提是已經下載了pcre原始碼包pcre-7.8.tar.gz,並解壓到/usr/local/src/pcre-8.32
,不需要編譯pcre.
在實際安裝過程中可能需要手動安裝以下依賴包:
a. 安裝依賴軟體
1 |
[root@kallen ~]# apt-get --install-suggests install gcc g++ make |
b. 下載相關軟體
1 2 3 4 5 |
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz wget http://zlib.net/zlib-1.2.8.tar.gz wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2 wget http://tengine.taobao.org/download/tengine-2.0.2.tar.gz |
c. 安裝Pcre
1 2 3 4 |
tar zxvf pcre-8.35.tar.gz cd pcre-8.35 ./configure --prefix=/usr/local/pcre-8.35 make && make install |
d. 安裝Zlib
1 2 3 4 |
tar zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure --prefix=/usr/local/zlib-1.2.8 make && make install |
[ERROR]-1:
1 2 3 4 |
./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option |
[ERROR]-2:
1 2 3 4 |
configure: error: You need a C++ compiler for C++ support. make[1]: *** [/usr/local/src/pcre-8.32/Makefile] Error 1 make[1]: Leaving directory /home/kallen/MyDOC/nginx-1.8.0 make: *** [build] Error 2 |
安裝完成後的配置資訊如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[Nginx Configuration Summary] Configuration summary + using PCRE library: /usr/local/src/pcre-8.32 + OpenSSL library is not used + using builtin md5 code + sha1 library is not found + using zlib library: /usr/local/zlib nginx path prefix:"/usr/local/nginx" nginx binary file:"/usr/local/nginx/sbin/nginx" nginx configuration prefix:"/usr/local/nginx/conf" nginx configuration file:"/usr/local/nginx/conf/nginx.conf" nginx pid file:"/usr/local/nginx/var/nginx.pid" nginx error log file:"/usr/local/nginx/logs/error.log" nginx http access log file:"/usr/local/nginx/logs/access.log" nginx http client request body temporary files:"/dev/shm/nginx_temp/client_body" nginx http proxy temporary files:"/dev/shm/nginx_temp/proxy" nginx http fastcgi temporary files:"/dev/shm/nginx_temp/fastcgi" nginx http uwsgi temporary files:"uwsgi_temp" nginx http scgi temporary files:"scgi_temp" |
(2) 編寫nginx啟動指令碼
1 |
[root@kallen init.d]# vi /etc/init.d/nginx |
寫入以下內容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#!/bin/bash # # Startup script for the Nginx HTTP Server # # Kallen Ding, Apr 23 2015 NGINX_PATH="/usr/local/nginx/" OPTIONS="-c ${NGINX_PATH}conf/nginx.conf" prog=nginx nginx=${NGINX_PATH}sbin/nginx pidfile=/var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions start() { echo -n "Starting $prog: " daemon --pidfile=${pidfile} $nginx $OPTIONS RETVAL=$? echo return $RETVAL } stop() { echo -n "Stopping $prog: " killproc -p ${pidfile} $nginx RETVAL=$? echo } reload() { echo -n $"Reloading $prog: " killproc -p ${pidfile} $nginx -HUP RETVAL=$? echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; reload) reload ;; status) status $prog RETVAL=$? ;; *) echo "Usage: $prog {start|stop|restart|reload|status}" RETVAL=3 esac exit $RETVAL |
儲存後,更改/etc/init.d/nginx
的許可權
1 2 3 |
[root@kallen ~]# chmod 755 /etc/init.d/nginx [root@kallen ~]# chkconfig --add nginx [root@kallen ~]# chkconfig nginx on |