nginx实现反向代理
程序员文章站
2022-06-03 18:26:25
[tcp] nginx实现反向代理 nginx常见的代理模型 正向代理 反向代理 区别 1.区别在于形式上服务的”对象”不一样 2.正向代理代理的对象是客户端,为客户端服务 3.反向代理代理的对象是服务端,为服务端服务 代理支持的协议 反向代理支持的协议 模块总结 反向代理模式与Nginx代理模块总 ......
[tcp]
nginx实现反向代理
nginx常见的代理模型
- 正向代理
- 反向代理
区别
1.区别在于形式上服务的”对象”不一样
2.正向代理代理的对象是客户端,为客户端服务
3.反向代理代理的对象是服务端,为服务端服务
代理支持的协议
反向代理支持的协议
模块总结
反向代理模式与nginx代理模块总结如表格所示
反向代理模式 | nginx配置模块 |
---|---|
http、websocket、https | ngx_http_proxy_module |
fastcgi | ngx_http_fastcgi_module |
uwsgi | ngx_http_uwsgi_module |
grpc | ngx_http_v2_module |
nginx反向代理配置语法
url
跳转修改返回location
[不常用]
参考下载站点:http://test.driverzeng.com/nginx_file/
syntax: proxy_redirect default; proxy_redirect off;proxy_redirect redirect replacement; default: proxy_redirect default; context: http, server, location
实战案例:
部署web服务器反向代理
环境准备
外网ip | 内网ip | 主机名 |
---|---|---|
10.0.0.5 | 172.16.1.5 | lb01 |
10.0.0.7 | 172.16.1.7 | web01 |
10.0.0.8 | 172.16.1.8 | web02 |
1.web01部署网站
#准备配置文件 [root@web01 ~]# vim /etc/nginx/conf.d/proxy.conf server { listen 80; server_name proxy.drz.com; location / { root /code/proxy; index index.html; } } #创建站点目录 [root@web01 ~]# mkdir /code/proxy #部署代码 [root@web01 ~]# echo 'web01...' > /code/proxy/index.html #重启nginx [root@web01 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@web01 ~]# nginx -s reload
2.在lb01上安装nginx
[root@lb01 php]# rpm -ivh nginx-1.16.1-1.el7.ngx.x86_64.rpm [root@lb01 php]#yum -y install nginx
1)配置代理
[root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf server { listen 80; server_name proxy.drz.com; location / { proxy_pass http://10.0.0.7; } }
2)创建www用户
3)修改启动用户
4)启动nginx
[root@lb01 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@lb01 ~]# nginx -s reload
5)访问输入域名浏览器
10.0.0.1请求10.0.0.5的时候使用的是域名
10.0.0.5请求10.0.0.7的时候使用的是ip:port
当访问80端口的时候,没有域名的情况下,默认会去找排在最上面的那个配置文件。
所以我们需要解决这个问题,保留住最开始的请求头部信息。
解决问题
[root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf server { listen 80; server_name proxy.drz.com; location / { proxy_pass http://172.16.1.7; proxy_set_header host $http_host; #请求头部 proxy_http_version 1.1;#长链接 proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; proxy_set_header x-real-ip $remote_addr;#主配置文件"$http_x_real_ip" #记录客户端来源的ip proxy_connect_timeout 60s;#客户端访问代理超时时间 proxy_read_timeout 60s;#代理响应后端web超时时间 proxy_send_timeout 60s;#web返回代理超时时间 proxy_buffering on; #nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端 proxy_buffer_size 8k;#设置nginx代理保存用户头信息的缓冲区大小 proxy_buffers 8 8k;#缓冲区大小 } } ~ cd /etc/nginx/ vim proxy_gramms proxy_set_header host $http_host; proxy_http_version 1.1; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 60s; proxy_buffering on; proxy_buffer_size 8k; proxy_buffers 8 8k; server { listen 80; server_name proxy.drz.com; location / { proxy_pass http://10.0.0.7; include proxy_params; } # location /xxx { # proxy_pass http://10.0.0.7; # include proxy_params; # # } }