nginx实现反向代理、负载均衡-技术流ken

1.简介

本篇博文是《nginx实现动态/静态文件缓存-技术流ken》的二部曲。将详细介绍nginx如何实现反向代理以及负载均衡技术,并辅以实战案例。

反向代理--“反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。”

负载均衡--“网络专用术语,负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。”

2.nginx实现反向代理

1.几个概念

反向代理:在收到客户端请求之后,会修目标IP地址和端口

正向代理:在收到客户端请求之后,会修源IP地址和端口

上游服务器:代理服务器后端的哪些真正给客户端提供服务的节点,这样的服务器称之为上游服务器

下游服务器:客户端就是下游节点

2.反向代理指令

模块:nginx_http_proxy_module
    指令
    proxy_pass:指定上游服务器的ip和端口
    proxy_set_header:指定在重新封装请求报文的时候,添加一个新的首部

    Syntax:     proxy_pass URL;
    Default:     —
    Context:     location, if in location, limit_except
    例子:proxy_pass http://10.220.5.200:80;

    Syntax:     proxy_set_header field value;
    Default:     proxy_set_header Host $proxy_host;
    Context:     http, server, location

3.反向代理简单示例

location / {
        proxy_pass http://10.220.5.180;
        proxy_set_header X-Real-IP $remote_addr
        proxy_set_header Host $proxy_host;
    }

4.反向代理实战案例

1.环境准备

centos7.5

反向代理服务器IP:172.20.10.7/28

web1服务器IP:172.20.10.8/28

web2服务器IP:172.20.10.9/28

2.配置反向代理服务器端

yum安装nignx需要配置网络源,复制下面的代码到你的yum仓库中

[ken]
name=ken
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/

安装nginx

[[email protected] ~]# yum install nginx -y

配置nginx文件,我们实现这样一个效果,静态文件都被代理到172.20.10.8,动态文件都被调度到172.20.10.9,实现动静分离。

