打赏
返回顶部

Nginx反向代理服务器

一 Nginx服务器


 

1.1 什么是Nginx

Nginx 是一个高性能的 http 和反向代理服务器,其特点是占用内存小,并发能力强。 Nginx专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

1.2 反向代理

正向代理:在浏览器中配置代理服务器,通过代理服务器进行互联网访问。例如平时我们使用的加速器、FQ等代理就是正向代理,客户机请求代理服务器,代理服务器转发请求到对应的目标服务器(代理的是客户)

反向代理:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址。部署在Web服务器上,

代理所有外部网络对内部网络的访问。浏览器访问服务器,必须经过这个代理,是被动的。(代理的是服务器)

1.3反向代理的作用:

  1. 安全,客户端对Web服务器的访问需要先经过反向代理服务器。这样可以防止外部程序对Web服务器的直接攻击。

  2. 负载均衡,反向代理服务器可以根据Web服务器的负载情况,动态地把HTTP请求交给不同的Web服务器来处理,前提是要有多个Web服务器。

  3. 提升Web服务器的IO性能。一个HTTP请求的数据,从客户端传输给服务器,是需要时间的,例如N秒,如果直接传给Web服务器,Web服务器就需要让一个进程阻塞N秒,来接收IO,这样会降低Web服务器的性能。如果使用反向代理服务器,先让反向代理服务器接收完整个HTTP请求,再把请求发给Web服务器,就能提升Web服务器的性能。还有一些静态文件的请求,可以直接交给反向代理来处理,不需要经过Web服务器。

1.4 负载均衡

如果请求数过大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为请求分发到多个服务器上,就是负载均衡。

1.5动静分离

为了加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

二 Nginx的安装


 

Nginx 需要几个依赖包,分别是 pcre , openssl , zlib ,在安装 nginx 之前需要先安装这几个依赖。

2.1 安装pcre依赖

  1. 使用命令下载 pcre 压缩包
 1 wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz 
  1. 解压压缩文件
 1 tar -xvf pcre-8.37.tar.gz 
  1. 进入解压后的名录,执行以下命令
./configure

  

  1. 使用以下命令进行编译安装
 1 make && make install 
  1. 查看安装的 pcre 版本号
 1 pcre-config --version 

2.2 安装openssl,zlib等依赖

 1 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 

2.3 安装nginx

  1. nginx 官网下载 nginx ,官网地址: https://nginx.org/download/;
  2. 将压缩包拖到服务器上;
  3. 使用命令 tar -xvf nginx-1.12.2.tar.gz 解压压缩包;
  4. 使用命令 ./configure 检查;
  5. 使用命令 make && make isntall 编译安装;

安装成功后,在 usr 会多出来一个文件夹, local/nginx ,在 nginx 的 sbin 文件夹下有启动脚本。

2.4 启动nginx

在 /usr/local/nginx/sbin 文件夹下,使用以下命令启动

./nginx

然后浏览器访问服务器ip, nginx 默认端口是80,出现以下页面则证明 nginx 安装成功;

来了,来了,你们要的Nginx教程来了

 

2.5 Nginx常用的命令

使用这些命令时需要进入 /usr/local/nginx/sbin 文件夹

  • 查看 nginx 的版本号
./nginx -v
  • 启动 nginx
./nginx
  • 关闭 nginx
./nginx -s stop
  • 重新加载 nginx
./nginx -s reload

2.6 Nginx的配置文件

nginx 的配置文件在 /usr/local/nginx/conf 中的 nginx.conf 。我们将 nginx.conf 中注释的内容删除一下。

 1 #user  nobody;
 2 worker_processes  1;
 3 
 4 #pid        logs/nginx.pid;
 5 
 6 events {
 7     worker_connections  1024;
 8 }
 9 
10 http {
11     include       mime.types;
12     default_type  application/octet-stream;
13 
14     sendfile        on;
15     #tcp_nopush     on;
16 
17     #keepalive_timeout  0;
18     keepalive_timeout  65;
19 
20     #gzip  on;
21 
22     server {
23         listen       80;
24         server_name  localhost;
25 
26         location / {
27             root   html;
28             index  index.html index.htm;
29         }
30     }
31 }

 

nginx 的配置文件包含三部门。

1.全局块

从配置文件开始到 events 块之间的内容,主要会设置一些 nginx 服务器整体运行的配置指令。

worker_processes  1;

这个代表 nginx 处理并发的关键配置,值越大,处理并发能力越强。但是会受到硬件、软件等约束。

2.events块

events 块涉及的指令主要影响 nginx 服务器与用户网络的连接。

worker_connections  1024;

这个代表 nginx 支持的最大连接数。

3.http全局块

nginx 服务器配置最频繁的部分。 http 全局块包含 http块 和 server块 。

三 Nginx配置反向代理


 

