深入掌握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日

相关推荐

  • 什么是 PostgreSQL?一款开源数据库系统

    PostgreSQL 是一款开源的对象关系型数据库系统,能安全、稳定地应对各种复杂的数据处理需求。下面就为大家介绍PostgreSQL的基本概念、常见应用场景。 什么是 Postg…

    2026年4月23日
    0
  • WAF防火墙的作用

    随着WEB应用的广泛普及,WEB服务器凭借其强大的运算能力、处理性能以及所承载的较高价值,逐步成为主要的攻击目标。SQL注入、页面篡改、网页挂马等安全事件屡见不鲜。传统防火墙难以对…

    2026年6月5日
    0
  • 云主机快照有什么作用?

    伴随用户业务的推进,云主机磁盘数据持续发生变化,用户期望对某些关键时刻的数据进行备份,方便后续磁盘数据发生异常时,能够回退到备份时的状态,此时我们便可以借助云主机快照功能,实现数据…

    2026年6月13日
    0
  • 如何更新服务器CentOS版本?

    老版本系统一旦被官方”抛弃”,就再也收不到安全补丁了,如果继续使用这类过期系统,不法分子很容易利用系统漏洞发起攻击,轻则破坏服务器正常运行,重则窃取内部核心…

    2026年5月12日
    0
  • IPv4 与 IPv6 是什么? 带你一次搞懂 IP 地址差异

    随着网络设备、云端服务与 IoT 应用快速成长,全球连接设备的数量早已远远超过当初设计网络时的预期,也让 IPv4 地址不足成为无法忽视的现实问题。 从电脑、手机、企业官网、App…

    2026年3月28日
    0
  • 如何在Debian上安装NGINX

    Nginx是一款免费、开源、轻量级、高性能的web服务器,专为高流量的应用场景设计,也是Apache Web服务器和微软IIS之后的流行Web服务器。Nginx比Apache对资源…

    2026年5月11日
    0
  • 什么是僵尸网络?

    僵尸网络,作为一类极具破坏性的网络攻击手段,是指攻击者借助多台联网设备,在每台设备上植入并运行特定的机器人程序,进而操控这些被感染的设备,对服务器、公司网站、其他设备或个人发起攻击…

    2026年4月28日
    0
  • 拒绝服务攻击 DoS 与 DDoS 解析

    在网络安全领域,DoS 和 DDoS 是两类高频且危害显著的攻击方式,二者核心目的都是让目标网络或服务器无法正常提供服务,但攻击模式、破坏力和应对难度截然不同。 DoS,即拒绝服务…

    2026年5月18日
    0
  • Nginx与Apache的区别,谁是主流?

    NGINX 和 Apache 是目前最流行的两款 Web 服务器软件,都属于成熟的开源项目,为全球数百万网站提供支持。根据实际需求,两者都能帮助构建强大、可扩展、高性能的 Web …

    2026年4月9日
    0
  • 什么是服务器备份?有哪些好处?

    服务器备份,简单来说,就是主动为服务器或联网计算机系统里的关键数据创建副本的过程。这些副本我们称之为“备份”,通常会和原始数据分开存储。这样一来,即便原始数据因为硬件故障、人为操作…

    2026年4月22日
    0