一文了解和使用nginx(附带图文)

news2024/11/15 5:05:58

前言

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱

一文了解和使用nginx

    • 一. nginx 简介
      • 1.1 什么是 nginx 和可以做什么事情
      • 1.2 正向代理
      • 1.3 反向代理
      • 1.4 负载均衡
      • 1.5 SSL 配置
      • 1.6 管理虚拟主机
      • 1.7 日志和监控
    • 二. Nginx 的安装
    • 三. Nginx 的常用命令和配置文件
      • 3.1 Nginx 的常用命令
      • 3.2 nginx.conf 配置文件
    • 四. Nginx 配置实例 反向代理
      • 4.1 准备工作
      • 4.2 反向代理1
      • 4.3 反向代理实例 2

一. nginx 简介

Nginx 是高性能HTTP反向代理的服务器,它广泛用于构建现代Web应用和提供网络服务,特点是占有内存少处理高并发能力是十分强大的

1.1 什么是 nginx 和可以做什么事情

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php等。但是不支持 java。Java 程序可以通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。https://lnmp.org/nginx.html

1.2 正向代理

需要在客户端配置代理服务器进行指定网站访问

Nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。

正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

在这里插入图片描述

1.3 反向代理

暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址
在这里插入图片描述

server {
    listen 80;
    server_name myapp.com; # 代理服务器名称

    location / {
        proxy_pass http://backend_server;  # 被代理的后端服务
    }
}

1.4 负载均衡

负载均衡(Load Balancing)是计算机网络和服务器领域中的一项重要技术,它用于分发网络流量、请求或工作负载到多个服务器或资源上,以确保系统的高可用性、性能优化和故障容忍性。负载均衡的主要目的是在多个服务器之间均匀分配工作负载,以避免某台服务器过载,而其他服务器资源闲置不用

Nginx是一个流行的开源反向代理服务器和Web服务器,它提供了多种分配方式(策略)来实现负载均衡。以下是Nginx支持的一些常见的负载均衡策略:

  1. 第一种 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
  2. 第二种 weight
    weight 代表权重默认为 1,权重越高,被分配的客户端越多。
    weight 和访问比率成正比,用于后端服务器性能不均的情况。
    例如:
upstream server_pool{ 
	server 192.168.5.21 weight=10; 
	server 192.168.5.22 weight=10; 
}
  1. 第三种 ip_hash
    每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
upstream server_pool{ 
	ip_hash; 
	server 192.168.5.21:80; 
	server 192.168.5.22:80; 
}
  1. 第四种 fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{ 
	server 192.168.5.21:80; 
	server 192.168.5.22:80; 
	fair; 
}

配置示例:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

server {
    listen 80;
    server_name myapp.com;

    location / {
      }
}

为什么使用负载均衡:

客户端发送多个请求服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?
上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个动静分离

1.5 SSL 配置

为了加强安全性,您可以为您的网站配置SSL。以下是一个简单的SSL配置示例:

server {
    listen 443 ssl;
    server_name secure.example.com;

    ssl_certificate /etc/nginx/ssl/secure.crt;
    ssl_certificate_key /etc/nginx/ssl/secure.key;

    location / {
        root /var/www/secure;
        index index.html;
    }
}

1.6 管理虚拟主机

虚拟主机允许您在同一台服务器上托管多个网站。在配置文件中添加以下内容以创建一个虚拟主机:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        root /var/www/example;
        index index.html;
    }
}

1.7 日志和监控

Nginx生成访问日志和错误日志,这对于监控和故障排除非常有用。您可以在配置文件中指定日志文件的位置和格式:

error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;

此外,您可以使用第三方工具如Nginx Amplify来监控Nginx性能和健康。

二. Nginx 的安装

在 linux 系统中安装 nginx

(1)安装 pcre 依赖
联网下载 pcre 压缩文件依赖

wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

解压压缩文件 tar –xvf pcre-8.37.tar.gz
./configure 完成后,回到 pcre 目录下执行 make,最后执行 make install

在这里插入图片描述

查看pcre版本 pcre-config --version

(2)安装 openssl 、zlib 、 gcc 依赖

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

在这里插入图片描述

(3)安装 nginx

  1. 使用命令安装

下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz

wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2

在这里插入图片描述

  1. 进入解压目录 ./configure
  2. make && make install
  3. 进入目录 /usr/local/nginx/sbin 启动服务 ./nginx

在这里插入图片描述

在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题
(1)关闭防火墙
(2)开放访问的端口号,80 端口

查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http –permanent
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload

三. Nginx 的常用命令和配置文件

3.1 Nginx 的常用命令

进入nginx目录中  cd /usr/local/nginx/sbin
查看nginx版本号  ./nginx -v 
启动            ./nginx
停止            ./nginx -s stop
重新加载         ./nginx -s reload

