Nginx

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Nginx

安装Nginx

使用yum源进行安装
  • 安装nginx

    sudo yum -y install nginx
  • 卸载nginx

    sudo yum remove nginx
  • nginx安装目录

    /etc/nginx
  • 配置Nginx服务

    sudo systemctl enable nginx # 设置开机启动 
    sudo service nginx start # 启动 nginx 服务
    sudo service nginx stop # 停止 nginx 服务
    sudo service nginx restart # 重启 nginx 服务
    sudo service nginx reload # 重新加载配置,一般是在修改过 nginx 配置文件时使用。
源码包方式安装
  • 安装gcc

    sudo yum -y install gcc gcc-c++ # nginx 编译时依赖 gcc 环境
  • 安装pcre

    sudo yum -y install pcre pcre-devel # 让 nginx支持重写功能
  • 安装zlib

    sudo yum -y install zlib zlib-devel 
  • 安装 openssl

    sudo yum -y install openssl openssl-devel
  • 下载nginx 官网:http://nginx.org/en/download.html

    wget http://nginx.org/download/nginx-1.23.1.tar.gz
  • 解压nginx

    tar -zxvf nginx-1.23.1.tar.gz
  • 解压完成后进入nginx目录进行源码编译安装

    cd nginx-1.11.5
    ./configure --prefix=/usr/local/nginx # 检查平台安装环境 
    # --prefix=/usr/local/nginx  是 nginx 编译安装的目录(推荐),安装完后会在此目录下生成相关文件
  • 编译

    make
  • 安装

    make install
  • 开启防火墙访问

    firewall-cmd --permanent --add-port=80/tcp    (port=需要开启的端口号)
    service firewalld restart
  • 查看已开放的端口号

    firewall-cmd --list-all

Nginx常用命令

  • 查看nginx版本号

    ./nginx -v
  • 启动nginx

    ./nginx
  • 关闭nginx

    ./nginx -s stop
  • 重新加载nginx (不重启nginx重新加载配置文件)

    ./nginx -s reload

Nginx配置文件组成

第一部分:全局块

从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,如:worker_process: worker_processes值越大,可以支持的并发处理量也越多

第二部分:events块

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

比如: worker_connections 1024:支持的最大连接数

第三部分:http块

Nginx服务器配置中最频繁的部分,http块也可以包括http全局块,server块

配置windows域名本地解析
  • ‪修改C:\Windows\System32\drivers\etc\hosts

    10.xxx... www.xxx.com

Nginx反向代理配置

  • 单节点代理
server {
        listen       80;  #nginx监听的端口号
        server_name  10.161.117.115;  #服务器ip  本地访问使用localhost

        #charset koi8-r;  

        #access_log  logs/host.access.log  main;

        location / {  # location后配置访问路径
            root   html;
            proxy_pass http://127.0.0.1:8080;  #配置反向代理的服务器域名端口
            index  index.html index.htm;
        }
  • 多节点代理(根据路径进行匹配访问)
server {
        listen       9001;  # 监听的端口号
        server_name  10.161.117.115;  # 服务器地址

        location ~ /edu {  # 匹配的路由
           proxy_pass http://127.0.0.1:8080; # 代理的服务器地址
        }

        location ~ /vod {
           proxy_pass http://127.0.0.1:8081;
        }
    }
location指令

作用:该指令用于匹配URL

语法:

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

}
  • =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
  • ~:用于表示uri包含正则表达式,并且区分大小写
  • ~*:用于表示uri包含的正则表达式,并且不区分大小写
  • ^~:用于不包含正则表达式的uri前,要求Nginx服务器找到标识uri和请求字符串匹配最高的location后,;立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配
  • 如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识

Nginx负载均衡配置

  • 在配置文件中的http块中配置upstream

    upstream myserver{
            server 10.161.117.115:8080;
            server 10.161.117.115:8081;
    }
    • server为需要进行负载均衡的服务器列表
  • 配置proxy_pass

    location / {
            proxy_pass http://myserver; #使用声明的负载均衡服务
    }
负载均衡策略
  • 轮训:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除
  • weight:weight 代表权,重默认为 1,权重越高被分配的客户端越多,用于后端服务器性能不均的情况

    server 10.161.117.115:8080 weight=5;
    server 10.161.117.115:8081 weight=10; 
  • ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题(计算ip的hash值)

    upstream myserver{
            ip_hash;#开启ip_hash
            server 10.161.117.115:8080;
            server 10.161.117.115:8081;
    }
  • fair:第三方(按后端服务器的响应时间来分配请求,响应时间短的优先分配)

    upstream myserver{
            server 10.161.117.115:8080;
            server 10.161.117.115:8081;
            fire;#开启按响应时间分配
    }

Nginx动静分离

概念:Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面

动静分离从目前实现角度来讲大致分为两种:

  • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案
  • 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开
配置动静分离
 location /img {         #配置静态资源访问路径
            root   /data/;  #对静态资源访问路径进行拼接  /data/img
            autoindex on; # 访问路径时在web页面显示文件索引树
        }
 location /www {         
            alias   /data/www; #将/www替换为/data/www,做别名
 }

Nginx原理

在这里插入图片描述

  • Nginx服务启动后包含一个master进行和多个worker进行,master负责任务发放,worker进行负责任务争抢
有什么好处好处?

首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险

worker配置多少个合适?

Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗

  • 设置worker数量

    worker_processes 4
  • 连接数worker_connection:这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于 HTTP 请 求 本 地 资 源来 说 , 能 够 支 持 的 最大 并 发 数 量 是

    worker_connections worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections worker_processes /2,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
负载均衡 安全 前端开发
nginx的一些总结
nginx的一些总结
|
5月前
|
缓存 Unix 应用服务中间件
|
5月前
|
缓存 负载均衡 应用服务中间件
nginx 就该这么用
nginx 就该这么用
37 0
|
5月前
|
存储 Java 应用服务中间件
nginx
nginx
46 0
|
5月前
|
前端开发 安全 应用服务中间件
|
11月前
|
前端开发 应用服务中间件 nginx
Nginx 简单介绍(一)
如果我们想要将数据转接到多个服务器可以这样写: [^1]
58 0
|
负载均衡 应用服务中间件 nginx
|
负载均衡 应用服务中间件 nginx
nginx V1.0
nginx V1.0
|
存储 缓存 负载均衡
nginx应用
nginx应用
98 0
nginx应用
|
负载均衡 前端开发 安全
什么是nginx
什么是nginx