当前位置:首页 > CN2资讯 > 正文内容

nginx反向代理功能

2天前CN2资讯

Nginx反向代理:

            以入口点的方式接受来自客户端的请求,但是本身不存在任何数据,而是交由后端服务器进行处理后,再返回里客户端

请求            客户端发起请求------>代理服务器------------------------------>后端服务器

返回            后端服务器------------->代理服务器------------------------------>客户端

在这个过程客户端是不主动向后端服务器请求的,后端服务器也不直接向客户端返回数据

 

 

公司常用:

            1、实现跨地区的代理服务器

               例如:业务服务器在北京,但是有港台的客户需要访问,但是客户直接从港台访问北京的服务器,网络环境很差,这时候就需要用到反向代理功能,作为可以提高网络环境主要有三个要素

               客户只需要保证他到港台服务器的网络性能即可,而真实与北京服务器进行交互的是港台的服务器,服务器之间的网络性能在基础上要比客户直接来访问要好很多,如果是有专线的情况下

               那么网络环境是非常好的。

     2、用于安全考虑

               有的环境需要隐藏后端服务器的真是IP地址,这样的环境使用反向代理,客户访问到的只能是反向代理服务器(域名指向的是反向代理服务器),只能获取到反向代理服务器的ip地址

               而代理服务器上是不存在任何数据

     3、用于负载均衡,配合upstream

 

 

反向代理常用配置参数解释:

Nginx负载均衡反向代理搭建

一、测试站点搭建:

基础环境:

         

主机

域名

访问内容

主机名

192.168.110.40

learn

learn  proxy    001

learn  proxy   002

[root@learn_proxy_40  ~]#,后端服务器

192.168.110.46

learn  proxy  001

learn  proxy   002

[root@learn_proxy_46 ~]# ,后端服务器2

192.168.110.47

learn


代理服务器

 

Nginx负载均衡反向代理:

 

192.168.110.40         

[root@learn_proxy_40 ~]#mkdir /data/www/learn

[root@learn_proxy_40 ~]#echo  "learn1 proxy 001" >/data/www/learn/learn1.php

[root@learn_proxy_40 ~]#vim /usr/local/nginx/conf/vhost/learn

server

        {

                listen       80;

                server_name  learn;

                index index.php  index.html index.htm;

                root  /data/www/learn;

                error_log  /data/weblogs/learn1_error.log  crit;

                access_log  /data/wwwlogs/learn1.log  access;

 

           location ~ \.php$ {

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi.conf;

        }

        }

 

 

[root@node2 ~]# curl "http://learn/learn1.php"

learn proxy 001

 

 

 

 

 

[root@learn_proxy_40 ~]#mkdir /data/www/

[root@learn_proxy_40 ~]#echo  "learn1 proxy 002" >/data/www//learn2.php

[root@learn_proxy_40 ~]#vim /usr/local/nginx/conf/vhost/

server

        {

                listen       80;

                server_name  ;

                index index.php  index.html index.htm;

                root  /data/www/;

                error_log  /data/weblogs/learn2_error.log  crit;

                access_log  /data/wwwlogs/learn2.log  access;

 

           location ~ \.php$ {

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi.conf;

        }

        }

 

 

 

 

通过上面的配置,已经可以实现两个站点的正常访问,区分开两个站点是分别不同的两台主机

但是在真是生产环境,它们的内容是相同,只是为了方便测试才这样区分的

 

192.168.110.46的配置同192.168.110.40配置流程一样,切记配置啊,要不不能出结果了

 

 

 

二、负载均衡反向代理搭建:

 

192.168.110.47,反向代理服务器

 

[root@proxy_server ~]#vim /usr/local/nginx/conf/vhost/myproxy

upstream  learn_server_proxy  {                                       #learn_server_proxy,是upstream定义的负载均衡池名称

         server 192.168.110.46:80  weight=1;          #代理的后端服务器

         server 192.168.110.40:80  weight=1;          #代理的后端服务器

}

 

[root@proxy_server vhost]# vim /usr/local/nginx/conf/vhost/

server {

     listen  80;

     server_name   learn;                                             #域名

     location / {

        proxy_pass  http://learn_server_proxy;                       #指定了upstream,负载均衡池的名称,也就是指定了后端服务器的地址

        proxy_set_header Host  $host;                                           #获取主机头信息,如果不写,会导致访问失败

        proxy_set_header  X-Forwarded-For $remote_addr;   #可以获取到访问客户端的真是ip。

      }

 

}

 

 

[root@proxy_server wwwlogs]# vim /usr/local/nginx/conf/vhost/

 

