云网牛站
所在位置:首页 > Linux云服务器 > 使用Nginx实现正向代理

使用Nginx实现正向代理

2018-07-10 15:54:56作者:linux人稿源:运维之美

本文为你介绍使用Nginx实现正向代理的过程。

 

一、正向代理的概念

正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

客户端必须要进行一些特别的设置才能使用正向代理。

下面以Nginx为例介绍如何搭建正向代理服务器。

 

二、Nginx正向代理配置

server {

resolver 8.8.8.8;

resolver_timeout 5s;

listen 81;

location / {

allow 192.168.0.0/24;

deny all;

proxy_pass $scheme://$host$request_uri;

proxy_set_header Host $http_host;

proxy_set_header  X-Real-IP $host;

proxy_set_header  X-Forwarded-For $host;

proxy_buffering on;

proxy_buffer_size 32k;

proxy_busy_buffers_size 256k;

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;

}

access_log off;

#access_log /var/log/nginx/proxy_access.log

}

 

三、Nginx正向代理配置说明

1.配置DNS解析IP地址。

比如Google DNS,以及超时时间(5秒)。

resolver 8.8.8.8;

resolver_timeout 5s;

注意项:

1].不能有hostname。

2].必须有resolver, 即dns,即上面的x.x.x.x,换成你们的DNS服务器ip即可。

2.配置正向代理参数

代理参数均是由Nginx变量组成,其中proxy_set_header部分的配置是为了解决如果URL中带”.”(点)后Nginx 503错误。

proxy_pass $scheme://$host$request_uri;  #$http_host和$request_uri是Nginx系统变量。

proxy_set_header Host $http_host;

3.配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间。

proxy_buffers 256 4k; #设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k。

proxy_max_temp_file_size 0; #当代理缓冲区过大时使用一个临时文件的最大值,如果文件大于这个值,将同步传递请求而不写入磁盘进行缓存。如果这个值设置为零,则禁止使用临时文件。

proxy_connect_timeout 30;

proxy_busy_buffers_size 256k; #高负荷下缓冲大小(proxy_buffers*2)

4.配置代理服务器 Http 状态缓存时间。

proxy_cache_valid 200 302 10m;

proxy_cache_valid 301 1h;

proxy_cache_valid any 1m;

 

四、附nginx配置正向代理支持HTTPS

使用nginx当正向代理的时候,按上面的方法后通过代理访问https的网站会失败,而失败的原因是客户端同nginx代理服务器之间建立连接失败,并非nginx不能将https的请求转发出去。因此要解决的问题就是客户端如何同nginx代理服务器之间建立起连接。有了这个思路之后,就可以很简单的解决问题。我们可以配置两个SERVER节点,一个处理HTTP转发,另一个处理HTTPS转发,而客户端都通过HTTP来访问代理,通过访问代理不同的端口,来区分HTTP和HTTPS请求。可以先参考教程Ubuntu 16.04安装配置Nginx使用Let‘s Encrypt

#HTTP

server{

resolver 8.8.8.8;

access_log /data/logs/nginx/access_proxy.log main;

listen 80;

location / {

root html;

index index.html index.htm;

proxy_pass $scheme://$host$request_uri;

proxy_set_header HOST $http_host;

proxy_buffers 256 4k;

proxy_max_temp_file_size 0k; 

proxy_connect_timeout 30;

proxy_send_timeout 60;

proxy_read_timeout 60;

proxy_next_upstream error timeout invalid_header http_502;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

#HTTPS

server{

resolver 8.8.8.8;

access_log /data/logs/nginx/access_proxy.log main;

listen 443;

location / {

root html;

index index.html index.htm;

proxy_pass https://$host$request_uri;

proxy_buffers 256 4k;

proxy_max_temp_file_size 0k; 

proxy_connect_timeout 30;

proxy_send_timeout 60;

proxy_read_timeout 60;

proxy_next_upstream error timeout invalid_header http_502;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

如果访问HTTP网站,可以直接这样的方式: curl --proxy proxy_server:80 网址

如果访问HTTPS网站,那么可以使用nginx的HTTPS转发的server:

curl --proxy proxy_server:443 网址

 

相关主题

第16章 使用Squid部署代理缓存服务

精选文章
热门文章