Linux下Nginx安装使用

news2025/1/29 13:51:07

一、下载解压nginx

# 进入要放安装包的目录
cd /opt/software
# 下载安装包
wget https://nginx.org/download/nginx-1.20.2.tar.gz
# 解压缩
tar -zxvf nginx-1.20.2.tar.gz -C /opt/modules
# 进入解压后的目录
cd /opt/modules/nginx-1.20.2/

二、安装nginx

1、安装编译器

为了编译Nginx源码,我们需要标准的GCC编译器(GNU Compiler Collection,自由的类UNIX及Mac OS X操作系统的标准编译器),另外,我们需要通过Automake工具,完成自动创建Makefile的工作,除此以外,Nginx的一些模块还需要依赖其他第三方库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)和openssl库(支持ssl模块)。

可以通过如下指令去查看Linux服务器上是否已经安装pcre、zlib和openssl —— 转自原文链接

# 查看openssl
rpm -qa openssl
# 查看zlib
rpm -qa zlib
# 查看pcre
rpm -qa pcre
# 如果没有安装以上三个库,鉴于以上Nginx运行的需求,我们需要执行以下代码
yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、安装nginx

运行configure脚本程序,关于configure脚本程序参数解析可以看这篇文章:NGINX ./configure详解_冉半夏生的博客-CSDN博客

# 注意需要进入解压的nginx目录,--prefix指安装目录 默认为/usr/local/nginx 
# http_stub_status_module 和 http_ssl_module这两个模块提供对HTTPS必要的支持
# stream 实现(TCP/UDP)负载均衡 1.9.0之前的版本不支持stream
./configure --prefix=/opt/modules/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream

3、编译nginx

# 注意需要进入解压的nginx目录
make
make install

4、启停nginx

# 启动nginx,修改配置后要记得重启才能生效
/opt/modules/nginx/sbin/nginx -C /opt/modules/nginx-1.20.2/conf/nginx.conf
# 查看nginx是否启动
ps -ef | grep nginx
# 停止nginx
/opt/modules/nginx/sbin/nginx -s stop
# 重启nginx
/opt/modules/nginx/sbin/nginx -s reopen
# 重新载入配置文件
/opt/modules/nginx/sbin/nginx -s reload

在这里插入图片描述

三、nginx的使用

转自Nginx Stream(TCP/UDP)负载均衡 (w3schools.cn)

1、nginx负载均摊

注:stream 和http同级

Nginx 的 TCP/UDP 负载均衡是应用 Stream 代理模块(ngx_stream_proxy_module)和 Stream 上游模块(ngx_stream_upstream_module)实现的。Nginx 的 TCP 负载均衡与 LVS 都是四层负载均衡的应用,所不同的是,LVS 是被置于 Linux 内核中的,而 Nginx 是运行于用户层的,基于 Nginx 的 TCP 负载可以实现更灵活的用户访问管理和控制。

Nginx 的 Stream 上游模块支持与 Nginx HTTP 上游模块一致的 轮询(Round Robin)、**哈希(Hash)最少连接数(least_conn)**负载均衡策略。Nginx 默认使用轮询负载均衡策略,可以根据服务器配置权重配置样例如下:

①轮询负载均摊

根据权重轮询访问服务器

stream {
    upstream backend {
        server 192.168.1.100:6666 weight=2;
        server 192.168.1.101:6666 weight=1;
        server 192.168.1.102:6666 weight=1;
    }

    server {
        listen 8888;
        proxy_pass backend;
    }
}

②哈希负载均摊

哈希负载均衡策略可以通过客户端 IP($remote_addr)实现简单的会话保持,其可将同一 IP 客户端始终转发给同一台后端服务器。

哈希负载均衡策略通过指令参数 consistent 设定是否开启一致性哈希负载均衡策略。Nginx 的一致性哈希负载均衡策略是采用 Ketama 一致性哈希算法,当后端服务器组中的服务器数量变化时,只会影响少部分客户端的请求。

stream {
    upstream backend {
    	hash $remote_addr consistent;
        server 192.168.1.100:6666 weight=2;
        server 192.168.1.101:6666 weight=1;
        server 192.168.1.102:6666 weight=1;
    }

    server {
        listen 8888;
        proxy_pass backend;
    }
}

③最少连接负载均衡

最少连接负载均衡策略,可以在后端被代理服务器性能不均时,在考虑上游服务器组中各服务器权重的前提下,将客户端连接分配给活跃连接最少的被代理服务器,从而有效提高处理性能高的被代理服务器的使用率。

