Nginx還有兩大功能:
1、Nginx可以實現反向代理啓用cache緩存:那Nginx如何實現反向代理,Nginx反向代理功能是通過http proxy模塊來實現的,默認已經編譯安裝上,
Nginx通過proxy_cache指令,把訪問遠端服務器內容緩存在本地磁盤中,從而加快網站訪問速度,降低服務器的負載
2、Nginx可以配置第三方模塊,實現upstream中對後端http server的健康狀態檢測
操作系統:redhat5.8
實驗:準備三臺服務器
Nginx eth0:172.16.0.22
Nginx eth1:192.168.100.1
Server1 eth0:192.168.100.2
Server2 eth0:192.168.100.3
實驗拓撲圖如下:
實驗目的:通過Nginx反向代理功能配置,實現把用戶的請求的資源緩存在本地服務器,可以實現加快網站訪問速度和降低服務器負載,並配置第三方模塊,
實現upstream中對後端http server的健康狀態檢測
目錄:
一、Nginx配置
二、Server1配置
三、Server2配置
四、測試
一、Nginx配置
- 1、解壓healthcheck_nginx_upstreams模塊
- #unzip healthcheck_nginx_upstreams.zip
- #mv cep21-healthcheck_nginx_upstreams-16d6ae7 nginx_health
- 2、對nginx打補丁
- #tar xf nginx-1.0.14.tar.gz
- #cd nginx-1.0.14
- #patch -p1 < /root/nginx_health/nginx.patch
- 注意:編譯nginx,在執行configure時添加以下選項
- --add-module=/root/nginx_health #這是解壓healthcheck_nginx_upstreams.zip的目錄路徑
- 3、編譯安裝nginx
- # ./configure \
- --prefix=/usr \
- --sbin-path=/usr/sbin/nginx \
- --conf-path=/etc/nginx/nginx.conf \
- --error-log-path=/var/log/nginx/error.log \
- --http-log-path=/var/log/nginx/access.log \
- --pid-path=/var/run/nginx/nginx.pid \
- --lock-path=/var/lock/nginx.lock \
- --user=nginx \
- --group=nginx \
- --with-http_ssl_module \
- --with-http_flv_module \
- --with-http_stub_status_module \
- --with-http_gzip_static_module \
- --http-client-body-temp-path=/var/tmp/nginx/client/ \
- --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
- --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
- --with-pcre \
- --add-module=/root/nginx_health
- # make && make install
- 4、修改nginx主配置文件
- #mkdir -pv /data/nginx/cache #創建nginx緩存存放目錄
- #vim /etc/nginx/nginx.conf
- 修改以下內容
- proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=servercache:10m #設置內存區域,名字可以自己取
- #代理使用的緩存路徑 #緩存目錄裏建立的層次,就是子目錄
- inactive=24h max_size=1g;
- #24小時不超時 #緩存目錄大小
- upstream myserver {
- #設置負載均衡指令,myserver名字可以自已取
- server 192.168.100.2 weight=4 max_fails=3 fail_timeout=30s; #負載均衡的服務器
- server 192.168.100.3 weight=5 max_fails=3 fail_timeout=30s;
- healthcheck_enabled; #啓用檢測試RS模塊
- healthcheck_delay 1000; #對同一臺後端服務器兩次檢測之間的時間間隔,單位毫秒,默認爲1000
- healthcheck_timeout 1000; #進行一次健康檢測的超時時間,單位爲毫秒,默認值2000;
- healthcheck_failcount 1; #對一臺後端服務器檢測成功或失敗多少次之後方纔確定其爲成功或失敗,並實現啓用或禁用此服務器
- healthcheck_expected 'ok';#檢查server文件裏內容
- healthcheck_send "GET /.test.html HTTP/1.0";#檢測後端服務器的健康狀態所發送的檢測請求
- }
- server {
- listen 80;
- server_name www.test.com;
- access_log /var/log/nginx/www.access;
- error_log /var/log/nginx/www.err;
- location / {
- proxy_pass http://myserver;
- proxy_set_header Host $host;
- proxy_cache servercache;
- proxy_cache_valid 200 1d;
- proxy_cache_use_stale error timeout invalid_header updating
- http_500 http_502 http_503 http_504;
- }
- location /stat {
- healthcheck_status; #開啓server狀態監控
- }
- }
二、Server1配置
- 安裝httpd
- #yum -y install httpd
- #echo "<h1>Server1</h1>" >/var/www/html/index.html
- #echo "ok" >/var/www/html/.test.html
- #service httpd start
三、Server2配置
- 安裝httpd
- #yum -y install httpd
- #echo "<h1>Server2</h1>" >/var/www/html/index.html
- #echo "ok" >/var/www/html/.test.html
- #service httpd start
四、測試
請做好你的域名解析
1、測試負載均衡
提示:測試的時候請關閉proxy cache緩存
刷新一下
2、測試cache
提示:此時做下壓力測試,在server一臺服務器上放張圖片,然後在Nginx服務器上做下壓力測試,查看緩存目錄有沒有生成文件,然後對比一下速度,就知道緩存的效果了
3、查看server狀態
4、停止一臺server繼續查看一下
提示:把剛纔停止的server開啓,查看能否自動加載上
實驗出現的問題:
問題:爲nginx打補丁以後,編譯nginx的時候出現make[1]: *** [objs/addon/nginx/ngx_http_healthcheck_module.o] Error 1
make[1]: Leaving directory `/root/nginx-1.2.2'
make: *** [build] Error 2
原因:nginx與healthcheck_nginx_upstreams版本不兼容,換成一個低的版本就可以了,我用的是nginx-1.0.14,當然也可以用最新版本來做
模塊下載地址:https://github.com/cep21/healthcheck_nginx_upstreams;模塊名稱:ngx_http_healthcheck_module
瞭解更多nginx用法請參考官方網站:www.nginx.org