nginx正向代理配置方式

(一)简述
nginx不仅可以做反向代理,还能用作正向代理来进行上网等功能。正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理(也就是大家常说的,通过正向代理进行上网功能)
(二)nginx正向代理的功能
1.由于nginx正向代理的功能指令较少,只需要进行简单的配置即可

server {  
    resolver 114.114.114.114;       #指定DNS服务器IP地址  
    listen 8080;  
    location / {  
        proxy_pass http://$http_host$request_uri;     #设定代理服务器的协议和地址  
    }  
}  

以上的配置只能访问80 端口的网站,而不能访问https443端口的网站,现在的网站基本上都是https的要解决技能访问http80端口也能访问https443端口的网站,需要置两个SERVER节点,一个处理HTTP转发,另一个处理HTTPS转发,而客户端都通过HTTP来访问代理,通过访问代理不同的端口,来区分HTTP和HTTPS请求。

server {  
    resolver 114.114.114.114;       #指定DNS服务器IP地址  
    listen 80;  
    location / {  
        proxy_pass http://$http_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;
    }  
}  
server {  
    resolver 114.114.114.114;       #指定DNS服务器IP地址  
    listen 443;  
    location / {  
       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;
    }  
}  

(三)客户端使用
client端:
一次代理,直接在shell执行:
#export http_proxy=http://192.168.1.9:8080
永久使用:
#vim .bashrc
export http_proxy=http://192.168.1.9:8080
#source .bashrc


这种方式修改了客户端环境变量http_proxy,会将所有客户端所有http请求都代理到proxy服务器。如果系统中涉及到存量的内网http请求,这样做的风险比较大


server{
        listen 8081;
        
        access_log /usr/local/nginx/8081.log;
        error_log /usr/local/nginx/8081.log;
        rewrite_log on;

        location / {
           #proxy_pass http://198.98.20.63;
           resolver 114.114.114.114;
           #proxy_pass http://${arg_HOSTNAME}/${document_uri};
           proxy_pass  http${arg_HOSTNAME}/${document_uri};
           #proxy_pass http${arg_PTTP}://${arg_HOSTNAME}/${document_uri};
           #set $HTNM $1;
           #set $PTTP $2;
           #proxy_pass http${PTTP}://${HTNM}/${document_uri};
           #proxy_pass http://$HOSTNAME/$document_uri;
        }

        error_page 500 502 503 504 /50x.html;

        location = /50x.html{
           root html;
        }
    }

这种方式将代理转发参数的host值作为请求参数传进来,然后做拼接得出最终请求地址

http://www.baidu.com/test/index.html
–>
http://proxy_host:proxy_port/test/index.html?HOSTNAME=://www.baidu.com

https://www.baidu.com/test/index.html
–>
http://prixy_host:proxy_port/test/index.html?HOSTNAME=s://www.baidu.com

验证
GET
curl http://prixy_host:proxy_port/test/index.html?HOSTNAME=s://www.baidu.com
POST
cutl -d curl -d “value%201” http://hostname.com
默认情况下,通过POST方式传递过去的数据中若有特殊字符,首先需要将特殊字符转义在传递给服务器端,如value值中包含有空格,则需要先将空格转换成%20

附:curl常用命令

你可能感兴趣的:(经验总结)