一、概念
正向代理
正向代理最大的特點是客戶端非常明確要訪問的服務器地址。服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端;正向代理模式屏蔽或者隱藏了真實客戶端信息。
總結
始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。客戶端必須設置正向代理服務器,當然前提是要知道正向代理服務器的IP地址,還有代理程序的端口
用途
(1)訪問原來無法訪問的資源,如Google
(2) 可以做緩存,加速訪問資源
(3)對客戶端訪問授權,上網進行認證
(4)代理可以記錄用戶訪問記錄(上網行爲管理),對外隱藏用戶信息
反向代理:
多個客戶端給服務器發送的請求,Nginx服務器接收到之後,按照一定的規則分發給了後端的業務處理服務器進行處理了。此時~請求的來源也就是客戶端是明確的,但是請求具體由哪臺服務器處理的並不明確了,Nginx扮演的就是一個反向代理角色。
總結
客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。因爲客戶端不需要任何配置就可以訪問。
反向代理,“它代理的是服務端,代服務端接收請求”,主要用於服務器集羣分佈式部署的情況下,反向代理隱藏了服務器的信息。
用途
(1)保證內網的安全,通常將反向代理作爲公網訪問地址,Web服務器是內網
(2)負載均衡,通過反向代理服務器來優化網站的負載
二、nginx安裝
原理結構如下:
安裝相關依賴
yum install pcre-devel zlib zlib-devel openssl openssl-devel
上傳解壓壓縮包
tar zxvf nginx-1.12.2.tar.gz
創建目錄,檢測配置
mkdir -p /usr/local/nginx
./configure --prefix=/usr/local/nginx
預編譯和安裝
make && make install
啓動、停止相關命令
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s start
常見錯誤
在進行./configure 命令的時候經常會因爲缺少庫文件而報錯,如下:
錯誤一:缺少gc++庫文件
解決方式:在線安裝gcc gcc-++
錯誤二:缺少PCRE庫
./configure: error: the HTTP rewrite module requires the PCRE library.
解決方式:安裝pcre-devel解決問題
yum -y install pcre-devel
錯誤三:
錯誤提示:./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library. You can either disable the module by using
–without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
–with-http_ssl_module –with-openssl= options.
解決方式:
yum -y install openssl openssl-devel
安裝後繼續執行configure命令,即可完成Nginx的安裝
./configure --prefix=/usr/local/nginx
nginx的配置文件如下:
user root;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000;
worker_rlimit_nofile 65535;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 3750;
#accept_mutex on;
#multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
tcp_nopush on; # 激活 TCP_CORK socket 選擇
tcp_nodelay on; # 數據在傳輸的過程中不進緩存
keepalive_timeout 65 60;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 25;
client_max_body_size 8m; # 設置客戶端最大的請求主體大小爲 8 M
gzip on;
gzip_min_length 1k; # 允許壓縮的對象的最小字節
gzip_buffers 4 32k; # 壓縮緩衝區大小,表示申請4個單位爲32k的內存作爲壓縮結果的緩存
gzip_http_version 1.1; # 壓縮版本,用於設置識別HTTP協議版本
gzip_comp_level 9; # 壓縮級別,1級壓縮比最小但處理速度最快,9級壓縮比最高但處理速度最慢
gzip_types text/plain application/x-javascript text/css application/xml; # 允許壓縮的媒體類型
gzip_vary on; # 該選項可以讓前端的緩存服務器緩存經過gzip壓縮的頁面,例如用代理服務器緩存經過Nginx壓縮的數據
include vhosts.conf;
server_tokens off;
}
stream {
upstream openldap {
hash $remote_addr consistent;
server 10.1.2.93:389 max_fails=4 fail_timeout=30s;
server 10.1.2.94:389 max_fails=6 fail_timeout=30s;
}
server {
listen 389;
proxy_pass openldap;
proxy_connect_timeout 60;
}
}
三、keepalived安裝
爲了滿足系統的高可用,在搭建nginx時使用Keepalived檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中。keepalived高可用結構如下:
安裝keepalived
yum install -y keepalived
keepalived.conf配置文件如下:
! Configuration File for keepalived
global_defs {
# notification_email {
# [email protected]
# [email protected]
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id proxy.hep.com
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #檢測 nginx 狀態的腳本
interval 2 #每2秒檢測一次nginx的運行狀態
weight -20 #失敗一次,將自己的優先級-20
}
vrrp_instance VI_1 {
state BACKUP #BACKUP備狀態,防止資源搶佔,主備節點均採用BACKUP
interface ens32 #網卡名,可使用ifconfig查看本機網卡名
virtual_router_id 51 #虛擬路由ID,主備節點必須一致
mcast_src_ip 10.1.2.91 #本機IP
priority 100 #優先級,值越大,優先級越高,主節點優先級比備節點高
nopreempt #設置不搶佔資源,在主節點故障,備節點啓用時,主節點恢復不搶佔備節點,依舊使用備節點來進行請求
advert_int 1 #組播信息發送間隔,主備節點必須一致
#設置驗證信息,主備節點必須一致
authentication {
auth_type PASS
auth_pass Zgjm0817
# smtp_connect_timeout 30
# smtp_connect_timeout 30
router_id proxy.hep.com
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP #BACKUP備狀態,防止資源搶佔,主備節點均採用BACKUP
interface ens32 #網卡名,可使用ifconfig查看本機網卡名
virtual_router_id 51 #虛擬路由ID,主備節點必須一致
mcast_src_ip 10.1.2.91 #本機IP
priority 100 #優先級,值越大,優先級越高,主節點優先級比備節點高
nopreempt #設置不搶佔資源,在主節點故障,備節點啓用時,主節點恢復不搶佔備節點,依舊使用備節點來進行請求
advert_int 1 #組播信息發送間隔,主備節點必須一致
#設置驗證信息,主備節點必須一致
authentication {
auth_type PASS
auth_pass Zgjm0817
}
track_script {
chk_nginx
}
virtual_ipaddress {
10.1.2.90 #虛擬IP地址
}
}
keepalived.conf中的所有配置文件參數詳解參考:
https://blog.csdn.net/mofiu/article/details/76644012
從機配置文件與主機幾乎相同,只有vrrp_instance VI_1中的 mcast_src_ip和 priority 不同,變化如下:
vrrp_instance VI_1 {
mcast_src_ip 10.1.2.92#本機IP
priority 90#優先級,值越大,優先級越高,主節點優先級比備節點高
}
chk_nginx 中的檢查腳本如下:
#!/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
腳本解析
ps -C nginx –no-header
這裏涉及ps 的用法,我們一般用ps查看相關進程,一般都是用 ps -ef | grep XX 但是這樣通常都會覆蓋一個grep的進程
我們可以用ps -C 或ps -c 的方式, -C 後面接命令的名字 ,–no-header 不打印頭信息,如下:
wc -l 行數計算,如果
如果值爲0,即代表服務未啓動
如果值爲非0,即代表服務已啓動
killall keepalived以服務名稱殺死進程
上面那段完整的腳本意思即爲:
判斷nginx 服務是否啓動,如果未啓動,執行啓動命令,睡眠2秒。再次判斷,如果啓動失敗,關掉keepalived,進入從節點。
啓動keepalived服務
service keepalived start
查看虛擬ip
啓動後可以通過訪問虛擬ip測試keepalived是否跳轉ip成功,然後kill掉該ip的keepalived再重新訪問,測試是否能正常訪問跳到另外一個ip。