server {

     listen  80;

     server_name   ;

     location / {

        proxy_pass  http://learn_server_proxy;

        proxy_set_header Host  $host;

        proxy_set_header  X-Forwarded-For $remote_addr;

      }

}

 

测试方法:

         在本地host写入

192.168.110.47 

192.168.110.47  learn

然后去访问这两个域名,下面 是我测试的截图

 反向代理服务器日志截图

注意看我标注红框的两个位置,左手边的红框内显示的是请求地址,也就是客户端地址。

右手边红框标注的是客户端发起的请求是由后端的那些服务器进行处理的

 

咱们刚开始要实现的就是负载均衡的反向代理,通过日志我们可以看到,从192.168.110.168发出的请求,会由

           server 192.168.110.46:80  weight=1;

     server 192.168.110.40:80  weight=1;

           这两台主机同时处理,轮询算法。

          后端服务器日志截图

         左手边的红框是客户端的ip地址,而右手边的红框是代理服务器的ip地址,日志显示方式做个处理下面会说

 

后端服务器日志格式配置:

  

log_format  access  '$http_x_forwarded_for  - $remote_user [$time_local] "$request" '

              '$status $body_bytes_sent "$http_referer" '

             '"$http_user_agent" "$remote_addr" '

              '"$request_time" "$upstream_response_time" "$upstream_addr" ';

 

我是将$remote_add和$http_x_forwarded_for互换了一下位置,$http_x_forwarded_for这个参数是配置可以让nginx获取到真实的ip地址

 

 

TCP反向代理配置

       首先需要准备一个可以测试的代码,这么没办法提供,只能自己想办法了。

       

Nginx代理服务器配置

安装扩展模块

1、首先查看现在已经编译的模块

[root@proxy_server package]#/usr/local/nginx/sbin/nginx -V    #查看nginx已经编译好的参数,后面也需要将这些模块重新编译

 

configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

2、下载需要编译的模块

[root@proxy_server package]#wget https:///yaoweibin/nginx_tcp_proxy_module/archive/master.zip  

[root@proxy_server package]# unzip master.zip

 

新模块:--add-module=/data/package/nginx_tcp_proxy_module-master/ #模块存放路径

3、进入nginx安装目录

进行重新编译,需要加上之前已经编译过的参数

[root@proxy_server package]# tar  zxvf tengine-2.0.3.tar.gz

[root@proxy_server package]# cd /data/package/tengine-2.0.3

[root@proxy_server package]# patch -p1 < /data/package/nginx_tcp_proxy_module/tcp.patch

[root@proxy_server package]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with- http_stub_status_module --with-http_ssl_module --add-module=/data/package/nginx_tcp_proxy_module-master/

[root@proxy_server package]# make

切勿进行make install这样就重新安装了

4、替换nginx二进制文件

[root@proxy_server package]#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak #先备份

[root@proxy_server package]#cp -rfp /data/package/tengine-2.0.3/objs/nginx /usr/local/nginx/sbin/ 替换

5、重载

[root@proxy_server package]#make upgrade

6、验证

[root@proxy_server package]# /usr/local/nginx/sbin/nginx -V

configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module--add-module=/data/package/nginx_tcp_proxy_module-master/   ##添加成功

 

配置Nginx配置文件

user  www www;

worker_processes 4;

events

        {

                use epoll;

                worker_connections 1204;

        }

 

http

        {

                include       mime.types;

                default_type  application/octet-stream;

                sendfile on;

                tcp_nopush     on;

 

                keepalive_timeout 60;

 

                tcp_nodelay on;

 

 

                server_tokens off;

                #log format

                log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '

              '$status $body_bytes_sent "$http_referer" '

             '"$http_user_agent" "$http_x_forwarded_for" '

              '"$request_time" "$upstream_response_time" "$upstream_addr" ';

             #upstream myfastcgi  {       

             #          server  192.168.110.40:9000 weight=1 max_fails=2 fail_timeout=30;

             #          server  192.168.110.46:9000 weight=1 max_fails=2 fail_timeout=30;

             # }

 

 

}

 

#tcp区块开始

