欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

nginx实现反向代理

程序员文章站 2022-06-03 18:26:25
[tcp] nginx实现反向代理 nginx常见的代理模型 正向代理 反向代理 区别 1.区别在于形式上服务的”对象”不一样 2.正向代理代理的对象是客户端,为客户端服务 3.反向代理代理的对象是服务端,为服务端服务 代理支持的协议 反向代理支持的协议 模块总结 反向代理模式与Nginx代理模块总 ......

[tcp]

nginx实现反向代理

nginx常见的代理模型

  • 正向代理

nginx实现反向代理

  • 反向代理

nginx实现反向代理

区别

1.区别在于形式上服务的”对象”不一样

2.正向代理代理的对象是客户端,为客户端服务

3.反向代理代理的对象是服务端,为服务端服务

代理支持的协议

nginx实现反向代理

反向代理支持的协议

nginx实现反向代理

模块总结

反向代理模式与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;
#
#       }
}