3.2 nginx.conf 配置文件

nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件nginx.conf 也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改。

cd /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的内容如下:

配置文件中包含三部分内容
(1)全局块:配置服务器整体运行的配置指令

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等

比如 worker_processes 1; 处理并发数的配置

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约

(2)events 块:影响 Nginx 服务器与用户的网络连接
比如 worker_connections 1024; 支持的最大连接数为 1024

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

(3)http块还包含两部分:

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块

  1. http 全局块
    http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
  2. server 块
    这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本
    每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
    而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块
  3. 全局 server 块
    最常见的配置是本虚拟机主机的监听配置本虚拟主机的名称或 IP 配置
  4. location 块
    一个 server 块可以配置多个 location 块。
    这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

四. Nginx 配置实例 反向代理

4.1 准备工作

下载地址 : https://tomcat.apache.org/download-80.cgi

在这里插入图片描述

# 在 liunx 系统安装 tomcat,使用默认端口 8080
wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.95/bin/apache-tomcat-8.5.95.tar.gz

tar -zxvf apache-tomcat-8.5.95.tar.gz

cd apache-tomcat-8.5.95/bin/
# 进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器
./startup.sh 

linux中访问
在这里插入图片描述

对外开放访问的端口

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd –reload

查看已经开放的端口号

firewall-cmd --list-all

(3)在 windows 系统中通过浏览器访问 tomcat 服务器
在这里插入图片描述

4.2 反向代理1

  1. 实现效果:
    打开浏览器,在浏览器地址栏输入地址 www.chen.com,跳转到 liunx 系统 tomcat 主页
    在这里插入图片描述

  2. 具体配置
    (1)进入C:\Windows\System32\drivers\etc, 在 windows 系统的 hosts 文件进行域名和 ip 对应关系的配置

在最底下配置: 192.168.248.128 chen.123.com

在这里插入图片描述
(2) 在 nginx 进行请求转发的配置(反向代理配置)

    server {
      listen 80;
      server_name chen.123.com;
      location / {
        proxy_pass http://127.0.0.1:8080;
        index index.html;
      }
    }
  1. 最终测试
    在本地主机上通过域名http://chen.123.com/ 访问

在这里插入图片描述

4.3 反向代理实例 2

  1. 实现效果
    使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中

nginx 监听端口为 9001
访问 http://chen.123.com:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http://chen.123.com:9001/vod/ 直接跳转到 127.0.0.1:8081

  1. 准备工作
    (1)准备两个 tomcat 服务器,一个 8080 端口,一个 8081 端口
    (2)创建文件夹和测试页面
  2. 具体配置
    (1)找到 nginx 配置文件,进行反向代理配置
    在这里插入图片描述

注意:代理服务http后面要加上/

(2)开放对外访问的端口号 9001 8080 8081

  1. 最终测试
    访问:
    http://chen.123.com:9001/edu/
    http://chen.123.com:9001/vod/
    在这里插入图片描述

在这里插入图片描述

作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。

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

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

相关文章

Galaxy生信云平台|Maftools高效地汇总、分析、注释和可视化肿瘤基因突变MAF文件...

2023-10-25,Galaxy中国镜像站 UseGalaxy.cn 平台新增 5 个工具。 MAF Tools Maftools-突变景观图: 绘制肿瘤基因突变景观图Maftools-突变汇总: 汇总MAF文件中的突变信息Maftools-共突变与互斥突变: 计算共突变和互斥突变Maftools-队列比较:比较两个队列之…

用VSCODE启动Java项目

下载插件 推荐下载插件 启动 在vscode中打开项目或将项目拖进vscode,等进度条加载完成即成启动项目

Redis快速上手篇(四)(Spring Cache,缓存配置)(注解方式)

Spring Cache 从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的 使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。 使用Spring Cache需要我们做两方面…

NSS [SWPUCTF 2022 新生赛]numgame

NSS [SWPUCTF 2022 新生赛]numgame 开题有一个数学表达式,试了一下不可能/-到正确的答案。 view-source:查看源码 解码之后是一个路由/NsScTf.php,访问一下得到了真正的源码。 访问一下/hint2.php call_user_func():把第一个参数作为回调函数…

C/C++不及格学生 2020年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C不及格学生 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C不及格学生 2020年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给出一名学生的语文和数学成绩,判断他是…

代码随想录二刷 Day50

198.打家劫舍 这个题一开始由于给出来的例子陷入了思维误区&#xff0c;以为结果就是每隔一个取一个&#xff0c;其实有可能中间隔很多个。比如一下这个例子 下面这种写法不对。 class Solution { public:int rob(vector<int>& nums) {int odd_sum 0;int even_su…

