NGINX 是一個不錯的 http 服務器,他的反向代理功能同樣強大
下面就是利用nginx的代理功能實現http代理服務器。
需要實現的目的:
實現FreeBSD系統的日常軟件安裝、系統升級等功能。
因服務器數量較多,在日常的維護中經常碰到多臺服務器上都要安裝同一個程序的情況,這樣在一臺服務器上下載、安裝後,其他的服務器還要重新下載,通過下面的代理方式,只需在本地系統中配置一個系統shell變量,如:export http_proxy=http://10.0.0.x:8080 (bash) 即可。
當第一臺通過代理的方式安裝了某個程序後,其他的服務器只需要從代理服務器的本地下載該安裝文件即可,極大的提高了效率,而且無需手動上傳文件的多餘操作;不僅如此,通過代理下載軟件還可簡化本地安全配置,提高系統的安全性。
當然下面的代理服務器配置同樣適用於linux系統,並達到同樣的目的(linux下面更爲簡單)。
腳本說明:
之所以分成多個不同的服務是需要實現,區分是否在本地存儲文件,避免一個文件存儲多個副本。
resolver 8.8.8.8;
server {
listen 8080;
location / {
root /data;
include proxy_params;
if ( $host ~* portsnap(.)\.freebsd.org ) {
proxy_pass http://127.0.0.1:8081;
break;
}
if ( $host ~* update(.)\.freebsd.org ) {
proxy_pass http://127.0.0.1:8084;
break;
}
if ( $host ~* dl.xxx.net ) {
proxy_pass http://127.0.0.1:8082;
break;
}
if ( $host ~* portaudit.FreeBSD.org ) {
proxy_pass http://$http_host$request_uri;
break;
}
if ( $host !~* dl.xxx.net ) {
proxy_pass http://127.0.0.1:8083;
break;
}
#access_log off;
proxy_redirect default;
expires 1y;
}
access_log /var/log/nginx/proxy.log;
}
server {
listen 127.0.0.1:8081;
location /{
root /data/pub/FreeBSD/proxy_cache/portsnap;
proxy_store on;
include proxy_params;
proxy_temp_path /data/pub/FreeBSD/proxy_cache/portsnap;
expires 3m;
location ~ ^/(.*)\.ssl$ {
proxy_pass http://$http_host$request_uri;
break;
}
if ( !-f $request_filename ) {
proxy_pass http://portsnap1.freebsd.org$request_uri;
}
proxy_redirect default;
}
access_log /var/log/nginx/1_proxy.log;
error_log /var/log/nginx/1_error.log;
}
server {
listen 127.0.0.1:8082;
location /{
root /data;
}
access_log /var/log/nginx/2_proxy.log;
}
server {
listen 127.0.0.1:8083;
location /{
root /data/pub/FreeBSD/ports/distfiles;
#access_log off;
proxy_store on;
include proxy_params;
proxy_temp_path /data/pub/FreeBSD/ports/distfiles;
#expires 3m;
location /pub {
root /data;
if ( !-f $request_filename ) {
proxy_pass http://$http_host$request_uri;
break;
}
break;
}
#location ~* (^/[^pub]+)$ {
# rewrite ^/(.+)/([^/]*)$ /$2 redirect;
#}
if ( !-e $request_filename ) {
proxy_pass http://$http_host$request_uri;
}
proxy_redirect default;
}
access_log /var/log/nginx/3_proxy.log;
}
server {
listen 127.0.0.1:8084;
location /{
root /data/pub/FreeBSD/proxy_cache/freebsd-update;
#access_log off;
proxy_store on;
include proxy_params;
proxy_temp_path /data/pub/FreeBSD/proxy_cache/freebsd-update;
expires 3m;
location ~ ^/(.*)\.ssl$ {
proxy_pass http://$http_host$request_uri;
break;
}
if ( !-f $request_filename ) {
#proxy_pass http://portsnap1.freebsd.org$request_uri;
proxy_pass http://$http_host$request_uri;
}
proxy_redirect default;
}
access_log /var/log/nginx/4_proxy.log;
error_log /var/log/nginx/4_error.log;
}