(一)简述
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常用命令
本文介绍了nginx作为正向代理的配置与功能,包括如何设置以实现对HTTP和HTTPS网站的访问,以及客户端如何配置使用代理,同时提到了POST请求的数据处理和curl命令的使用。
3230

被折叠的 条评论
为什么被折叠?



