如今,在大訪問量的網(wǎng)站中,squid反向代理已經(jīng)成為一種常用的緩存技術(shù)。但是,眾所周知,squid本身不支持SMP,因此其原本是不支持在單臺(tái)服務(wù)器同一端口(例如要反向代理web必須指定80端口)下開多個(gè)進(jìn)程的。
而今多核多內(nèi)存服務(wù)器已成趨勢(shì),如果單臺(tái)服務(wù)器只運(yùn)行一個(gè)squid反向代理跑web則顯得太浪費(fèi),而根據(jù)官方意見要想運(yùn)行多個(gè)squid實(shí)例,要么就指定不同的IP不同端口來實(shí)現(xiàn)。
而nginx是一個(gè)高性能的 HTTP 和反向代理服務(wù)器軟件,運(yùn)用nginx的負(fù)載均衡功能,我們就能很好的實(shí)現(xiàn)在同一臺(tái)服務(wù)器中跑多個(gè)squid的目的,充分發(fā)揮多核大內(nèi)存的作用。
具體步驟如下:
1.將N個(gè)squid安裝到不同目錄,并指定好多個(gè)用戶以及不同的監(jiān)聽端口,這樣便于監(jiān)控時(shí)查看,例如:
squid1:/opt/squid1 監(jiān)聽在127.0.0.1:8081
squid2:/opt/squid2 監(jiān)聽在127.0.0.1:8082
squid3:/opt/squid3 監(jiān)聽在127.0.0.1:8083
2.編譯并安裝,配置nginx
./configure
nginx配置文件nginx.conf:
user www www; worker_processes 10; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; } 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_nodelay on; #keepalive_timeout 0; keepalive_timeout 65; upstream jianglb { server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; } #gzip on; server { listen 192.168.1.3:80; server_name www.mycodes.net mycodes.net ; access_log logs/host.access.log main; location / { proxy_pass http://mycodes; proxy_redirect off; proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }這里有幾個(gè)配置的注意點(diǎn):
1.如果需要同時(shí)代理加速多個(gè)域名,而這些域名是同時(shí)做負(fù)載均衡的話,不需要分開來指定,upstream只需要一個(gè)即可,proxy_pass那里的名稱能對(duì)應(yīng)起來即可;
2.proxy_set_header Host $host:80;這里最好加上端口80,因?yàn)槲乙婚_始沒加80,發(fā)現(xiàn)nginx轉(zhuǎn)發(fā)的時(shí)候squid會(huì)收到www.mycodes.net:8081這樣的頭信息,這明顯是不對(duì)的,一次加上80會(huì)比較好。