反向代理
代理是什么?
简单来说,我找一个中间人,代替我去做一件事情,只要他给我结果就可以。
代理一般分为两种:正向代理、反向代理
区别
从用途上来讲:
正向代理-为局域网客户端向外访问 Internet 服务。可以使用缓冲特性减少网络使用率。
反向代理-为局域网服务器向外提供 Internet 服务。可以使用负载平衡提高客户访问量。还可以基于高级 URL 策略和管理技术对服务进行高质量管控。
从安全性来讲:
正向代理-必须采取安全措施确保内网客户端通过它访问外部网站。隐藏客户端的身份
反向代理-对外提供服务是透明的,客户端并不知道自己访问的是一个代理。隐藏服务端的身份
nginx 代理模块
官方资料:http://www.nginx.cn/doc/standard/httpproxy.html
官方的代理属性很多,我们主要介绍 proxy_pass 和 proxy_set_header 属性
官方代码示例
location / {
: proxy_pass http://localhost:8000; # 设定请求跳转后的地址,可以使用hostname或IP:Port形式
: proxy_set_header X-Real-IP $remote_addr; # 后端请求携带原始请求的真实IP地址
}
属性详解:
proxy_pass 指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或 IP 加端口号的形式
proxy_pass 关键点
proxy_pass 后面的路径最后的/作用很重要!!!
示例代码:
location /html/ {
1 proxy_pass http://proxy.com;
2 proxy_pass http://proxy.com/;
}
假设我们访问的url是 http://domain.com/html/test.js ,如何理解上述两种 proxy_pass 的区别呢?
对于 1 来说 proxy.com 后面 没有 /
,表示/html/
请求(包括自己)后续的路径及其参数等关键字都由 http://a.com/ 来处理,代理后的样式如下:
对于 2 来所 proxy.com后面有 /
,表示 /html/
请求后续的路径及其参数等关键字都由 http://a.com/ 来处理,代理后的样式如下:
nginx 代理实践
代理的配置文件
vim /etc/nginx/conf.d/proxy.conf
server {
listen 192.168.8.14:80;
server_name www.sswang.com;
location / {
proxy_pass http://192.168.8.14:9999/hello/;
}
}
后端服务配置文件
vim /etc/nginx/conf.d/hello.conf
server {
listen 192.168.8.14:9999;
location /hello/ {
alias /var/www/html/hello/;
try_files $uri $uri/ =404;
}
}
准备后端服务文件
mkdir -p /var/www/html/hello/
echo '<h1>proxy_backend</h1>' > /var/www/html/hello/index.html
检查 nginx 配置后重载服务
/usr/sbin/nginx -t
systemctl reload nginx
netstat -tnulp | grep nginx
反向代理
proxy_pass https://localhost:;
location / {
proxy_pass https://baidu.com/;
}
}