发布于2021-06-14 10:13 阅读(946) 评论(0) 点赞(20) 收藏(0)
代理一词往往并不陌生, 该服务我们常常用到如(代理理财、代理租房、代理收货等等),如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bR8YEd3C-1623172026417)(img/image-20201202143526986.png)]
在没有代理模式的情况下,客户端和Nginx服务端,都是客户端直接请求服务端,服务端直接响应客户端。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zjCHil6c-1623172026424)(img/image-20201202143554948.png)]
那么在互联网请求里面,为了安全客户端往往无法直接向服务端发起请求,就需要用到代理服务,来实现客户端和服务端通信,如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKUwQO6N-1623172026428)(img/image-20201202143615224.png)]
Nginx作为代理服务,按照应用场景模式进行总结,代理分为
1.正向代理
2.反向代理
正向代理,(内部上网) 客户端 <—> 代理 -> 服务端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KdlWOU6h-1623172026432)(img/image-20201202143638203.png)]
反向代理,用于公司集群架构中,客户端 -> 代理 <—> 服务端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsbg7bms-1623172026434)(img/image-20201202143657900.png)]
1.区别在于形式上服务的”对象”不一样
2.正向代理代理的对象是客户端,为客户端服务
3.反向代理代理的对象是服务端,为服务端服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bXYIN6Np-1623172026435)(img/image-20201202143720086.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sLoYU6fq-1623172026436)(img/image-20201202143742144.png)]
反向代理模式与Nginx代理模块总结如表格所示
反向代理模式 | Nginx配置模块 |
---|---|
http、websocket、https、tomcat(java程序) | ngx_http_proxy_module |
fastcgi(php程) | ngx_http_fastcgi_module |
uwsgi(python) | ngx_http_uwsgi_module |
grpc(go程序)golang | ngx_http_v2_module |
主机 | IP | 身份 |
---|---|---|
lb01 | 10.0.0.4 | 代理 |
web01 | 172.16.1.7 | web服务端 |
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
[root@web01 ~]# vim /etc/nginx/conf.d/linux.wp.com.conf
server {
listen 80;
server_name linux.wp.com;
location / {
root /code/wordpress;
index index.php;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /code/wordpress/$fastcgi_script_name;
include fastcgi_params;
}
}
# 上传网站代码访问
[root@web01 ~]# ll /code
drwxr-xr-x 5 www www 4096 4月 16 19:30 wordpress
# 配置本地hosts文件
10.0.0.7 linux.wp.com
# 浏览器访问测试
http://linux.wp.com/
# 安装nginx
cat > /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
[root@lb01 ~]# yum install nginx -y
# 创建用户
[root@lb01 ~]# groupadd www -g 666 && useradd www -u 666 -g 666 -s /sbin/nologin -M
# 配置nginx
[root@lb01 ~]# vim /etc/nginx/nginx.conf
user www;
# 启动nginx
[root@lb01 ~]# systemctl start nginx && systemctl enable nginx && systemctl status nginx
# 配置nginx代理
[root@lb01 ~]# cat /etc/nginx/conf.d/linux.wp.com.conf
server {
listen 80;
server_name linux.wp.com;
location / {
proxy_pass http://172.16.1.7:80;
}
}
# 重启nginx
[root@lb01 ~]# nginx -t && systemctl restart nginx
# 配置hosts
10.0.0.4 linux.wp.com
# 访问测试
结果:访问的页面不是我们要的内容,返回了web端第一个配置文件的内容
#原因:代理请求web服务端时,没有使用域名,使用了IP,匹配时没有匹配到server_name,所以直接返回默认的第一个配置文件
[root@lb01 ~]# vim /etc/nginx/conf.d/linux.proxy.com.conf
server {
listen 80;
server_name linux.wp.com;
location / {
proxy_pass http://172.16.1.7:80;
proxy_set_header Host $http_host;
}
}
# 重启再次访问
[root@lb01 ~]# systemctl restart nginx
再次访问http://linux.wp.com/,得到想要的内容
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $http_host;
proxy_set_header Connection close;
Context: http, server, location
# 用户请求的时候HOST的值是linux.proxy.com, 那么代理服务会像后端传递请求的还是linux.proxy.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
#nginx代理等待后端服务器的响应时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
#后端服务器数据回传给nginx代理超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
#设置nginx代理保存用户头信息的缓冲区大小
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
#proxy_buffers 缓冲区
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
[root@lb01 ~]# vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 10s;
proxy_read_timeout 10s;
proxy_send_timeout 10s;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
[root@lb01 ~]# vim /etc/nginx/conf.d/linux.proxy.com.conf
server {
listen 80;
server_name linux.proxy.com;
location / {
proxy_pass http://10.0.0.7:80;
include proxy_params;
}
}
原文链接:https://blog.csdn.net/weixin_48981270/article/details/117720297
作者:java战神
链接:http://www.javaheidong.com/blog/article/222730/88270d689080f2b852eb/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!