stream {
    upstream backend {
    	least_conn;
        server 192.168.1.100:6666 weight=2;
        server 192.168.1.101:6666 weight=1;
        server 192.168.1.102:6666 weight=1;
    }

    server {
        listen 8888;
        proxy_pass backend;
    }
}

④容错机制

Nginx 的 TCP/UDP 负载均衡在连接分配时也支持被动健康检测模式,如果与后端服务器建立连接失败,并在 fail_timeout 参数的时间内连续超过 max_fails 参数设置的次数,Nginx 就会将该服务器置为不可用状态,并且在 fail_timeout 参数的时间内不再给该服务器分配连接。当 fail_timeout 参数的时间结束时将尝试分配连接检测该服务器是否恢复,如果可以建立连接,则判定为恢复。

stream {
    upstream backend {
        server 192.168.1.100:6666 max_fails=3 fail_timeout=10s;
        server 192.168.1.101:6666 max_fails=3 fail_timeout=10s;
        server 192.168.1.102:6666 max_fails=3 fail_timeout=10s;
    }

    server {
        proxy_connect_timeout 5s;           # 与被代理服务器建立连接的超时时间为5s
        proxy_timeout 10s;          # 获取被代理服务器的响应最大超时时间为10s

        # 当被代理的服务器返回错误或超时时,将未返回响应的客户端连接请求传递给upstream中的下
        # 一个服务器
        proxy_next_upstream on;
        proxy_next_upstream_tries 3;        # 转发尝试请求最多3次
        proxy_next_upstream_timeout 10s;    # 总尝试超时时间为10s
        proxy_socket_keepalive on;  # 开启SO_KEEPALIVE选项进行心跳检测
        listen 8888;
        proxy_pass backend;
    }
}

其中的参数及指令说明如下。

  • 指令值参数 max_fails 是指 10s 内 Nginx 分配给当前服务器的连接失败次数累加值,每 10s 会重置为 0;
  • 指令值参数 fail_timeout 既是失败计数的最大时间,又是服务器被置为失败状态的熔断时间,超过这个时间将再次被分配连接;
  • 指令 proxy_connect_timeout 或 proxy_timeout 为超时状态时,都会触发 proxy_next_upstream 机制;
  • proxy_next_upstream 是 Nginx 下提高连接成功率的机制,当被代理服务器返回错误或超时时,将尝试转发给下一个可用的被代理服务器;
  • 指令 proxy_next_upstream_tries 的指令值次数包括第一次转发请求的次数。

TCP 连接在接收到关闭连接通知前将一直保持连接,当 Nginx 与被代理服务器的两个连续成功的读或写操作的最大间隔时间超过 proxy_timeout 指令配置的时间时,连接将会被关闭。在 TCP 长连接的场景中,应适当调整 proxy_timeout 的设置,同时关注系统内核 SO_KEEPALIVE 选项的配置,可以防止过早地断开连接。

2、nginx请求转发/反向代理

反向代理应该是Nginx使用最多的功能了,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。

①简单实现

反向代理通过proxy_pass指令来实现。

server {
    listen       8888;
    server_name  localhost;
    
    location /aaa {
        proxy_pass http://192.168.1.100:6666;
    	error_page 404 @error;
    }

	location /bbb {
        proxy_pass http://192.168.1.101:6666;
        error_page 404 @error;
    }

    location @error{ 
      proxy_pass http://error; 
    }
}  

这个简单的实现案例就是把访问这台服务器8888端口的请求转发到192.168.1.100这台服务器6666端口

②location用法

location 是 Nginx 对 HTTP 请求中的 URI 进行匹配处理的指令,location 的语法形式如下:

location [=|~|~*|^~|@] pattern { ... }

其中,[=|~*|^~|@]部分称为 location 修饰语(Modifier),修饰语定义了与 URI 的匹配方式。pattern 为匹配项,可以是字符串或正则表达式。

location 中的字符有没有 / 都没有影响。也就是说 /homepage//homepage 是一样的

如果 URI 结构是 https://domain.com/ 的形式,尾部有没有 / 都不会造成重定向。因为浏览器在发起请求的时候,默认加上了 / 。虽然很多浏览器在地址栏里也不会显示 /

