Nginx

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月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。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
存储 Java 关系型数据库
全网最全、最新Maven构建工具核心知识,这篇文章包你这辈子也忘不掉Maven!!
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
全网最全、最新Maven构建工具核心知识,这篇文章包你这辈子也忘不掉Maven!!
|
11月前
|
人工智能 算法 安全
智能灾害预警系统:自然灾害的早期检测与响应
【10月更文挑战第26天】智能灾害预警系统利用大数据、物联网、云计算和人工智能等技术,实现对自然灾害的早期检测与预警。本文介绍其技术原理、应用现状及未来发展趋势,探讨如何提高预测精度、促进跨学科融合创新,推动灾害风险管理的科学化和社会化进程。
1337 2
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
1262 2
[JarEditor]可直接修改jar包的IDEA插件
|
11月前
|
存储 缓存 关系型数据库
滴滴面试:单表可以存200亿数据吗?单表真的只能存2000W,为什么?
40岁老架构师尼恩在其读者交流群中分享了一系列关于InnoDB B+树索引的面试题及解答。这些问题包括B+树的高度、存储容量、千万级大表的优化、单表数据量限制等。尼恩详细解释了InnoDB的存储结构、B+树的磁盘文件格式、索引数据结构、磁盘I/O次数和耗时,以及Buffer Pool缓存机制对性能的影响。他还提供了实际操作步骤,帮助读者通过元数据找到B+树的高度。尼恩强调,通过系统化的学习和准备,可以大幅提升面试表现,实现“offer直提”。相关资料和PDF可在其公众号【技术自由圈】获取。
|
12月前
|
人工智能 安全 数据挖掘
AI在灾害预警与管理中的应用:提升应急响应能力
【9月更文挑战第23天】AI在灾害预警与管理中的应用正在逐步改变我们对灾害的应对方式。通过实时监测与数据分析、精准预测与风险评估、快速响应与决策支持、智能调度与资源优化以及灾后评估与恢复重建等多种手段,AI正逐步提升我们的应急响应能力,为保障人民生命财产安全提供有力支持。未来,随着AI技术的不断发展和完善,我们有理由相信,AI将在灾害预警与管理中发挥更加重要的作用,为人类社会的可持续发展贡献更多力量。
|
存储 Linux 虚拟化
虚拟机下如何使用Docker(完整版)
Docker 是一款开源的应用容器引擎,由Docker公司最初开发并在2013年发布。Docker的核心理念源自于操作系统级别的虚拟化技术,尤其是Linux上的容器技术(如LXC),它为开发人员和系统管理员提供了一种标准化、轻量级的方式来打包、分发和运行应用程序及其依赖环境。
1321 2
|
消息中间件 关系型数据库 MySQL
从零玩转Docker之docker-compose快捷部署中间件2
从零玩转Docker之docker-compose快捷部署中间件
1492 0
基于jeecgboot的flowable流程增加节点表单的支持(三)
基于jeecgboot的flowable流程增加节点表单的支持(三)
210 1