10月最新H5自适应樱花导航网站源码SEO增强版

10月最新H5自适应樱花导航网源码SEO增强版。非常强大的导航网站亮点就是对SEO优化比较好。 开发时PHP版本&#xff1a;7.3开发时MySQL版本&#xff1a;5.7.26 懂前端和PHP技术想更改前端页面的可以看&#xff1a;网站的前端页面不好看&#xff0c;你可以查看index目录&#x…

“人类高质量数据”如何训练计算机视觉模型?

人类的视觉系统可以复制吗&#xff1f; 答案是肯定的。 计算机视觉 (Computer Vision) 技术的不断普及&#xff0c;让机器识别和处理图像就像人的大脑一样&#xff0c;且速度更快、更准确。 机器像人类一样去“思考” 计算机视觉 (Computer Vision) 是近年来人工智能增长最快…

Linux网络编程:IP协议

目录 一. IP协议的功能 二. IP协议报头 2.1 IP报头的格式 2.2 IP报头各部分含义 三. IP报文的分片问题 3.1 什么是分片 3.2 分片的原理 3.3 合并报文 四. 网段划分 4.1 网络号和主机号 4.2 网络号和主机号的划分策略 4.3 特殊的IP地址 4.4 IP地址数量不足问题 五.…

最新SQL注入漏洞修复建议

点击星标&#xff0c;即时接收最新推文 本文选自《web安全攻防渗透测试实战指南&#xff08;第2版&#xff09;》 点击图片五折购书 SQL注入漏洞修复建议 常用的SQL注入漏洞的修复方法有两种。 1&#xff0e;过滤危险字符 多数CMS都采用过滤危险字符的方式&#xff0c;例如&…

Kotlin中使用ViewBinding绑定控件并添加点击事件

文章目录 效果1、加入依赖2、与控件进行绑定在 Activity 中使用视图绑定 3、监听控件 效果 实现源码 class MainActivity : AppCompatActivity() {lateinit var binding:ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstan…

[GXYCTF2019]Ping Ping Ping 1

题目环境 给了一个ip参数 注意题目Ping Ping Ping 意思就是让我们进行Ping地址 随便输入一个地址Ping一下 URL?ip0 有回显结果&#xff0c;和上题类似 [ACTF2020 新生赛]Exec 1-CSDN博客 查看当前目录文件URL?ip0;ls&#xff08;这里使用堆叠注入查询&#xff09;直接给出了咱…

第10期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

原来服务器这么有用-Docker安装

原来服务器这么有用-Docker安装 1. 前言 在此之前青阳通过各种方式介绍过自己通过服务器搭建的一些玩法&#xff0c;也写过一些教程&#xff0c;但是那些教程&#xff0c;现在回头来看&#xff0c;都是有些杂乱了&#xff0c;统一性不强。我就准备重新整理一下之前写的文章&a…

基于单片机16位智能抢答器设计

**单片机设计介绍&#xff0c;1645【毕设课设】基于单片机16位智能抢答器设计&#xff08;裁判功能、LCD数码管显示&#xff09;汇编 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序程序文档 六、 文章目录 一 概要 基于单片机16位智能抢答器设计&#x…

Go学习第八章——面向“对象”编程(入门——结构体与方法)

Go面向“对象”编程&#xff08;入门——结构体与方法&#xff09; 1 结构体1.1 快速入门1.2 内存解析1.3 创建结构体四种方法1.4 注意事项和使用细节 2 方法2.1 方法的声明和调用2.2 快速入门案例2.3 调用机制和传参原理2.4 注意事项和细节2.5 方法和函数区别 3 工厂模式 Gola…

【C++】初阶模板

泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left right;right temp; } void Swap(char& left, c…

【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;ArrayList和LinkedList有…

I/O控制方式(程序直接控制方式,中断驱动方式,DMA方式,通道控制方式)

文章目录 1.程序直接控制方式1.完成一次读/写操作的流程&#xff08;以读操作为例)2.CPU干预的频率3.数据传送的单位4.数据的流向5.主要缺点和优点 2.中断驱动方式1.注意2.CPU千预的频率3.数据传送的单位4.数据的流向5.主要缺点和主要优点 3.DMA方式1. 主要特点2.DMA控制器3.CP…

C++(Qt)软件调试---线程死锁调试(15)

C(Qt)软件调试—线程死锁调试&#xff08;15&#xff09; 文章目录 C(Qt)软件调试---线程死锁调试&#xff08;15&#xff09;1、前言2、常见死锁3、linux下gdb调试C死锁1.1 使用代码1.2 gdb调试 3、linux下gdb调试Qt死锁1.1 使用代码1.2 gdb调试 4、Windows下gdb调试C死锁5、W…