Nginx

Nginx

1. 概述

1.1 概念

Nginx是一款代理服务器,轻量级web服务器,反向代理服务器,主要用于反向代理和负载均衡等

1.2 代理服务

  • 正向代理:用于代理内部网络向因特网的连接请求,客户端发送请求,经代理服务器再发送给web服务器,返回的响应先经代理服务器再返回客户端
  • 反向代理:反向代理服务器代理因特网到服务端的请求,客户端发送请求到因特网,再到代理服务器,由代理服务器从目标服务器获取信息数据,再返回客户端

1.3 负载均衡

将数据流量按一定规则分发到服务器集群(多个服务器)执行,从而减轻每台服务器压力,且提升了吞吐量

1.4 动静分离

将静态资源放到反向代理服务器(类似缓存),从而加快响应速度

  • web服务器分两类:
    1. web应用服务器:tomcat, resin, jetty
    2. web服务器:Apache服务器,Nginx, IIS
  • 区别:web服务器不能解析jsp等页面,只能处理 js,css,html 等静态资源,且web服务器的并发能力远高于web应用服务器

2.Nginx的安装

  1. 安装nginx依赖库

    • yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
      
  2. 下载jar包

    • wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
      
  3. 解压

    • tar -zxvf nginx-1.12.0.tar.gz
      
  4. 配置nginx安装包

    • cd nginx-1.12.0
      
      ./configure --prefix=/usr/local/nginx
      
  5. 编译并安装

    • make && make install
      

3. 目录结构

├── client_body_temp         # 临时目录
├── conf                     # Nginx所有配置文件的目录
│   ├── nginx.conf                 # Nginx主配置文件
├── fastcgi_temp             # fastcgi临时数据目录
├── html                     # Nginx默认站点目录
│   ├── 50x.html                   # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│   └── index.html                 # 默认的首页文件
├── logs                     # Nginx日志目录
│   ├── access.log			      # 访问日志文件
│   ├── error.log			      # 错误日志文件
│   └── nginx.pid			      # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp               # 临时目录
├── sbin                     # Nginx命令目录
│   └── nginx			          # Nginx的启动命令
├── scgi_temp                # 临时目录
└── uwsgi_temp               # 临时目录

4. 启动与关闭

进入nginx下的sbin目录

cd /usr/local/nginx/sbin

4.1 启动

./nginx

4.2 关闭

./nginx -s stop

5. 配置文件

5.1 配置文件

nginx/config/nginx.config

#user  nobody;
#工作进程
worker_processes  1;

events {
    #连接池连接数
    worker_connections  1024;
}
#请求方式
http {
    #媒体类型
    include       mime.types;
    #默认媒体类型 二进制
    default_type  application/octet-stream;
    #上传文件
    sendfile        on;
    #超时时间
    keepalive_timeout  65;

    #gzip  on;
    #服务器配置
	server {
        #监听端口
        listen       80;
        #监听域名
        server_name  localhost;
        #请求头信息
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #请求映射规则,/代表所有请求路径
        location / {
             #请求转发地址
             #root html;
			 proxy_pass http://manage.powershop.com:8080;
             #欢迎页
             #index  index.html index.htm;
             #转发连接超时时间
			proxy_connect_timeout 600;
             #转发读取超时时间
			proxy_read_timeout 600;
        }
    }
}

5.2 动态加载配置文件

可以在不关闭nginx的情况下更新配置文件

./nginx -s reload

6. Nginx代理Tomcat

6.1 安装两台tomcat

  1. 解压两个tomcat到/usr/java,分别命名为tomcat-8080,tomcat-8090

  2. 修改tomcat配置文件中的端口

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SayRKUfw-1666019023253)(assets\1586937991091.png)]
  3. 修改文件权限

    1. 进入tomcat目录的 bin 目录中,ll 列出文件发现 startup.sh 和 catalina.sh 文件的权限为 -rw-r–r–
    2. 使用命令赋予最高权限
      • chmod 777 shtartup.sh
      • chmod 777 catalina.sh
    3. 再次查看发现权限变为:-rwxrwxrwx
  4. 启动

    • 使用 startup.sh 可直接启动,使用catalina.sh 可启动并输出日志
  5. 测试

    • 访问链接:虚拟机ip:8080/test 和 虚拟机ip:8090/test [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMG43h0H-1666019023254)(C:\Users\wangp\AppData\Roaming\Typora\typora-user-images\image-20221017220843369.png)]

    • 如访问不通,可尝试关闭防火墙:systemctl stop firewalld

