Docker部署nginx

1、nginx介绍

1、简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

Nginx是一个中间件,多用于做反向代理和负载均衡。

2、反向代理

先了解正向代理,我想访问其他服务器,但是我无法直接访问到,可以通过一个中间的代理服务器访问,这个过程就是正向代理。

反向代理就是正向代理反过来,别人想访问我的服务器,无法直接访问,可以通过某个技术让别人访问到我的服务器,这个技术就是反向代理。

3、负载均衡

外部请求增大会增加服务器的压力,就是增加了服务器的负载,这种情况一旦超过了服务器的负荷,就有可能出现服务器宕机的情况,直接影响到软件的运行。

负载均衡就是将服务器的压力通过设定好的算法,分配给不同的服务器,这样每个服务器的压力不会超过负荷了,保证项目高可用。

负载均衡的算法:

轮询、weight、IP hash

2、安装nginx

基于centOS 7.x安装

在 /usr/local下新建一个文件夹nginx, 在nginx文件夹下 导入

1、下载nginx

下载地址:

nginx: download

2、解压nginx安装包

cd /usr/local/nginx

tar -zxvf nginx-1.22.1.tar.gz

3、安装nginx

1、执行configure命令

进入对应目录 cd /usr/local/nginx/nginx-1.22.1

./configure

检查一下本地,并创建nginx需要的文件

2、执行 make 命令

编译一下 make

3、安装组件

yum install -y openssl*
​
yum install -y ncurses-devel
​
yum install -y make zlib-devel gcc c++ libtool openssl openssl-devel
​
make install

返回上层目录,查目cd录内容

Docker部署nginx_第1张图片

 

4、启动nginx

1、查找nginx位置并启动

whereis nginx

进入对应的目录,再进入sbin目录,执行./nginx,启动nginx

Docker部署nginx_第2张图片

nginx默认监听了80端口,浏览器访问看一下是否启动成功

 Docker部署nginx_第3张图片

 

2、常用命令

# 启动nginx
./nginx
# 停止nginx
./nginx -s stop
# 重新加载配置文件
./nginx -s reload
# 查看nginx进程
ps aux|grep nginx

3、反向代理

优点:

  • 可以起到防护作用,所有向服务器发送的请求都经过nginx做一次代理,可以减少安全隐患。

  • 通过缓存的放回加速静态资源的请求。

  • 可以实现负载均衡。

1、配置反向代理

1、基础配置

worker_processes  1;
events {
    worker_connections  1024;
}
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;
        }
    }
}

http:配置的开始,不只有它一个开始,但是我们常用的,经常修改的配置都是以它开始

server:服务,是我们经常要修改的配置

linten:这个服务监听的端口

server_name:这个服务的名字,我们自定义

location:操作最多的指令,详情见3.1.2

error_page:返回状态码时的配置

当前的配置说明:

监听了80端口,访问时根据location匹配请求地址,到NGINX_HOME下的html目录下找对应的资源,如果请求的是根地址,则返回index.html,如果请求出错,返回50x.html。

2、location指令

描述:用于匹配URL的,一个server配置中允许有多个location,顺序匹配,=的优先级最高

语法:location [通配符] uri {

其他配置

}

location [ = | ~ | ~* ] uri {
​
}

通配符

=:精准匹配,只有完全相同才会进入这个location,相当于Java字符串的equals方法

~:区分大小写匹配

~*:不区分大小写匹配

root:用于设置资源位置,他相对于NGINX_HOME路径,如果想用绝对路径,用/开头。接收到请求会在root配置的路径下找资源。

index:是首页配置,在访问根地址时会返回index配置的资源。

2、反向代理配置

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://172.19.186.149:8080;
        }
    }
}

监听了80端口,将80端口的请求发送到8080端口,简单来说就80端口代理了8080端口。

产生的效果就是原本需要访问8080才能拿到请求,现在访问80端口就可以了。

代理的ip地址可以修改,这个就实现了nginx在一台服务器,后台微服务在其他服务器,避免微服务收到攻击。

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location /jinkens {
            proxy_pass http://172.19.186.149:8080/;
        }
    }
}

注意事项:proxy_pass注意最后是否需要加/,大多情况都需要,因为如果不加请求会这样转发:

请求地址是http://172.19.186.149/jinkens,真实的响应是:http://172.19.186.149:8080/jinkens

加了/后,真实的响应是:http://172.19.186.149:8080

root的配置也有这个要求

4、负载均衡

1、配置hello集群

启动两个tspringboot镜像容器,修改端口号,用于演示集群

2、nginx负载均衡

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://demo7/;
        }
    }
    upstream demo7{
        server 127.0.0.1:8898;
        server 127.0.0.1:8998;
    }
}

upstream :是配置负载均衡,后跟它的名字

server:负载均衡的两个服务,可以配置多个,需要几个微服务做负载均衡就配几个

location的proxy_pass配置不需要写具体的ip,写upstream的名字

负载均衡的方式有三种:轮询(默认的,不声明采用这个模式)、权重(可以根据实际情况分配权重)、ip hash(请求的ip地址做hash算法处理)

你可能感兴趣的:(服务器,运维,nginx)