[[email protected] ~]# vim /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
       # include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /var/www/html;
        index index.html index.php;
        # Load configuration files for the default server block.
   location / {
        proxy_pass http://172.20.10.8;
        proxy_set_header host $proxy_host;
        proxy_set_header realip $remote_addr;
        }
        location ~^/.*(\.php)$ {
        proxy_pass http://172.20.10.9;
        proxy_set_header host $proxy_host;
        proxy_set_header realip $remote_addr;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
    

进行语法检测

[[email protected] ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

检查没有问题之后进行重启

[[email protected] ~]# systemctl start nginx

3.配置web服务器端

安装apache

[[email protected] ~]# yum install httpd -y

准备测试文件,172.20.10.8准备静态文件

[[email protected] ~]# echo "this is 172.20.10.8 for static test">/var/www/html/index.html 

172.20.10.9需要下载php以便支持动态文件

[[email protected] html]# yum install php -y

172.20.10.9准备动态文件,

[[email protected] ~]# cd /var/www/html/
[[email protected] html]# vim index.php
<?php
phpinfo();
?>

4.web服务器重启

[[email protected] html]# systemctl restart httpd

5.关闭安全服务

[[email protected] ~]# iptables -F

6.浏览器测试

请求静态文件测试

静态文件请求已经成功转发至172.20.10.8。

测试成功!

请求动态文件测试

动态文件请求已经成功转发至172.20.10.9.

测试成功!

7.补充

补充一

补充1:
    location如下
        location /admin {
            proxy_pass http://www.ken.com/;
            proxy_pass http://www.ken.com;
        }

    请求的url 是http://www.ken.com/admin/a.html

    如果代理方式是 proxy_pass http://www.ken.com/; 那么去www.ken.com的跟目录下找a.html,/代表完全代理。
    如果代理方式是 proxy_pass http://www.ken.com; 那么去www.ken.com的跟目录下的admin找a.html

补充二

补充2:
    如果location中使用了模式匹配(正则),那么,location中的url会直接补充到代理节点的后面.

    此时,上游服务器的的后面不能有任何内容,包括 /

        location ~ \.php$ {
            proxy_pass http://www.ken.com; [正则表达式proxy_pass转发的地址后面什么都不能加]       <<< 正确写法
            proxy_pass http://www.ken.com:80;     <<< 正确写法
            proxy_pass http://www.ken.com/;       <<< 错误写法
            proxy_pass http://www.ken.com/img;    <<< 错误写法
        }

    此时,如果请求的url是 http://www.baidu.com/book/stu/a.php ,就会代理成 http://www.ken.com/book/stu/a.php

补充三

补充3:
    在location中如果有重定向的话,那么就用重定向后的uri替换掉代理节点中的uri
        location / {
            rewrite /(.*)$ /index.php?name=$1 break;
            proxy_pass http://www.baidu.com:80/img;
        }

    此时,如果请求的url是 http://www.ken.com/bajie ,就会代理成 www.baidu.com/index.php?name=bajie

3.nginx实现负载均衡

1.几个概念

调度器:分发用户的请求到一个后端节点

上游服务器(真实服务器):每个真正用来处理用户请求的节点都是一个上游服务器

CIP:客户端的IP地址

RIP:真实服务器的IP地址

VIP:虚拟IP,用户所看到的是也是虚拟IP

2.指令

指令:upstream
    作用:定义一个上游服务器组
    格式
        upstream name {
            server  上游服务器1  参数 参数;
            server  上游服务器1  参数 参数;
            server  上游服务器1  参数 参数;
        }

3.重要参数

    weight=#:设置服务器的权重(数字越大,权重越高)
    backup: 设置服务器处于备用状态(其他节点出现故障,备用节点才开始工作)
    down:设置让一个节点处于离线状态(经常用在维护一个节点的情况下)
    max_fails=number:设置连续几次转发失败就认为该节点出现故障,然后就不再向该节点转发用户请求了
    fail_timeout=time: 和上个参数组合使用,作用是设置等待上游服务器响应超时时间

4.nginx实现负载均衡实战案例

1.环境准备

centos7.5

nginx服务器IP:172.20.10.7/28

web1服务器端IP:172.20.10.8/28

web2服务器端IP:172.20.10.9/28

2.配置nginx服务器端

安装nginx略

配置nginx文件

[[email protected] ~]# vim /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;
 access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
       # include /etc/nginx/conf.d/*.conf;
    upstream ken {
        server 172.20.10.8 weight=1 max_fails=3 fail_timeout=5;
        server 172.20.10.9 weight=2 max_fails=3 fail_timeout=5;
    }
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /var/www/html;
  index index.php index.html;

        # Load configuration files for the default server block.
        # include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://ken/;
        proxy_set_header host $proxy_host;
        proxy_set_header realip $remote_addr;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
            

语法检测

[[email protected] ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启nginx

[[email protected] ~]# systemctl restart nginx

3.配置web服务器端

略.和上面反向代理配置一样。

4.浏览器测试

输入nginx服务器端的IP地址

因为172.20.10.9的权重为2,即出现两次172.20.10.9才会出现一次172.20.10.8.进行刷新测试

测试成功!

nginx的三大功能,缓存,反向代理,负载均衡,已经全部讲解完毕,是否对nginx有了全新的认识那?马上自己动手实验一下吧

原文地址:https://www.cnblogs.com/kenken2018/p/9740406.html

时间: 2024-10-25 07:49:40

nginx实现反向代理、负载均衡-技术流ken的相关文章

Nginx实现反向代理负载均衡与静态缓存

介绍: Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.在连接高并发的情况下,Nginx是Apache服务器不错的替代品,能够支持高达50000个并发连接数的响应. 实验环境: Hostname IP 系统 规划 n2.preferred 192.168.1.2 Centos 6.5 Web server n3.preferred 192.168.1.3 Centos 6.5 Web server n6.preferred 192.168.1.6

Nginx实现反向代理负载均衡功能

反向代理软件Nginx:本身支持反向代理.负载均衡功能,属于L7层负载均衡.Nginx反向代理简单易用,受到大部分中小企业的青睐.LVS:支持L4层负载均衡,haproxy:支持L4.L7层负载均衡L4.L7是指OSI模型中的第四层和第七层:L4:TCP负载均衡:L7:http负载均衡nginx.lvs.haproxy区别参考资料https://www.cnblogs.com/ahang/p/5799065.htmlhttps://www.cnblogs.com/like-minded/p/51

Nginx安装-反向代理-负载均衡-动静分离

安装 1.需要素材 后两个用命令下载安装 openssl-1.0.1t.tar.gzzlib -1.2.8.tar.gz 2:在/usr/src/ 下吧 " nginx-1.16.1.tar.gz " "pcre-8.37.tar.gz" 这两个文件放进去并且解压然后在pcre-8.37这个文件下先 : ./configure 在敲 make && make install pcre-conffig --verison 查看版本 下面安装nginx

简单实现Nginx的反向代理+负载均衡

一.引言 上次我们体验了Nginx反向代理的使用,配置是非常简单的,一句配置搞定.这章我们来讲讲在Nginx如何使用反向代理+负载均衡.负载均衡估计程序员都听说过,比如开发一个电商.web端项目什么后期优化需要做负载均衡,不然同时10w用户同时访问,程序就容易相对应的崩溃. 所谓负载均衡,是由多台服务器或服务共同完成一个功能点,从而达到负载均衡的效果.打个比方:用户请求发起一个请求,网站显示的图片量又比较大,如果说这个时候有N个用户同时访问,那么全部的工作量都放在了一台服务器上,指不定什么时候就

Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53535435 Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而N

nginx实现反向代理负载均衡

Nginx实现反向代理 nginx代理基于是ngx_http_proxy_module模块的功能,该模块有很多属性配置选项,如: proxy_pass:指定将请求代理至server的URL路径:     proxy_set_header:将发送至 server的报文的某首部进行重写 proxy_send_timeout:在连接断开之前两次发送到server的最大间隔时长:过了这么长时间后端还是没有收到数据,连接会被关闭 proxy_read_timeout:是从后端读取数据的超时时间,两次读取操

NGINX 实现反向代理负载均衡服务器

一.nginx负载均衡与反选代理的区别? 答:我觉得没什么区别,一台就叫反向代理,多台就叫负载均衡,它们相结合使用 二.nginx 负载均衡原理 三.配置nginx负载均衡 修改nginx.conf http {     include       mime.types;     default_type  application/octet-stream;     sendfile        on;     keepalive_timeout  65;     upstream backe

Nginx的反向代理 负载均衡 配置

在ubuntu下安装Nginx: sudo apt install nginx nginx的配置文件有两个: /etc/nginx/nginx.conf /etc/nginx/sites-enabled/default 在server块中增加配置,设置反向代理: server{ listen 9001; server_name 127.0.0.1; location ~ /edu/ { proxy_pass http://127.0.0.1:8080; } location ~ /vod/ {

nginx ----&gt; nginx配置/反向代理/负载均衡

1 server { 2 listen 80; 3 server_name localhost; 4 5 location / { 6 #将请求与我们定义的服务器进行映射 7 proxy_pass http://localhost:8080/loginForm; //分号不能少 8 #root html; 9 #index index.html index.htm; 10 } 11 12 error_page 500 502 503 504 /50x.html; 13 location = /5