6.2 代理一台tomcat(反向代理)

修改nginx/conf/nginx.conf文件:

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

访问链接:ip/test

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9TQxA6t-1666019023255)(C:\Users\wangp\AppData\Roaming\Typora\typora-user-images\image-20221017230035954.png)]

6.3 代理多台tomcat(负载均衡)

  1. 在 http 节点上添加一个 upstream

  2. 修改 location / 下的反向代理

    • # 服务器列表
      upstream myTomcats{
          server 127.0.0.1:8080;
          server 127.0.0.1:8090;
      }
      
      server {
          listen       80;
          server_name  localhost;
      
      	# 代理
          location / {
              root   html;
              proxy_pass http://myTomcats;
              index  index.html index.htm;
          }
      }
      
  3. 重启,连续访问链接: 虚拟机ip/test,发现实现了在 tomcat1和tomcat2 的负载均衡访问

6.4 负载均衡策略

6 种负载均衡策略

负载均衡策略说明
轮询默认
weight权重方式
ip_hash依据ip分配方式
least_conn按连接数
fair按响应时间
url_hash依据URL分配
  1. 轮询

    • 默认的负载均衡方式,所有服务器交替执行,较为平均
  2. weight

    • 权重方式,权重越大,执行次数越多,默认为1

    • upstream upstream myTomcats{
          server 127.0.0.1:8080 weight=1;
          server 127.0.0.1:8090 weight=3;
      }
      
  3. ip_hash

    • 根据计 客户端的 ip 得到的 hash 值,找到指定服务器执行,保证一个客户端每次访问同一台 tomcat

    • 基本解决 session 跨域问题(多台服务器 session 不同步,则负载均衡可能访问到没有存储自己 session 的服务器上,导致访问失败),但如果这台 tomcat 挂了,还是会访问其他 tomcat,没有完全解决

    • upstream upstream myTomcats{
          ip_hash;
          server 127.0.0.1:8080;
          server 127.0.0.1:8090;
      }
      
  4. url_hash

    • 根据 url 计算出的 hash 结果分配,使每个 url 定位到同一个服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。

    • upstream upstream myTomcats{
          hash $request_uri;
          server 127.0.0.1:8080;
          server 127.0.0.1:8090;
      }
      
  5. fair

    • 需安装第三方插件

    • 按照服务器响应时间来分配请求,响应时间短的优先分配

    • upstream upstream myTomcats{
          server 127.0.0.1:8080;
          server 127.0.0.1:8090;
          fair;
      }
      
  6. least_conn

    • 把请求转发给连接数较少的后端服务器

    • upstream upstream myTomcats{
          least_conn;
          server 127.0.0.1:8080;
          server 127.0.0.1:8090;
      }
      

session 丢失问题的解决:

  • 基本解决 session 丢失问题,但如果这台 tomcat 挂了,还是会访问其他 tomcat,没有完全解决
  • session复制同步:多台tomcat时,复制session非常耗费资源
  • redis:redis和session都是k、v,都能设置过期时间

7. 动静分离

将静态资源放到反向代理服务器(类似缓存),从而加快响应速度

  • web服务器分两类:
    1. web应用服务器:tomcat, resin, jetty
    2. web服务器:Apache服务器,Nginx, IIS
  • 区别:web服务器不能解析jsp等页面,只能处理 js,css,html 等静态资源,且web服务器的并发能力远高于web应用服务器

实现

  1. 修改 nginx.config 配置文件

    • # 服务器列表
      upstream upstream myTomcats{
          server 127.0.0.1:8080;
          server 127.0.0.1:8090;
      }
      
      server {
          listen       80;
          server_name  localhost;
      
          # 静态资源访问目录 images
          location ~* \.(gif|jpg|png|jpeg)$ {
          	root /usr/upload/images;
      	}
      
      	# 动态资源访问代理服务器
          location / {
              root   html;
              proxy_pass http://myTomcats;
              index  index.html index.htm;
          }
      }
      
  2. 新建文件夹 /usr/upload/images,并上传一张图片,404.jpg

  3. 启动 nginx

  4. 访问链接(静态资源):ip/404.jpg

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TH348hDw-1666019023255)(C:\Users\wangp\AppData\Roaming\Typora\typora-user-images\image-20221017182424495.png)]
  5. 访问链接(动态资源):ip/test

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9TQxA6t-1666019023255)(C:\Users\wangp\AppData\Roaming\Typora\typora-user-images\image-20221017230035954.png)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值