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;
}