深入掌握Nginx服务器

本文介绍nginx服务器及其主要特性,首先给出了包管理器安装及编译安装两种方式,然后重点对 nginx 配置文件中的指令及参数进行详细说明,在了解 nginx 的工作方式后,从 nginx 实现请求访问控制 (IP、带宽、连接数限制及参数校验)、反向代理、跨域请求、负载均衡策略 (轮询、权重、IP 哈希、最少连接数)、缓存方式及配置SSL证书提供Https访问方面进行详细说明。

Nginx 简介

Nginx(发音engine x)是一个高性能的 HTTP 和反向代理服务器、IMAP/POP3代理服务器、邮件代理服务器和通用的TCP/UDP代理服务器,最初由俄罗斯工程师伊戈尔・西索耶夫(Igor Sysoev)用 C 语言开发,2004 年公开发布,2011 年成立 nginx 公司,提供相应支持及其付费软件 nginx plus。

nginx 主要特性

  • 高并发连接处理能力:事件驱动和非阻塞 I/O,内存占用低,支持多进程,可处理数万至数十万并发连接。
  • 高效率处理静态网页:通过文件缓存、内存读取,快速响应图像、CSS、HTML 等静态内容。
  • 强大的反向代理:接收客户端请求,转发至后端服务器并返回结果,客户端无感知,可缓存请求。
  • 多种负载均衡策略:支持轮询、权重、IP 哈希、最少连接数等算法,合理分配后端集群流量。
  • 请求过滤和正则匹配:支持 gzip 压缩、字节限制、图像转换;支持请求路径正则匹配。
  • 灵活的访问控制:校验客户端 IP、限制连接数与速率、记录访问日志。
  • SSL/TLS 协议支持:保障通信加密安全;HTTPS 基于 SSL/TLS 加密传输,防窃取与篡改。

通过包管理器安装 nginx

以 Ubuntu 20 为例,使用apt/apt-get安装,简便快捷,但版本可能滞后、自定义有限。
# 安装nginx
sudo apt install nginx

# 启动/查看状态/重新加载配置
systemctl start nginx
systemctl status nginx
systemctl reload nginx

# 查看版本
nginx -v

查看 nginx 信息

# 查看已安装nginx包
apt list --installed | grep nginx

# 查看路径
whereis nginx
which nginx

# 查看系统环境变量
cat /etc/environment
默认配置文件:/etc/nginx/nginx.conf

编译安装 nginx

可自定义模块、使用最新版、优化性能,但步骤复杂、需自行处理依赖。
官方下载:nginx: download
nginx-1.26.1在 Ubuntu 20 编译安装为例:

1. 下载并解压

tar -vxf nginx-1.26.1.tar.gz
cd nginx-1.26.1 && ls

2. 安装依赖

sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install zlib1g zlib1g-dev
sudo apt-get install libssl-dev

3. 配置 nginx

sudo ./configure
常见自定义配置:
sudo ./configure \
    --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/nginx.conf \
    --pid-path=/usr/local/nginx/nginx.pid \
    --with-http_ssl_module

4. 编译与安装

sudo make
sudo make install

5. 启动 nginx

sudo /usr/local/nginx/nginx
curl localhost

Nginx 管理命令

nginx -s stop    # 快速关闭
nginx -s quit    # 优雅关闭(处理完请求)
nginx -s reload  # 重新加载配置
ps -ax | grep nginx  # 查看进程
sudo kill -s quit <主进程ID>  # 关闭

nginx 配置文件

配置由简单指令(空格分隔、分号结尾)和块指令(大括号包裹)组成,#为注释。

典型 nginx.conf 结构

nginx
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

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

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

请求访问控制

IP 限制

nginx
location /admin {
    allow 192.168.58.0/24;
    deny all;
}

路径重写与参数校验

nginx
location /protected {
    if ($arg_token != "123") {
        return 403;
    }
    rewrite ^/protected/1$ /protected/index.html last;
}

请求限流

nginx
limit_req_zone binary_remote_addr zone=resource_one:10m rate=1r/s;
limit_conn_zone binary_remote_addr zone=resource_addr:10m;

server {
    listen 8000;
    server_name localhost;

    location /resources {
        limit_rate 10k;
        limit_req zone=resource_one burst=5 nodelay;
        limit_conn resource_addr 1;
        root /var/www;
        index index.html;
    }
}

反向代理

