您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

nginx--正向代理、反向代理及负载均衡

时间:2022-07-20 10:19:12  来源:  作者:Linux特训营

什么是Nginx

总结送学习资料(包含视频、技术学习路线图谱、文档等)

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器…

除了反向代理,nginx还支持正向代理、负载均衡以及基于SSL安全证书的HTTPS访问等功能特性~
本文主要是介绍是如何配置nginx正向代理、反向代理及负载均衡,进入正文~

反向代理:看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。

一、代理服务

什么是代理?来一张图了解下

nginx--正向代理、反向代理及负载均衡(图解 路线图)

 

代理又分为正向代理和反向代理。

二、正向代理

1.1 什么是正向代理?

先来看张图~

nginx--正向代理、反向代理及负载均衡(图解 路线图)

 

正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果是在服务器用,用户无感知,就是反向代理。

2.Nginx配置文件

在学习 Nginx之前,要熟知它的配置文件,毕竟,下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。

Nginx默认的配置文件是在安装目录下的 conf目录下,后续对 Nginx的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过nginx.conf配置文件,记得要重启Nginx服务(☆☆☆☆☆)

配置文件中有很多#号,该符号表示注释内容,去掉所有以 #开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):

# 主进程叫master,负责管理子进程,子进程叫worker
# worker_processes配置项表示开启几个业务进程,一般和cpu核数有关
worker_processes  1;

events {
    worker_connections  1024;
}