如果 URI 的结构是 https://domain.com/homepage/ 。尾部如果缺少 / 将导致重定向。因为根据约定,URL 尾部的 / 表示目录,没有 / 表示文件。所以访问 /homepage/ 时,服务器会自动去该目录下找对应的默认文件。如果访问 /homepage 的话,服务器会先去找 homepage 文件,找不到的话会将 homepage 当成目录,重定向到 /homepage/ ,去该目录下找默认文件 来源: https://juejin.cn/post/7044438248495513614

Ⅰ匹配优先级

当有多条 location 规则时,nginx 有一套比较复杂的规则,如下

  • 精确匹配 =
  • 前缀匹配 ^~(立刻停止后续的正则搜索)
  • 按文件中顺序的正则匹配 ~~*
  • 匹配不带任何修饰的前缀匹配。

Ⅱ无修饰语

不加任何规则时,默认是大小写敏感,前缀匹配,相当于加了~ 与 ^~

# 匹配所有以/abc开头的url请求
location /abc {
  proxy_pass http://192.168.1.100:6666;
}
  • http://localhost/abc (匹配)
  • http://localhost/abc/ (匹配)
  • http://localhost/abc?param1=1 (匹配,忽略参数)
  • http://localhost/abce (不匹配)

Ⅲ修饰语"="

精确匹配pattern,pattern后不能带任何字符串

location = /abc {
  proxy_pass http://192.168.1.100:6666;
}
  • http://localhost/abc (匹配)
  • http://localhost/abc/ (不匹配, 带有结尾的/)
  • http://localhost/abc?param1=1 (匹配,忽略参数)
  • http://localhost/abce (不匹配)

Ⅳ修饰语"~"

区分大小写的正则匹配,匹配项的内容必须是正则表达式

location ~ ^/abc$ {
  proxy_pass http://192.168.1.100:6666;
}
  • http://localhost/abc (匹配)
  • http://localhost/abc/ (不匹配, 带有结尾的/)
  • http://localhost/abc?param1=1 (匹配,忽略参数)
  • http://localhost/Abc (不匹配)
  • http://localhost/abce (不匹配)

Ⅴ修饰语"~*"

不区分大小写的正则匹配,匹配项的内容必须是正则表达式

location ~* ^/Abc$ {
  proxy_pass http://192.168.1.100:6666;
}
  • http://localhost/abc (匹配)
  • http://localhost/abc/ (不匹配, 带有结尾的/)
  • http://localhost/abc?param1=1 (匹配,忽略参数)
  • http://localhost/Abc (匹配)
  • http://localhost/abce (不匹配)

Ⅵ修饰语"^~"

前缀匹配

location ^~ /abc {
  proxy_pass http://192.168.1.100:6666;
}

Ⅶ修饰语"@"

定义一个只能内部访问的 location 区域,可以被其他内部跳转指令使用,如 try_files 或 error_page。

location /index {
  error_page 404 @error;
}

location @error{ 
  proxy_pass http://error; 
}

表示以 /index 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer II 021. 删除链表的倒数第 n 个结点

题目链接 剑指 Offer II 021. 删除链表的倒数第 n 个结点 mid 题目描述 给定一个链表,删除链表的倒数第 n个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: …

MySQL的多表操作

多表关系 介绍 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、 订单表(orders)等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习…

DolphinDB 机器学习在物联网行业的应用:实时数据异常率预警

数据异常率预警在工业安全生产中是一项重要工作,对于监控生产过程的稳定性,保障生产数据的有效性,维护生产设备的可靠性具有重要意义。随着大数据技术在生产领域的深入应用,基于机器学习的智能预警已经成为各大生产企业进行生产数…

logback无法删除太久远的日志文件?logback删除日志文件源码分析

logback无法删除太久远的日志文件?logback删除日志文件源码分析 最近发现logback配置滚动日志,但是本地日志文件甚至还有2年前的日志文件,服务器是却是正常的! 网上搜索了一波没有发现,只找到说不能删除太久远的旧日志…

Leetcode. 21 合并两个有序列表

尾插 核心思路:依次比较 ,取经过比较后较小值进行尾插 cur1 指向list1 ,cur 2指向list2 ,当cur1走完list1 或者cur2 走完list2 后停止 如果cur1走完list1 ,可以将cur2 整个拿下来尾插 如果cur2走完list2 ,可以将cur1 整个拿下来尾插 特殊情况 &#xff1…

c# 32位程序突破2G内存限制

起因 在开发过程中,由于某些COM组件只能在32位程序下运行,程序不得不在X86平台下生成。而X86的32位程序默认内存大小被限制在2G。由于程序中可能存在大数量处理,期间对象若没有及时释放或则回收,内存占用达到了1.2G左右&#xff…