3.1 ngix代理流程

来了,来了,你们要的Nginx教程来了

 

本地浏览器访问 nginx 服务器, nginx 服务器反向代理 tomcat 服务器,当我们请求 nginx的时候直接访问到 tomcat 。 tomcat 的安装这里就不再讲了,我将 tomcat 和 nginx 安装在了同一台服务器上。

3.2 配置ip和域名的绑定关系

由于我们的 nginx 没有域名,为了演示,因此我们在本地 host 文件中配置 nginx 服务器ip和域名进行绑定。这个 host 文件的具体位置在 C:\Windows\System32\drivers\etc 。在host文件中增加一句配置:

1 47.104.xxx.xxx www.javatrip.com

 

前面的ip是服务器的ip地址,后面的域名是我随便起的用于绑定这个ip的一个域名。配置好之后,我们使用域名访问一下tomcat,如果能请求到 omcat 默认页面,则配置成功。

来了,来了,你们要的Nginx教程来了

 

3.3 在nginx配置请求转发

server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
  }
我们将以上默认的配置文件做个修改:

server {
    listen       80;
    server_name  47.104.xxx.xxx;

    location / {
        root   html;
        proxy_pass http://127.0.0.1:8080;
        index  index.html index.htm;
    }
}

 

以上这段配置的意思就是请求是 47.104.xxx.xxx:80 ,都会转发至 47.104.xxx.xxx:8080 。

现在浏览器访问www.javatrip.com,发现直接转发到了 tomcat 上了,这样简单的反向代理就完成了。

3.4 根据请求后缀分发

我们再解压一个 tomcat ,端口号设置为8081,分别在两个 tomcat 下 webapps 目录下面新建dev 和 prod 目录,然后在该目录下写一个文件。

将请求 www.javatrip.com:7001/dev 转发到 tomcat8080 ,将请求 www.javatrip.com:7001/prod 转发到 tomcat8081 。现在我们的 nginx 监听的端口号是7001。打开 nginx 的配置文件,新建一个 server 如下:

 1 server {
 2     listen       7001;
 3     server_name  47.104.xxx.xxx;
 4 
 5     location ~ /dev/ {
 6         proxy_pass http://127.0.0.1:8080;
 7     }
 8     
 9     location ~ /prod/ {
10         proxy_pass http://127.0.0.1:8081;
11     }
12 }

 

然后试试效果,分别访问`www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html,效果如下:

来了,来了,你们要的Nginx教程来了

 

来了,来了,你们要的Nginx教程来了

 

其中,配置转发的时候用到了~,其含义内容如下:

nginx

四 Nginx配置负载均衡


 

4.1 什么是负载均衡

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

现在我们想实现的效果是通过访问www.javatrip.com:7001/prod/a.html,将请求分别分发到两个tomcat上面去,首先我们在 tomcat8080 上新建一个 prod 的文件夹,里面放一个 a.html 的文件。这样 tomcat8081 和 tomcat8080 两个上就都有了一个 prod 的文件夹且里面有一个 a.html的文件。

4.2 配置nginx.conf

首先,在 http块 中配置两个 tomcat 的服务列表

 1 upstream myserver{
 2     server 127.0.0.1:8080;
 3     server 127.0.0.1:8081;
 4 }
 5 其次,在 server块 中配置规则:
 6 
 7 server {
 8     listen       80;
 9     server_name  47.104.xxx.xxx;
10 
11     location / {
12         root   html;
13         proxy_pass http://myserver;
14         index  index.html index.htm;
15     }
16 }

 

4.3 测试效果

访问地址:www.javatrip.com:7001/prod/a.html,多刷新几次。发现有的请求到 tomcat8080上,有的请求到 tomcat8081 上。

来了,来了,你们要的Nginx教程来了

 

来了,来了,你们要的Nginx教程来了

 

4.4 nginx支持的几种负载策略

  • 轮询(默认):每个请求按时间顺序逐一分配到不同的服务器,如果服务器down了,会自动剔除。
1  1 upstream myserver{ 2 server 127.0.0.1:8080; 3 server 127.0.0.1:8081; 4 }

 

 
  • weight(权重):默认为1,权重越高,分配的请求越多。
 1 upstream myserver{ 2 server 127.0.0.1:8080 weight=1; 3 server 127.0.0.1:8081 weight=2; 4 } 
  • ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后台服务器,可以解决 session 的问题。
upstream myserver{
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

  

  • fair(第三方):按后端响应时间进行分配,响应时间越短分配的请求越多。
1 upstream myserver{
2     server 127.0.0.1:8080;
3     server 127.0.0.1:8081;
4     fair;
5 }

 

 

 

posted @ 2020-07-22 10:08  人丑就要多读书-Wu  阅读(329)  评论(0编辑  收藏  举报