http {
	# include表示可以引入其他文件,此处表示引入http mime类型
    include       mime.types;
    default_type  Application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

	# 虚拟主机,可以配置多个
    server {
        listen       80;
        server_name  localhost;

        location / {
        	# 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径
            root   html;
            index  index.html index.htm;
        }

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

去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:

2.1 第一部分:全局块

 worker_processes  1;

从配置文件开始到events块之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括:配置运行Nginx服务器的用户(组)、允许生成的 worker process 数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。

上面这行 worker_processes 配置,是 Nginx 服务器是并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。

2.2 第二部分:events 块

events {
	worker_connections  1024;
}

events 块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括:是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持最大连接数等

上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置。

2.3 第三部分:http 块

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

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

这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置的

http 全局块:http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

server 块:这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。而每个server块也分为全局server块,以及可以同时包含多个locaton块。(☆☆☆☆☆)

2.3.1 全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

2.3.2 location 块

一个 server 块可以配置多个 location 块。

这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        # 若请求路径像这样:www.xxxx/img/example.png
        # 则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件
        location /img/ {
            root /var/www/image;
        }

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

3. 反向代理如何配置

3.1 反向代理实例一

实现效果:使用 Nginx 反向代理,访问www.123.com直接跳转到127.0.0.1:8080

注意:此处如果要想从www.123.com跳转到本机指定的ip,需要修改本机的hosts文件。此处略过

配置代码

nginx--正向代理、反向代理及负载均衡(图解 路线图)

 

如上配置,Nginx监听 80端口,访问域名为www.123.com(不加端口号时默认为 80端口),故访问该域名时会跳转到 127.0.0.1:8080 路径上。

此处的意思为:nginx 反向代理服务监听 192.168.17.129的80端口,如果有请求过来,则转到proxy_pass配置的对应服务器上,仅此而已。

在location下,同时配置root和proxy_pass选项时,两个选项只会二选一执行

此处不能配置https反向代理

实验结果:

nginx--正向代理、反向代理及负载均衡(图解 路线图)

 

3.2 反向代理实例二

实现效果:使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中,Nginx 监听端口为 9001

访问
http://192.168.17.129/edu/直接跳转到 127.0.0.1:8080

访问
http://192.168.17.129/vod/直接跳转到 127.0.0.1:8081

第一步,需要准备两个 Tomcat,一个 8080 端口,一个 8081 端口,并准备好测试的页面

第二步,修改 nginx 的配置文件,在 http 块中配置 server

nginx--正向代理、反向代理及负载均衡(图解 路线图)

 

根据上面的配置,当请求到达 Nginx 反向代理服务器时,会根据请求路径不同进行分发到不同的服务上。

实验结果:

nginx--正向代理、反向代理及负载均衡(图解 路线图)

 

补充:location 指令说明

该指令用于匹配 URL, 语法如下:

location [ = | ~ | ~* | ^~] uri {

}

= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求

~:用于表示 uri 包含正则表达式,并且区分大小写

~*:用于表示 uri 包含正则表达式,并且不区分大小写

^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求。字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识

Nginx完整配置文件

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the php scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ .php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}



Tags:反向代理   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
 Nginx 服务器的反向代理服务是其最常用的重要功能,由反向代理服务也可以衍生出很多与此相关的 Nginx 服务器重要功能,比如后面会介绍的负载均衡。本篇博客我们会先介绍 Ngin...【详细内容】
2022-09-28  Tags: 反向代理  点击:(57)  评论:(0)  加入收藏
客户端在访问时会先把请求发到nginx,http的默认端口是80,而nginx一直监听80端口,nginx收到请求后根据域名解析,映射到不同路径,实现反向代理。我们在浏览器访问时就不需要再用 ip...【详细内容】
2022-09-18  Tags: 反向代理  点击:(14)  评论:(0)  加入收藏
什么是nginx?总结送学习资料(包含视频、技术学习路线图谱、文档等)Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器…除了反向代理,nginx还支持正向代理、负载均...【详细内容】
2022-07-20  Tags: 反向代理  点击:(77)  评论:(0)  加入收藏
nginx反向代理web网站时,容易出现css和图片丢失的情况,要解决这个问题需要添加location ~ .*如:server { listen 80; server_name abc.ccc.com;...【详细内容】
2022-07-19  Tags: 反向代理  点击:(143)  评论:(0)  加入收藏
1 Nginx介绍Nginx 是一个高性能的HTTP和反向代理web服务器,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名,其特点是占有内存少,并发能力强,能够支持高达...【详细内容】
2022-07-14  Tags: 反向代理  点击:(53)  评论:(0)  加入收藏
工作中经常会使用nginx 配置反向代理,代理末尾的斜杠配置组合大体上可以分为8种,所以总是忘记 location 和 proxy_pass 最后面的斜杠会对代理结果有怎样的影响。今天我们就来...【详细内容】
2022-07-14  Tags: 反向代理  点击:(134)  评论:(0)  加入收藏
背景:运维思路来讲,前两篇文章详细介绍到jenkins部署,仅仅是对于体验于学习,但运维任重而道远,往往生产不可轻易暴露自己的IP,因此前面我们学习到的IP+端口号的方式就不合适了,基于...【详细内容】
2022-04-29  Tags: 反向代理  点击:(192)  评论:(0)  加入收藏
官方文档地址: https://grafana.com/tutorials/run-grafana-behind-a-proxy/一级路径的配置方式只需要修改nginx配置文件,主要是增加对WebSocket的支持及反向代理的配置map $h...【详细内容】
2022-03-23  Tags: 反向代理  点击:(526)  评论:(0)  加入收藏
一、问题描述反向代理服务器,设置完成,网站为OA,ERP管理系统之类的网站。用域名访问登录正常,选择正常,一切正常。异常:无法刷新,刷新页面404,链接变成域名加port方式。port为反向...【详细内容】
2022-03-17  Tags: 反向代理  点击:(990)  评论:(0)  加入收藏
一:反向代理:1:正向代理与反向代理简介:正向代理代理客户端,反向代理代理服务器。简单来说 ,代理就是隐藏自己的真实位置,由其他代理来访问。既然都这样,为什么分正反呢,区别在于,正向...【详细内容】
2022-02-28  Tags: 反向代理  点击:(186)  评论:(0)  加入收藏
▌简易百科推荐
众所周知,SSL证书通常是针对完全合格的域名(FQDN)颁发的。然而,一些企业和公共机构不能通过域名访问各种类型的应用程序,而是使用IP地址。为了有效保障这类企业的数据传输安全,IP...【详细内容】
2022-10-30  青蛙数字安全    Tags:SSL   点击:(14)  评论:(0)  加入收藏
现在搭建网站其中的三要素:域名、主机空间以及建站程序缺一不可。主机空间其实也就是我们常见的服务器,在搭建网站之前一般都会提前规划配置什么样的空间/服务器,其中美国虚拟...【详细内容】
2022-10-24  安信SSL证书    Tags:SSL证书   点击:(5)  评论:(0)  加入收藏
当前许多企业为吸引国际客户的关注,获取更多的国际市场机会,都把网站搭建在香港或国际多地的服务器上。但是在网站搭建完成后,发现网站无法访问,这是什么原因导致的呢?其实,遇到...【详细内容】
2022-10-24  云杰通信    Tags:服务器   点击:(8)  评论:(0)  加入收藏
我们如果要存储大量数据的话,都会用到服务器系统进行储存,很多IT公司都是拥有自己的服务器系统,那如果我们因为工作需要想要重装戴尔服务器系统的话,要怎么进行操作呢,下面教给大...【详细内容】
2022-10-24  小白一键重装系统    Tags:服务器   点击:(11)  评论:(0)  加入收藏
现在主流都在推荐使用SSL证书,部署了SSL证书能自动激活浏览器显示“锁”型标志,我们可以在浏览器的地址栏看到“https”开头的网址。SSL证书意味着在客户端浏览器和Web服务器...【详细内容】
2022-10-22  吠品    Tags:SSL证书   点击:(4)  评论:(0)  加入收藏
大家都知道安装域名安全证书,即SSL证书后相当于为网站加上了一层保护罩,能有效预防黑客攻击,避免传输信息的泄露,从而大大提高网站的安全性。虽然大多数网站使用域名申请SSL证书...【详细内容】
2022-10-21  Cntrus数字认证    Tags:SSL证书   点击:(5)  评论:(0)  加入收藏
今天,通过xftp向Centos系统的某个文件夹上传文件时,莫名其妙上传失败,提示的错误信息为Unknown error!首先排除了权限问题,但是具体是什么问题呢?初步怀疑是磁盘满了。那么如果确...【详细内容】
2022-10-20  紫气之巅  今日头条  Tags:CentOS   点击:(9)  评论:(0)  加入收藏
FTP服务软件安装包: vsftpd默认发布目录: /var/ftp协议接口: 21/tcp服务配置文件: /etc/vsftpd/vsftpd.conf报错id的解析:500 ##文件系统权限过大530 ##用户认证失败550 ##服务本...【详细内容】
2022-10-17  沪飘运维    Tags:FTP   点击:(19)  评论:(0)  加入收藏
一个朋友说他遇到这样一个问题,同样的服务器别人可以连接,自己却无法连接,捣鼓了好久都无法解决,很是郁闷。这个问题,刚好我之前也遇到过,后来完美解决了,这就给大家分享一下我的解...【详细内容】
2022-10-14  萌小翊  搜狐号  Tags:服务器   点击:(22)  评论:(0)  加入收藏
nginx 80端口重定向到443端口,也就是http访问自动跳转到https 配置如下:一、按照如下格式修改nginx.conf 配置文件,80端口会自动转给443端口,这样就强制使用SSL证书加密了。访问...【详细内容】
2022-10-09  运维技术站  今日头条  Tags:重定向   点击:(74)  评论:(0)  加入收藏
站内最新
站内热门
站内头条