nginx 代理实现的模块
ngx_http_proxy_module
正向代理
正向代理时,访问的域名不固定(如:www.cnblogs.com,www.baidu.com等),令任何域名都可以访问正向代理服务器的这个虚拟机(默认)上。
server { listen 80 default_server; resolver 119.29.29.29; # 国内的通用DNS地址。 location / { proxy_pass http://$host$request_uri; # 客户端的访问url,同时也是正向代理向外网访问的url } }
server {
resolver 114.114.114.114;
listen 443;
location / {
proxy_pass https://$host$request_uri; # 代理 https 协议
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;
}
}
指令语法:resolver address;
参考:http://blog.51cto.com/liqingbiao/2069726
客户端 windows 设置
IE浏览器 --> 工具 --> Internet选项 --> 局域网设置 ---- 代理服务器
linux 客户端 设置
curl 访问
curl -I --proxy proxy_server:80 http://baidu.com curl -I --proxy proxy_server:443 https://cnblogs.com
yum 设置代理
方法 1:
vim /etc/yum.conf proxy=http://192.168.6.90:80 # 代理服务器的IP:端口 proxy=ftp://192.168.6.90:80 #proxy_username=username # 代理的用户名 #proxy_password=password
方法 2:
vim /etc/yum.conf
proxy=http://username:password@proxy_server:80/ # 该写法是 http协议中的通用访问 url 的语法
wget 设置代理
vim /etc/wgetrc http_proxy=192.168.6.90:80 http_proxy=192.168.6.90:443
全局 设置代理
vim /etc/profile http_proxy = http://192.168.6.90:80 http_proxy = http://192.168.6.90:443 ftp_proxy = http://192.168.6.90:80/ export http_proxy export ftp_proxy
反向代理
配置如下:
server { listen 80; server_name cnblogs.com; location / { proxy_pass http://10.0.0.30/; # 内网的或外网的服务器IP proxy_set_header Host $host; # 客户端请求的域名,若没有这个字段,那么若后端的服务器有多个虚拟主机(多个域名时)时,nginx则反馈默认的虚拟机(或配置文件中的第一个虚拟主机) proxy_set_header X-Real-IP $remote_addr; # 解决多层代理时 X-Forward-Fox 被过程中的某一级代理服务器的IP所替代 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 经过每一次代理做一次转发,X-Forward-For就会在后面追加一个代理IP,以逗号分隔的ip串,以转发顺序排序。格式:clientIP,proxy1_ip,proxy2_ip ... } }
后端的Nginx的配置文件中日志记录变量
nginx可以定义$http_x_real_ip变量接收前面代理的x-real-ip,例如: log_format main '$http_x_real_ip - $remote_user ' '[$time_local] "$request_method $scheme://$host$request_uri $server_protocol" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" - $remote_addr'; apache可以通过%{X-Real-Ip}i来获取: LogFormat "%{X-Real-Ip}i %l %u %t \"%m http://%v%U%q\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" - %h" combinedall
参考:
http://blog.51cto.com/nicking/1431056
https://www.cnblogs.com/lianye920129/p/7889254.html
https://www.cnblogs.com/mypath/articles/5239687.html
https://imququ.com/post/x-forwarded-for-header-in-http.html