Nginx 使用入门介绍

大家好,我是G探险者!

今天聊一聊nginx.

Nginx 是一款高性能的 Web 服务器、反向代理服务器以及负载均衡器。它因其轻量级、稳定性和高并发处理能力,在全球范围内得到了广泛应用。许多大型网站(如 Netflix、Dropbox 和 WordPress.com)都使用 Nginx 来处理请求。本篇文章将带你快速了解 Nginx 的基本使用方式,从安装到配置,帮助你开始使用这个强大的 Web 服务器。

什么是 Nginx?

Nginx(发音为 "Engine-X")是一款开源的 Web 服务器和反向代理服务器,最初由 Igor Sysoev 于 2004 年开发,旨在解决 C10K 问题(即同时处理 10000 个连接)。Nginx 的设计重点是高并发、高性能和低资源消耗,特别适用于静态内容的分发和反向代理服务。

Nginx 的常见用途

  • Web 服务器:Nginx 可以作为 HTTP 服务器提供静态文件服务。
  • 反向代理:它可以作为反向代理服务器,将请求转发到后端服务器(如 Apache、Tomcat、Node.js 等)。
  • 负载均衡:通过分配请求到多个服务器,Nginx 可以实现负载均衡,提高系统的扩展性和容错能力。
  • 缓存:Nginx 支持缓存静态内容和代理内容,减少对后端服务器的压力。

1. 安装 Nginx

在不同的操作系统上,安装 Nginx 的方式不同,以下是几个常见平台的安装步骤。

Linux(Ubuntu/Debian)

sudo apt update
sudo apt install nginx

安装完成后,可以通过以下命令启动 Nginx:

sudo systemctl start nginx

并使用以下命令确认 Nginx 是否在运行:

sudo systemctl status nginx

Windows

  1. 下载 Nginx 的 Windows 版本:Nginx 官方下载页。
  2. 解压下载的文件,将文件夹移动到一个你希望存放的目录。
  3. 双击 nginx.exe 启动 Nginx。

macOS

通过 Homebrew 安装 Nginx:

brew install nginx

安装完成后,可以使用以下命令启动 Nginx:

sudo nginx

2. Nginx 配置文件结构

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,它包含了多个配置块,每个块都有特定的作用。最常见的配置块有:

2.1 http 块

http 块包含了 Web 服务器的全局配置和对多个虚拟主机的配置。常见的配置项有 gzipserveraccess_log 等。

http {include       mime.types;default_type  application/octet-stream;server {listen 80;server_name localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}}
}

2.2 server 块

server 块用来定义虚拟主机,包含 listenserver_name 和 location 等指令。

server {listen 80;server_name example.com;  # 监听域名或IPlocation / {root /usr/share/nginx/html;  # 静态文件目录index index.html index.htm;  # 默认首页}
}

2.3 location 块

location 块用来定义如何处理特定的请求路径。你可以在 server 块中根据请求的 URI 进行细分处理。

location /images/ {root /var/www;  # 指定文件根目录
}location /api/ {proxy_pass http://backend_server;  # 将请求代理到后端服务器
}

3. 配置静态文件服务

Nginx 作为 Web 服务器时,最常见的用途之一是提供静态文件服务(如 HTML、CSS、JS 文件等)。以下是一个基础的 Nginx 配置示例,用于提供静态文件服务:

