Nginx反向代理及優化
一、反向代理概念
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。
通常的代理服務器,只用於代理內部網絡對Internet外部網絡的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。不支持外部網絡對內部網絡的連接請求,因爲內部網絡對外部網絡是不可見的。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱爲反向代理服務。此時代理服務器對外就表現爲一個Web服務器,外部網絡就可以簡單把它當作一個標準的Web服務器而不需要特定的配置。不同之處在於,這個服務器沒有保存任何網頁的真實數據,所有的靜態網頁或者CGI程序,都保存在內部的Web服務器上。因此對反向代理服務器的***並不會使得網頁信息遭到破壞,這樣就增強了Web服務器的安全性。
反向代理就是通常所說的web服務器加速,它是一種通過在繁忙的web服務器和外部網絡之間增加一個高速的web緩衝服務器來降低實際的web服務器的負載的一種技術。反向代理是針對web服務器提高加速功能,作爲代理緩存,它並不是針對瀏覽器用戶,而針對一臺或多臺特定的web服務器,它可以代理外部網絡對內部網絡的訪問請求。
反向代理服務器會強制將外部網絡對要代理的服務器的訪問經過它,這樣反向代理服務器負責接收客戶端的請求,然後到源服務器上獲取內容,把內容返回給用戶,並把內容保存到本地,以便日後再收到同樣的信息請求時,它會把本地緩存裏的內容直接發給用戶,以減少後端web服務器的壓力,提高響應速度。
二、反向代理工作原理
(1) 用戶通過域名發出訪問web服務器的請求,該域名被DNS服務器解析爲反向代理服務器的IP地址;
(2) 反向代理服務器接受用戶的請求;
(3) 反向代理服務器在本地緩存中查找請求的內容,找到後直接把內容發送給用戶;
(4) 如果本地緩存裏沒有用戶所請求的信息內容,反向代理服務器會代替用戶向源服務器請求同樣的信息內容,並把信息內容發給用戶,如果信息內容是緩存的還會把它保存到緩存中。
三、nginx反向代理
1. 實施環境:Centos 64位 PC機
2. 實施要求:
現有一內網網段,想去訪問外網,不需要通過nat轉換,而通過代理服務進行訪問外網。
3. 實施拓撲圖
使用億圖工具根據實施要求繪製出網絡拓撲圖,如下圖所示:
4. 詳細實施
首先在Linux系統上安裝nginx,然後在實現代理,具體操作如下:
⑴ 在安裝Nginx之前,確保系統已經安裝了pcre-devel軟件庫。因此,先安裝該庫文件,把光盤掛在上安裝。
//掛在光盤
[root@huangzhong ~]# mount /dev/cdrom /media/cdrom
//使用yum進行安裝
[root@huangzhong Packages]# yum install pcre-devel-7.8-6.el6.x86_64.rpm
⑵ 安裝libevent庫文件
//解壓安裝包
[root@huangzhong ~]# tar -zxvf libevent-2.0.21-stable.tar.gz -C /usr/local/src/
//進入解壓後目錄下進行編譯
[root@huangzhong ~]# cd /usr/local/src/libevent-2.0.21-stable/
[root@huangzhong libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent //指出安裝目錄
//執行make和make install
[root@huangzhong libevent-2.0.21-stable]# make && make install
//編輯/etc/ld.so.conf.d/libevent.conf指明/usr/local/libevent/lib路徑
[root@huangzhong lib]# vim /etc/ld.so.conf.d/libevent.conf
//編輯完後重新加載讀取
[root@huangzhong lib]# ldconfig
//查看是否生效
[root@huangzhong lib]# ldconfig -pv |grep libevent
⑶ 安裝配置nginx
//解壓安裝包
[root@huangzhong ~]# tar -zxvf nginx-1.6.0.tar.gz -C /usr/local/src/
//進入解壓後的目錄進行編譯
[root@huangzhong nginx-1.6.0]# ./configure \
> --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
//執行make和make install
[root@huangzhong nginx-1.6.0]# make && make install
//創建組和賬號,並把賬號加入到組
[root@huangzhong ~]# groupadd -r nginx
[root@huangzhong ~]# useradd -r -g nginx nginx
//進行語法檢測
[root@huangzhong ~]# cd /usr/local/nginx/sbin/
[root@huangzhong sbin]# ./nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory) //顯示缺少此目錄
nginx: configuration file /etc/nginx/nginx.conf test failed
//創建目錄
[root@huangzhong sbin]# mkdir -pv /var/tem/nginx/client
//然後啓動,並查看端口
[root@huangzhong sbin]# ./nginx
[root@huangzhong sbin]# netstat -tupln |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10418/nginx
然後通過網頁訪問進行測試,看能否訪問到,在訪問前首先要關閉防火牆和selinux。
//關閉防火牆和selinux
[root@huangzhong sbin]# service iptables stop
[root@huangzhong sbin]# chkconfig iptables off //永久關閉
[root@huangzhong sbin]# setenforce 0
通過網頁進行訪問結果如下:
⑷實現代理功能
//編輯/etc/nginx目錄下nginx.conf文件
[root@huangzhong ~]# vim /etc/nginx/nginx.conf
//關閉nginx服務,然後重新啓動
[root@huangzhong ~]# pkill nginx
[root@huangzhong ~]# nginx
5. 驗證測試
首先打開C盤下windows/system32/Drivers/etc目錄下hosts文件,然後把192.168.2.101 www.tyedus.com加入保存關閉,然後通過網頁進行訪問結果如下:
四、nginx反向代理優化
Nginx反向代理優化其實就是對nginx反向代理進行加速緩存,而加速緩存的配置可以到nginx官網http://nginx.org中的功能模塊中去參考樣例配置文件。在這裏進行配置如下:
//編輯/etc/nginx目錄下nginx.conf文件
//創建編輯過程中所用到的目錄
[root@huangzhong ~]# mkdir -pv /data/nginx/cache
//關閉nginx服務,然後在重新啓動
[root@huangzhong ~]# pkill -9 nginx
[root@huangzhong ~]# nginx
//安裝httpd-tools工具使用ab進行測試
[root@huangzhong ~]# yum install httpd-tools
//使用ab工具進行測試
[root@huangzhong ~]# ab -n 10000 http://192.168.2.101/index.html
沒有配置加速緩存時測試的結果如下圖1所示:
圖1 沒有配置加速緩存時測試的結果
安裝配置加速緩存後測試的結果如下圖2所示:
通過圖1和圖2對比可以看出使用加速緩存後訪問請求次數遠遠大於沒有加速緩存時的訪問請求次數,並且請求時間大大的縮短了。