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

相关推荐

  • 云服务器ecs是什么?

    云服务器ECS是一种弹性可伸缩的计算服务,能够助力您降低IT整体成本、提升运维工作效率,让您得以更加专注于核心业务的创新发展。它免除了您在采购IT硬件设施方面所需投入的前期准备工作…

    2026年7月16日
    0
  • 站点为什么要安装SSL证书?

    大数据时代互联网发展迅速,给我们的生活带来便利的同时,也伴随着很多网络钓鱼、信息泄露、网络诈骗等事件的频繁发生,互联网就像一张巨型的蜘蛛网,汇聚和扩散各种各样的信息,而网站在当中就…

    2026年4月25日
    0
  • DDoS攻击是什么?如何进行DDoS防御防护?攻击原理手法详解

    什么是DDoS攻击?企业应如何加强针对DDoS攻击的防范?五大关键方向:建立分析与检测机制、多层架构、负载均衡处理、使用DDoS防护服务以及制定应急措施,都是必不可少的! 什么是D…

    2026年4月2日
    0
  • 云计算核心技术:准虚拟化是什么意思?

    虚拟化是驱动全球数字基础设施的核心理念和技术。从虚拟桌面到云端虚拟机,虚拟化最大化了物理硬件和软件资源的利用率,惠及众多行业。 准虚拟化是虚拟化的一种形式,许多专家认为它是该技术中…

    2026年4月29日
    0
  • Linux环境下日志审计深度配置指南——以Rocky Linux 8为例

    网络安全法规定,日志留存必须大于6个月,这个我们之前也讨论过,除了采购部署专门的日志记录设备之外,还可以尝试自己建设日志集中统一管理的日志服务器。 但是,不能忽略一个问题是,只是留…

    2026年4月17日
    0
  • windows云服务器如何用远程桌面连接登录?

    远程连接管理云服务器与本地操作服务器其实是一样的,Windows云服务器的远程登录比较简单。 连接云服务器需要什么信息? 连接云服务器,需要云服务器的公网(外网)IP、用户名和登录…

    2026年6月23日
    0
  • cpu核数是什么意思

    CPU是什么意思?CPU是日常生活中很常见的硬件设备,台式电脑、笔记本电脑、手机、服务器中都必须要有CPU,CPU核数即一个CPU由多少个核心组成,核心数越多,代表这个CPU的运转…

    2026年5月22日
    0
  • BGP机房与其他机房有何区别?

    什么是BGP?BGP全称边界网关协议(Border Gateway Protocol),是用于连接互联网上各个自治系统的路由选择协议。BGP主要应用于互联网AS(自治系统)之间的互…

    2026年7月6日
    0
  • 如何使用远程桌面连接 Windows 服务器?

    远程桌面能够实现远程连接Windows 服务器的操作,管理员可以远程访问和管理服务器。 在这篇文章中,我们将介绍如何使用远程桌面连接到 Windows 服务器。此外,我们还将探讨用…

    2026年3月28日
    0
  • IPv4与IPv6:互联网网络层协议的演进与迁移路径

    众所周知,Internet是当前全球规模最大、影响力最广的计算机网络,其网络层作为核心支撑部分,主要涵盖了网际协议(IP)、路由协议以及互联网控制报文协议(ICMP)等关键内容。 …

    2026年4月23日
    0