当前位置: 首页 > news >正文

Nginx基础讲解

Nginx基础讲解

Nginx 是一款高性能的 HTTP 服务器和反向代理服务器,广泛用于负载均衡、静态资源托管、SSL 终端等场景。以下是对 Nginx 的详细讲解:

1. Nginx 核心概念​

​事件驱动架构​:基于异步非阻塞模型,高效处理高并发连接,资源占用低。
​模块化设计​:支持通过模块扩展功能(如 HTTP、Stream、gRPC 等)。
​反向代理​:接收客户端请求并转发至后端服务器,隐藏后端细节。
​负载均衡​:将流量分发到多个服务器,提升系统可用性和性能

2. 安装与配置

2.1 安装

  • ​Ubuntu/Debian​:
sudo apt update
sudo apt install nginx
  • ​CentOS/RHEL​:
sudo yum install epel-release
sudo yum install nginx
  • 源码编译​(定制化强):
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install

2.2 配置文件结构

主配置文件通常为 /etc/nginx/nginx.conf,结构如下:

# 全局配置
user nginx;
worker_processes auto;  # 工作进程数(建议设置为 CPU 核心数)

events {
    worker_connections 1024;  # 单个进程最大连接数
}
http {
    # HTTP 相关配置
    include /etc/nginx/mime.types;
    server {
        listen 80;
        server_name example.com;
        root /var/www/html;
        location / {
            index index.html;
        }
    }
}

3. 核心功能配置

3.1 静态文件服务

server {
    listen 80;
    server_name example.com;
    root /var/www/html;  # 静态文件根目录

    location / {
        try_files $uri $uri/ =404;  # 尝试按路径查找文件
    }

    location /images/ {
        alias /var/www/images/;  # 路径别名(替换匹配部分)
    }
}

3.2 反向代理

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;  # 转发到后端
        proxy_set_header Host $host;       # 传递原始 Host 头
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 定义后端服务器组
upstream backend_server {
    server 192.168.1.1:8080;
    server 192.168.1.2:8080;
}

3.3 负载均衡策略​

  • ​轮询(默认)​ ​:依次分发请求。
  • ​权重(weight) ​:按权重分配流量。
  • ​IP 哈希(ip_hash) :同一客户端 IP 固定到同一后端。
  • 最少连接(least_conn) ​:优先发给连接数最少的后端
upstream backend {
    ip_hash;
    server 192.168.1.1:8080 weight=2;  # 权重为2
    server 192.168.1.2:8080;
    server 192.168.1.3:8080 backup;    # 备用服务器
}

3.4 SSL/TLS 配置

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    # 安全增强配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        proxy_pass http://backend;
    }
}
# HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

4. 高级配置

4.1 URL 重写

location /old {
    rewrite ^/old/(.*) /new/$1 permanent;  # 301 重定向
}

# 条件重写(如移动端跳转)
if ($http_user_agent ~* "mobile") {
    rewrite ^(.*)$ /mobile/$1 break;
}

4.2 访问控制

location /admin {
    allow 192.168.1.0/24;
    deny all;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;  # 密码文件
}

4.3 跨域(CORS)​

location /api {
    add_header 'Access-Control-Allow-Origin' 'http://client.com';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
}

相关文章:

  • ros2-rviz2控制unity仿真的6关节机械臂,探索从仿真到实际应用的过程
  • 论文精度:HeightFormer:基于Transformer的体素高度预测在路边3D目标检测中的应用
  • flutter 桌面应用之右键菜单
  • 【Cursor 】Cursor 安装与配置指南:从零开始的高效开发之旅
  • QT6 源(16):存储 QT 里元对象的类信息的类 QMetaClassInfo 的类,只有两个成员函数 name()、value(),比元对象属性简单多了
  • 数据驱动,数字能量分析API助力手机号数据解读
  • RAG Fusion技术详解与应用场景
  • 趣味编程之Spring的白学之路
  • 二、Android Studio环境安装
  • [React] 如何用 Zustand 构建一个响应式 Enum Store?附 RTKQ 实战与 TS 架构落地
  • 波束形成(BF)从算法仿真到工程源码实现-第七节-关于波束10个基本概念
  • Jenkins 发送钉钉消息
  • 前端jest(vitest)单元测试快速手上
  • Redis基础知识:
  • 解释:指数加权移动平均(EWMA)
  • C++ 编程指南36 - 使用Pimpl模式实现稳定的ABI接口
  • 链接世界:计算机网络的核心与前沿
  • 使用SSH解决在IDEA中Push出现403的问题
  • 基于电子等排体的3D分子生成模型 ShEPhERD - 评测
  • 从代码学习深度学习 - 多头注意力 PyTorch 版
  • 浙江广厦:诚挚道歉,涉事责任人交公安机关
  • 山东茌平民企巨头实控人省外再出手:斥资16亿拿下山西一宗探矿权
  • 下辖各区密集“联手”,南京在下一盘什么样的棋?
  • 朝鲜称将在各领域采取反制措施,应对美国敌对挑衅
  • 浙江省委金融办原副主任潘广恩被“双开”
  • 气候多米诺:厄尔尼诺与东南亚跨境害虫或威胁中国粮食安全