nginx
location /api {
    proxy_pass http://192.168.58.59:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

跨域请求配置

nginx
server {
    listen 8000;
    server_name localhost;

    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Credentials true;
    add_header Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS";
    add_header Access-Control-Allow-Headers "Origin,X-Requested-With,Content-Type,Accept";

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

负载均衡策略

nginx
upstream backend {
    server 192.168.58.59:8080;
    server 192.168.58.60:8080;
    # 轮询(默认)
    # 权重:server ... weight=2;
    # IP哈希:ip_hash;
    # 最少连接:least_conn;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

反向代理缓存

nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=app_cache:10m max_size=1g inactive=30m use_temp_path=off;

server {
    listen 8000;
    location /api {
        proxy_cache app_cache;
        proxy_cache_valid 200 302 304 15m;
        proxy_cache_valid 404 1m;
        proxy_pass http://192.168.58.59:8080;
    }
}

配置 SSL 证书支持 HTTPS

1. 生成自签名证书(测试用)

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt

2. HTTPS 配置

nginx
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name devp.com www.devp.com;

    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers HIGH:!aNULL:!MD5;

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

3. 验证

nginx -t
nginx -s reload
curl -k https://devp.com

参考资料

nginx 官方文档

原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/2631.html

Like (1)
Previous 2026年5月7日 上午11:33
Next 2026年5月8日

相关推荐

  • 别再堆参数了!能帮企业赚钱的 AI,才是好 AI

    当下AI行业深陷无效内卷:行业扎堆堆砌超大参数、刷新跑分数据,演示效果愈发精美,却普遍落地乏力。大厂竞速万亿级大模型,中小厂商跟风复刻通用AI产品,赛道同质化严重。大量算力、资金、…

    2026年7月3日
    0
  • SQL Server 性能调优如何做?

    SQL 服务器性能调优,本质上是寻找更高效的方式处理相同工作负载。本文将详细探讨 SQL 性能调优的定义、必要性,以及可落地的方法。 什么是 SQL Server 性能调优? SQ…

    2026年4月24日
    0
  • CC攻击和DDoS攻击有什么不一样?

    互联网企业时常会遭受网络攻击,其中最为普遍的攻击手段就是CC攻击和DDoS攻击这两种,那么,什么是CC攻击,什么又是DDoS攻击,这两者的攻击原理是什么,两者的差异又是什么?其实弄…

    2026年6月4日
    0
  • 理解带宽、延迟和流量

    在线观看电影、参加视频通话或部署云应用时,有三个无形因素决定了体验的流畅程度:带宽、延迟和流量。这些术语经常被混淆,但它们描述的是网络性能的不同方面。 带宽:定义与实际意义 带宽定…

    2026年4月17日
    0
  • 网站建设如何做好安全防护?

    站点安全是站点运转基础,眼下不少公司搭建站点时都会用到开源程序,这类程序的优势在于部署迅速、上手门槛低,但短板同样突出——安全性很难有保证,一旦被黑,前期工作很可能归零。那么在建站…

    2026年6月16日
    0
  • 独立服务器防护规则自定义:针对业务特征放行合法访客拦截恶意流量

    在企业级服务器运维的实战场景中,很多团队陷入了“安全工具堆得越多,误拦截问题越严重”的怪圈:花了高额成本采购的安全产品,经常把正常的客户访问、爬虫合作流量当成恶意请求直接封禁,反而…

    2026年8月28日
    0
  • Linux 中的删除目录:rm 和 rmdir 解析

    在 Linux 中,需要删除目录文件时靠两个命令就能完成:rm 和 rmdir。乍一看它们相似,但行为却截然不同,如使用错误的命令,可能会删除远超预期的内容。 Linux rm 和…

    2026年3月30日
    0
  • CC攻击的原理及表现

    CC攻击又可以被称为Challenge Collapsar攻击,是一种十分常见的分布式拒绝服务攻击方式,CC攻击的工作原理是在与攻击者通过控制一系列主机,不间断的向目标服务器发送大…

    2026年6月24日
    0
  • 【余初云】云等保等级安全建设

    云计算等级保护是整个等保2.0的组成部分,它与等级保护的”通用”部分构成一个整体,来规范云计算的等级保护建设,为云计算平台网络安全建设设定基线。一方面做好物…

    2026年6月18日
    0
  • 什么是DevOps 安全?

    DevOps 安全是一个结合三个领域的理念:开发、运维和安全。其目标是消除软件开发和IT 运维之间可能存在的任何障碍。 随着代码的编写和应用程序的发展,团队之间持续沟通和协作的价值…

    2026年5月8日
    0