nginx做正向代理(Centos7,支援http和https)

劍握在手發表於2017-03-12

預設的情況下,使用nginx做正向代理可以解析http請求,

對於諸如baidu.com這樣的https請求,nginx預設並不支援,不過我們可以藉助第三方模組來實現。

 

1、先說預設情況下的代理配置

 

配置方法如下:

#user  nobody;
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    server {
        resolver 192.168.31.1;
        resolver_timeout 5s;
     
        listen 8888;
     
        access_log  /nginx-1.10.3/logs/proxy.access.log;
        error_log   /nginx-1.10.3/logs/proxy.error.log;
     
        location / {
            proxy_pass $scheme://$host$request_uri;
            proxy_set_header Host $http_host;
     
            proxy_buffers 256 4k;
            proxy_max_temp_file_size 0;
     
            proxy_connect_timeout 30;
     
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 301 1h;
            proxy_cache_valid any 1m;
        }
    }
}

listen的就是監聽的埠。

resolver就是一個dns地址,如果在家裡用路由器上網,一般也可以配成你的路由器地址。

其它配置不改也行,這樣配置後,對非https的訪問沒什麼問題,不過這顯然不夠用,我們接著講一下如何實現https的代理。

 

2、再說用nginx同時代理https和http


這裡我們需要藉助大神開發的【ngx_http_proxy_connect_module

首先要確保你安裝了patch,gcc、gcc++、pcre、zlib,這些都是我們用到的依賴軟體或靜態庫

yum group install -y "Development Tools"
yum install -y patch pcre-devel pcre zlib-devel zlib

 

然後github下載下來這個模組,就是直接去官網把整個目錄下下來,解壓放到你centos的某個目錄下。

我這裡留了個百度網盤的備份: 連結:https://pan.baidu.com/s/1eqcFW8tEE6SEg3b9OHyThA 密碼:c8e2

 

下載nginx、按照官網說明執行以下命令

$ wget http://nginx.org/download/nginx-1.9.2.tar.gz
$ tar -xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2/
$ patch -p1 < /path/to/ngx_http_proxy_connect_module/proxy_connect.patch
$ ./configure --add-module=/path/to/ngx_http_proxy_connect_module
$ make && make install

注意其中的【/path/to/ngx_http_proxy_connect_module】,指的就是你從github上,下載的這個模組的存放路徑。

完成後,/usr/local/nginx就是編譯後的nginx的路徑。

 

然後編輯/usr/local/nginx/conf/nginx.conf(注意備份原檔案),修改後內容如下:

worker_processes  1;


events {
    worker_connections  1024;
}


http {


    server {
        resolver 192.168.31.1;
        resolver_timeout 5s;
        listen       8889;
        proxy_connect;
        proxy_connect_allow            443 563;
        proxy_connect_connect_timeout  10s;
        proxy_connect_read_timeout     10s;
        proxy_connect_send_timeout     10s;

        location / {
          #proxy_pass $scheme://$host$request_uri;
          #proxy_set_header Host $http_host;

          proxy_pass http://$host;
          proxy_set_header Host $host;


          proxy_buffers 256 4k;
          proxy_max_temp_file_size 0;

          proxy_connect_timeout 30;

          proxy_cache_valid 200 302 10m;
          proxy_cache_valid 301 1h;
          proxy_cache_valid any 1m;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

然後儲存。

listen的就是監聽的埠。

resolver就是一個dns地址,如果在家裡用路由器上網,一般也可以配成你的路由器地址。

 

最後執行:

/usr/bin/local/nginx/sbin/nginx

 

 

找一臺外網的機器,配置一下代理,百度上檢視一下本機ip,如果成功的話,顯示的就是代理伺服器的外網IP了。

 

再附一篇介紹--CentOS如何通過代理上網:

http://www.cnblogs.com/flying607/p/8709640.html

 

相關文章