server {listen 80;server_name example.com;location / {root /var/www/html;  # 静态文件根目录index index.html index.htm;  # 默认首页}
}

这段配置表示,当访问 http://example.com 时,Nginx 会从 /var/www/html 目录提供文件,并将 index.html 文件作为默认首页。

4. 配置反向代理

Nginx 作为反向代理服务器,将客户端请求转发到后端的应用服务器(如 Node.js、Java、PHP、Python 等)。这是 Nginx 作为负载均衡器或 API 网关使用的常见场景。

以下是一个将请求代理到后台应用服务器的配置示例:

server {listen 80;server_name api.example.com;location / {proxy_pass http://backend_server;  # 将请求转发到后台服务器proxy_set_header Host $host;  # 设置原始 Host 头proxy_set_header X-Real-IP $remote_addr;  # 转发客户端 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发代理链}
}

5. 配置负载均衡

Nginx 还可以用作负载均衡器,将请求分发到多台服务器上,提高系统的可用性和扩展性。以下是一个负载均衡的配置示例:

http {upstream backend {server backend1.example.com;server backend2.example.com;}server {listen 80;location / {proxy_pass http://backend;  # 请求转发到 upstream 定义的服务器组}}
}

6. 测试和重载配置

每当你修改 Nginx 配置文件时,都应该测试配置文件是否正确,并重载 Nginx 使新配置生效。

测试配置

nginx -t

重载配置

sudo systemctl reload nginx

7. 常见问题与调试

  • Nginx 配置错误:如果配置文件中有错误,Nginx 会拒绝启动。可以使用 nginx -t 命令检查配置文件的语法错误。
  • Nginx 服务无法启动:检查日志文件 /var/log/nginx/error.log 以了解错误信息。

8.拓展

特性/技术NginxApache HTTP ServerF5 BIG-IPHAProxyTraefikCaddyLiteSpeedEnvoySquid华为云 CCE ELB
类型Web 服务器/反向代理Web 服务器/反向代理硬件负载均衡器/反向代理负载均衡器/反向代理反向代理/负载均衡器Web 服务器Web 服务器反向代理/负载均衡器代理服务器云负载均衡服务 (ELB)
开源否(商业服务)
负载均衡支持支持 (但通常与 mod_proxy 配合使用)强大(硬件支持)强大支持(动态路由)不支持支持强大部分支持强大(支持自动扩展)
性能高性能中等极高(硬件加速)极高高(适合微服务架构)高(适合小型站点)高(高效的 HTTP/2 支持)极高中等高(高可用、低延迟)
支持 HTTP/2
SSL 支持是(需要手动配置)是(需要配置)是(硬件加速)是(自动化)是(自动化配置)是(内建支持)是(自动化管理)
易于配置简单(较为直接的配置)较复杂复杂(需要硬件设备配置)简单(基于配置文件)简单(基于 API)非常简单(自动化)中等(基于 GUI 和 CLI)简单(基于配置文件)较复杂非常简单(基于 GUI)
动态路由支持是(硬件控制)支持(自动路由调整)
容器/微服务支持支持(与 Kubernetes 配合)支持 (需与其他工具配合使用)不适合支持(与 Docker 配合)强大(本地支持 Docker 和 Kubernetes)支持(专为微服务设计)支持强大(专为微服务设计)不支持强大(支持 Kubernetes)
高可用性支持支持极强支持支持不支持强大极强支持支持(自动故障转移)
流量控制支持支持强大支持强大(内建控制与监控)支持(基础流量管理)强大强大支持强大(流量管理与监控)
社区支持弱(商业支持)强(特别适合 DevOps 和容器环境)中等(适合小型站点)高(华为云官方支持)

随着云计算的普及,越来越多的企业开始使用云负载均衡服务(如华为云 CCE ELB)来管理其应用流量。相较于传统的负载均衡技术(如 Nginx、HAProxy 和 F5 BIG-IP),华为云 CCE ELB 提供了更高的自动化、灵活性和与云环境的深度集成,适用于大规模分布式应用,尤其是容器化和微服务架构的应用场景。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch 重建索引 数据迁移

Elasticsearch 重建索引 数据迁移 处理流程创建临时索引数据迁移重建索引写在最后 大家都知道,es的索引创建完成之后就不可以再修改了,包括你想更改字段属性或者是分词方式等。那么随着业务数据量的发展,可能会出现需要修改索引,或…

vue3 路由写法及传参方式 !超详细

Vue Router 是 Vue.js 官方的路由管理器。它主要用于单页面应用程序(SPA, Single Page Application)中,帮助解决页面导航、组件复用等问题。 基本的使用 1.router配置文件代码 创建一个ts文件,用来写路由器 // 创建一个路由器,并暴露出去 …

有限状态机(续)

一、添加刀光和场景 1、资源链接: 武器刀光:https://assetstore.unity.com/packages/tools/particles-effects/melee-weapon-trail-1728 场景:https://assetstore.unity.com/packages/3d/environments/fantasy/casual-tiny-environment-ju…

内网安全隧道搭建-ngrok-frp-nps-sapp

1.ngrok 建立内网主机与公网跳板机的连接: 内网主机为客户机: 下载客户端执行 2.frp

模电数电,融会贯通

模电与数电在传统电子工程中似乎被划分为两大领域,然而,它们实际上是对同一器件的不同应用方法。这种观念有助于我们理解元器件在各种工作状态下的多样性,并在复杂的电路设计中实现更高效的系统集成。 一、三极管的多重身份:放大…

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…

Java——并发工具类库线程安全问题

摘要 本文探讨了Java并发工具类库中的线程安全问题,特别是ThreadLocal导致的用户信息错乱异常场景。文章通过一个Spring Boot Web应用程序示例,展示了在Tomcat线程池环境下,ThreadLocal如何因线程重用而导致异常,并讨论了其他并发…

PostgreSQL技术内幕18:物理备份工具pg_basebackup

0.简介 PG自带备份工具有多种,pg_basebackup、pg_dump、pg_dumpall,其中pg_basebackup是文件系统级别的备份,其余两种是逻辑备份。本文主要介绍PG备份工具产生的背景和概念,以及对pg_basebackup使用方法和其实现原理进行详细说明…

基于Python实现的HDR图像处理算法

此代码会读取两张图片,一张用于保留高光细节,另一张用于保留暗部细节。两张图片按指定比例进行像素融合,最终生成一张合成的HDR图片。 import cv2 import numpy as npdef hdr_fusion(highlight_img_path, shadow_img_path, output_path, alp…

计算机网络-理论部分(二):应用层

网络应用体系结构 Client-Server客户-服务器体系结构:如Web,FTP,Telnet等Peer-Peer:点对点P2P结构,如BitTorrent 应用层协议定义了: 交换的报文类型,请求or响应报文类型的语法字段的含义如何…

【JavaEE初阶 — 多线程】wait() notify()

1. 协调多个线程之间的执行先后顺序的方法介绍 由于线程之间是抢占式执行的,因此线程之间执行的先后顺序难以预知;但是实际开发中,有时候我们希望合理地协调多个线程之间的执行先后顺序。 拓展: wait() 和 sleep() 的区别 …

Vscode/Code-server无网环境安装通义灵码

Date: 2024-11-18 参考材料:https://help.aliyun.com/zh/lingma/user-guide/individual-edition-login-tongyi-lingma?spma2c4g.11186623.0.i0 1. 首先在vscode/code-server插件市场中安装通义插件,这步就不细说了。如果服务器没网,会问你要…

Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在共享经济…

美赛优秀论文阅读--2023C题

文章目录 1.题目说明2.我对于这个题目信息的理解3.优秀论文学习3.1摘要3.2相关的算法模型 4.总结 1.题目说明 今天阅读的这个文章来自于这个2023年的这个美赛的这个C题的论文; 我们的这个题目可以到网上去找,这个还是比较容易找到的,大致就…

ChromeDriver驱动下载地址更新(保持最新最全)

说明: ChromeDriver 是 Selenium WebDriver 用于控制 Chrome 的独立可执行文件。 为了方便下载使用,本文保持ChromeDriver的最新版本更新,并提供115.0.5763.0-133.0.6841.0版本的下载地址: 所有版本和下载地址: &am…

delphi fmx android 离线人脸识别

搜遍全网都没有找到delphi android 能用的 离线人脸识别,无需注册什么开发者 有这方面需求的可以用fsdk 这边用的luxand.FSDK8.0 android下的注册号要自己找下 1,用老猫的工具将android 下的sdk,FSDK.java 编译成FSDK.jar 老猫的工具 2,用上面的工具将FSDK.jar 生成de…

【模块一】kubernetes容器编排进阶实战资源对象之Configmap与Secret简介

kubernetes 资源对象详解及示例 kubernetes 的几个重要概念 资源对象:kubernetes基于声明式API,和资源对象进行交互。 yaml文件:为了方便后期管理,通过使用yaml文件通过API管理资源对象。 yaml必需字段: apiVersio…

游戏引擎学习第14天

视频参考:https://www.bilibili.com/video/BV1iNUeYEEj4/ 1. 为什么关注内存管理? 内存分配是潜在的失败点: 每次进行内存分配(malloc、new等)时,都可能失败(例如内存不足)。这种失败会引入不稳…

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西,主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数(或 alloca)分配的是栈内存,它的特点是: 生命周…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令: 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时,项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中,…