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.xdnf.cn/news/19214.html

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

相关文章

停车场空位引导系统

随着城市化进程的加速和汽车保有量的持续增长,传统停车场面临着前所未有的压力。在这些停车场中,停车困难与寻找自己的停车位麻烦复杂已成为许多驾驶者日常出行的一大痛点。 一.传统停车场痛点 在传统停车场中,车位难找,停车场缺…

([LeetCode仓颉解题报告] 661. 图片平滑器

[LeetCode仓颉解题报告] 661. 图片平滑器 一、 题目1. 题目描述2. 原题链接 二、 解题报告1. 思路分析2. 复杂度分析3. 代码实现 三、 本题小结四、 参考链接 一、 题目 1. 题目描述 2. 原题链接 链接: 661. 图片平滑器 二、 解题报告 1. 思路分析 由于只需要3*39个格子&am…

SpringCloud多机部署,负载均衡-LoadBalance

一.负载均衡 1.1问题描述 //根据应用名称获取服务列表 List<ServiceInstance> instancesdiscoveryClient.getInstances("product-service"); //一个微服务可能有多个实例&#xff0c;获取第一个 EurekaServiceInstance instance(EurekaServiceInstance)insta…

基于Java Springboot甘肃旅游管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

软考-信息安全-网络安全体系与网络安全模型

4.1 网络安全体系概述 网络安全保障是一项复杂的系统工程&#xff0c;是安全策略&#xff0c;多种技术&#xff0c;管理方法和人员安全素质的综合。 4.1.1 网络安全体系概念 现代的网络安全问题变化莫测&#xff0c;要保障网络系统的安全&#xff0c;应当把相应的安全策略&a…

CSS基础选择器与div布局

基础选择器一 全局选择器 可以与任何元素匹配&#xff0c;优先级最低&#xff0c;不推荐使用 *{margin: 0;padding: 0;}元素选择器 HTML文档中的元素&#xff0c;p、b、div、a、img、body等。 标签选择器&#xff0c;选择的是页面上所有这种类型的标签&#xff0c;所以经常…

Python毕业设计选题:基于Spark的国漫推荐系统的设计与实现-django+spider

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统登录 管理员功能界面 漫画数据管理 看板界面 系统管理 摘要 系统的设计主要包括…

Linux 链式与层级中断控制器讲解:原理与驱动开发

往期内容 本专栏往期内容&#xff0c;interrtupr子系统&#xff1a; 深入解析Linux内核中断管理&#xff1a;从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…

“数字化”让党建更“智慧”:帆软塑造党建发展新动能

智慧党建是新时代党的建设的重要创新&#xff0c;它通过互联网、大数据、云计算和人工智能等现代信息技术&#xff0c;实现了党建工作的数字化、智能化。帆软公司的Fine产品线&#xff0c;包括FineDataLink、FineReport、FineVis和FineBI&#xff0c;提供了一个全面的大数据分析…

利用c语言详细介绍下冒泡排序

软件开发过程中&#xff0c;排序算法是常规且使用众多的方法之一&#xff0c;而冒泡算法又是排序算法中最常规且基本的算法。今天我们利用c语言&#xff0c;图文详细介绍下冒泡算法。 一、图文介绍 我们输入一个数组&#xff0c;数组为【10&#xff0c;5&#xff0c;3&#xf…

小程序-基于java+SpringBoot+Vue的实习生管理系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

全新升级抗性宏基因组,直击病毒和毒力因子分析!

基于宏基因组测序的抗性基因分析是目前抗性基因分析的重要手段。为了协助研究工作者对抗性基因开展更深入且全面的探研&#xff0c;凌恩生物技术团队致力于技术研发&#xff0c;推出了全新升级版的宏基因组抗性基因分析流程。此流程采用五大数据库进行详尽的注释分析&#xff0…

算法--“汽车加油”问题.

def greedy():n 100 # 汽车满油后可行驶的最大距离d [50, 80, 39, 60, 40, 32] # 加油站的距离k len(d) # 加油站的数量# 检查是否有加油站距离超过汽车的最大行驶距离for dist in d:if dist > n:print(no solution)returnnum 0 # 加油次数current_position 0 # 当…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的方法

目录 一、DMA基础知识 1、DMA简介 (1)DMA控制器 (2)DMA流 (3)DMA请求 (4)仲裁器 (5)DMA传输属性 2、源地址和目标地址 3、DMA传输模式 4、传输数据量的大小 5、数据宽度 6、地址指针递增 7、DMA工作模式 8、DMA流的优先级别 9、FIFO或直接模式 10、单次传输或突…

HTTP 缓存策略

文章目录 一、HTTP的缓存的过程是怎样的&#xff1f;二、什么时候触发强缓存或协商缓存强缓存ExpiresCache-Control 协商缓存 三、服务器如何判断资源是否新鲜Last-Modified/If-Modified-SinceETag/If-None-Match 四、整体缓存过程 一、HTTP的缓存的过程是怎样的&#xff1f; …

Leetcode234.回文链表(HOT100)

链接 代码&#xff1a; class Solution { public:bool isPalindrome(ListNode* head) {ListNode* slow head;ListNode* fast head;// while(slow&&fast){// slow slow->next;// fast fast->next;// if(fast)// {// fast fast->…

【Unity Dots之Ecs原理分析(无入门代码示例)】

Unity Ecs原理分析 前言一、ECS是什么&#xff1f;Entity是什么&#xff1f;Component是什么&#xff1f;System是什么&#xff1f;不得不提的Archetype为什么时16kb&#xff1f; 什么是Structural Change&#xff1f;ASpect有关ECS使用时的安全性Conversion World & Shado…

【pyspark学习从入门到精通14】MLlib_1

目录 包的概览 加载和转换数据 在前文中&#xff0c;我们学习了如何为建模准备数据。在本文中&#xff0c;我们将实际使用这些知识&#xff0c;使用 PySpark 的 MLlib 包构建一个分类模型。 MLlib 代表机器学习库。尽管 MLlib 现在处于维护模式&#xff0c;即它不再积极开发…

【大模型推理】all-reduce

https://andrew.gibiansky.com/blog/machine-learning/baidu-allreduce/#ref-4 1. ALL reduce , reduce, broadcast 概念 Introduction 在过去的几年中&#xff0c;神经网络已经被证明是解决各种问题的令人难以置信的有效工具&#xff0c;并且在规模和计算需求上都迅速增长。…

opencv(c++)---自带的卷积运算filter2D以及应用

opencv(c)—自带的卷积运算filter2D以及应用 #include <opencv2/opencv.hpp> #include<iostream>using namespace cv; using namespace std;int main() {Mat imgin, imgout;imgin imread("D:/1234.png");if (imgin.empty()){cout << "Could …