瀑布开发与敏捷开发的区别,以及从瀑布转型敏捷项目管理的5大注意事项

事实证明,瀑布开发管理模式并不适合所有的软件项目,但敏捷项目管理却对大多数项目有效。那么当团队选择转型敏捷的时候有哪些因素必须注意?敏捷开发最早使用者大多是小型、独立的团队,他们通常致力于小型、独立的项目。正是他们的…

Keepalive+LVS群集部署

KeepaliveLVS群集部署一、Keepalive概述1、什么是Keepalive2、Keepalive工作原理3、Keepalive主要模块及作用4、Keepalived 服务重要功能(1)管理 LVS 负载均衡软件(2)支持故障自动切换(3)实现 LVS 负载调度…

SpringBoot下的Spring框架学习(tedu)——day03——Spring DI、SpringAOP JDK动态代理

SpringBoot下的Spring框架学习(tedu)——day03——Spring DI、SpringAOP JDK动态代理 目录SpringBoot下的Spring框架学习(tedu)——day03——Spring DI、SpringAOP JDK动态代理1. Spring的依赖注入1.1 依赖注入案例1.1.1 定义接口…

Python的运算符

Python支持多种运算符,下表大致按照优先级从高到低的顺序列出了所有的运算符,运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符,我们稍后会陆续讲到其他运…

解决launch:program .exe does not exist

二. 程序的运行和调试 1.launch.json 复制下列代码至launch.json,并根据指导做出相对/绝对路径修改 用 IntelliSense 了解相关属性。 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.micros…

虹科教您 | 在Linux环境下安装PCAN View及通讯测试指南

应用简介 PCAN-View软件是一款简化的CAN监视软件,可用于显示、发送、和记录CAN数据通讯。报文可手动和定期发送,用户可设置比特率。在处理期间显示总线系统错误和CAN硬件的存储器过满。示踪功能可用于记录和保存CAN数据通讯。本文档的作用在于&#xff…

Python进阶-----面向对象8.0(反射---对象属性方法操作)

目录 前言: 反射 1.getattr() 函数 2.setattr() 函数 3.hasattr() 函数 4.delattr() 函数 前言: 众所周知,每一个实例化对象都是有实例化属性或者方法的,之前我们对实例化对象进行属性方法查询、删除或者添加都是直接去通过…

day27_css

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、CSS 零、 复习昨日 见代码 一 、引言 1.1CSS概念 ​ 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通…

MpAndroidChart3最强实践攻略

本篇主要总结下Android非常火爆的一个三方库MpAndroidChart的使用。可能在大多数情况下,我们很少会在Android端去开发图表。但如果说去做一些金融财经类、工厂类、大数据类等的app,那么绝对会用到MpAndroidChart。 一、前言 2018年,那年的我…

打包成JAR文件和WAR文件,到底有什么区别?

Spring Boot是一种基于Spring框架的快速开发应用程序的工具,可以轻松地构建可部署的独立应用程序。在使用Spring Boot时,你可能会注意到有两种不同的部署选项:打包成JAR文件和WAR文件。在这篇文章中,我们将深入探讨这两种部署选项…

Netty 简介

一、Netty 简介 Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程,但是你仍然可以使用底层的 API。 Netty 的内部实现是很复杂的,但…

Mysql常见的函数介绍

Mysql查询示例简介一、创建计算字段二、使用数据处理函数1. 文本处理函数2. 日期和时间处理函数3. 数值处理函数三、聚集函数总结简介 本篇博客中介绍了mysql查询时,常用的一些函数,融会贯通这些函数的使用,会对工作和学习有很大的帮助&#…

【软考中级信安】第四章--网络安全体系与网络安全模型

1.网络安全体系概述1.1 网络安全体系概念网络安全体系:是网络安全保障系统的最高层概念抽象,是由各种网络安全单元按照一定的规则组成的,共同实现网络安全的目标。1.2 网络安全体系特性整体性:网络安全单元按照一定规则&#xff0…

SequoiaDB分布式数据库2023.2月刊

本月看点速览 技术实力获认可,获评多项荣誉 共建人才生态,与深圳大学举办奖学金颁奖仪式 青杉计划2023持续进行,一起攀登更高的“杉” 技术实力获认可,获评多项荣誉 2月,21世纪创投研究院发布“21世纪(全…