tcp {

  timeout 1d;

  proxy_read_timeout 10d;          #设置Nginx从代理的后端服务器获取信息的时间,Nginx等待代理后端服务器的超时时间

  proxy_send_timeout 10d;          #代理后端服务器的数据回传时间,即在规定时间内后端服务器必须传完所有的数据,否则Nginx将断开这个连接

  proxy_connect_timeout 30;     #表示反向代理服务器与后端节点服务器连接的超时时间,及发起握手等候响应的超时时间

  include ./vhost/*;                    #应用./host/目录下的所有文件

  }

#tcp区块结束

主要是增加了tcp区块的配置

tcp区块不允许配置在http区块和server区块中

 

upstream 配置

[root@proxy_server vhost]# vim /usr/local/nginx/conf/vhost/loadblance.tcp

upstream  tcp8888  {

         server 192.168.110.40:8888 weight=1;                                     #后端服务器的tcp    ip:port

         check interval=10000 rise=3 fall=2 timeout=1000;          #健康检查机制

}

 

interval:向后端发送健康检查包的间隔

rise:如果连续成功次数达到rise配置的参数,服务器被认定为up

fall:如果连续失败粗疏达到fall配置的参数,服务器被认定为down

timeout:后端健康请求的超时时间

因为我测试的tcp连接是tcp 8888端口所以我是这么写的,具体测试端口自行修改

 

虚拟主机配置文件配置

vim /usr/local/nginx/conf/vhost/tcp_proxy.tcp

server {

     listen  8888;                                                                                           #监听端口

           server_name   ;                                                  #访问域名

                 access_log /data/weblogs/nginx/tcp8888.access.log;   #日志记录

        proxy_pass  tcp8888;                                                                     #应用upstream定义池名称

                 so_keepalive on;                                                                              #心跳检测开启 

                 tcp_nodelay on;                                                                                #有效提高数据的实时响应性

}

 

测试方法:

        在客户端写入host

        192.168.110.47 

        访问域名

         http://:8888/,下面截图是访问到的内容,经验证配置成功。

 

反向代理参数解释:

 

proxy_pass  http://learn_server_proxy;                                #指定了upstream的负载均衡池,也就是代理后端服务器的访问地址

proxy_set_header Host  $host;                                                    #获取主机头,如果不配置此参数,会导致访问失败

proxy_set_header  X-Forwarded-For $remote_addr;            #获取客户端真实IP地址



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24946.html

    分享给朋友:

    “nginx反向代理功能” 的相关文章

    如何获取便宜稳定算力以推动科研与技术创新

    便宜稳定算力是一个现代计算资源获取的概念,特别是在人工智能、深度学习及科学计算等领域中,这种计算能力的经济性与可靠性显得尤为重要。它的定义可以简单理解为以相对较低的成本获得高效、稳定的计算资源。随着科技的迅速发展,企业和研究机构对计算资源的需求逐渐增加,如何以合理的投资实现算力购买成为一个值得关注的...

    阿里云国际站:轻松注册与支付方式全解析

    什么是阿里云国际站? 在这个科技迅速发展的时代,云计算已经成为许多企业和个人开展业务的重要基础设施。阿里云国际站便是一处全球化的云计算服务平台,旨在为世界各地的用户提供高效、灵活和安全的云计算服务。它不仅支持多种功能,还具备强大的全球基础设施,能够满足不同用户的需求。 阿里云国际站被设定为一个面向全...

    选择最佳VPS主机服务:Digital-VM全面解析与性能优化策略

    谈到 Digital-VM,我总会被它的成长故事所吸引。这家主机商成立于2018年,致力于为用户提供高效、灵活的VPS主机解决方案。作为一家美国公司,它在短时间内就扩大了服务范围,减少了用户在选择主机服务时的焦虑。Digital-VM 看似是一颗新星,却在竞争激烈的市场中脱颖而出,令人刮目相看。 在...

    全面了解Amazon CDN CloudFront:快速、安全的内容分发网络服务

    在互联网的快速发展中,内容分发网络(CDN)成为确保网站速度和性能的重要保证。CDN是通过在全球各地的多个服务器上缓存和分发内容,以最短的路径将数据传送给用户。这样做不仅加快了加载速度,还提高了用户体验。通过保存内容的副本在离用户更近的地点,CDN能够显著降低网络延迟。 而Amazon CloudF...

    AMD EPYC 7002处理器:高性能与高能效的完美结合

    我一直对AMD EPYC 7002系列处理器充满兴趣。这款处理器是AMD公司最新推出的服务器处理器,确实让人感到兴奋。基于现代的Zen 2架构,这款处理器融合了先进的7nm制程工艺,投放市场后便以其高性能和高能效著称。随着数据中心和云计算需求的不断增加,EPYC 7002系列成了一个热议的话题,来看...

    如何选择便宜的海外服务器来提升业务效率

    什么是海外服务器 海外服务器简单来说,就是在国外数据中心托管的服务器。那些需要在国外提供服务和访问的企业或者个人,会选择这种类型的服务器。比起本地服务器,海外服务器往往能提供更好的网络速度和稳定性,尤其是对某些特定的地区来说。如果你有过在网上购物或者访问国际网站的经历,或许你会发现他们的响应速度比一...