NGINX 實現內部網絡的HTTP代理服務器的配置

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;
   }
發佈了38 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章