一、nginx简介
1.什么是nginx
-
Nginx 是高性能的轻量级 HTTP 和邮箱代理服务器,具备反向代理、TCP/UDP代理功能。
-
中国使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2.nginx的功能
作为 web 服务器
-
Nginx 可以作为静态页面的 web 服务器,同时支持 CGI 协议的动态语言,比如 php 等。但不支持 java。
-
静态资源托管高效:能快速处理 HTML、CSS、JS、图片等静态文件请求,通过
sendfile、gzip等配置可进一步提升传输效率。 -
支持多虚拟主机:可在单个 Nginx 实例上通过不同的
server块配置多个域名的网站,实现资源的高效利用。 -
功能扩展性强:除了基础的 Web 服务功能,还可结合反向代理、负载均衡、访问控制等功能,满足复杂 Web 场景的需求。
-
可高效托管静态资源,支持多虚拟主机配置,能快速响应客户端请求。
正向代理
-
Nginx 代理客户端向目标服务器发起请求。
-
突破访问限制:如企业内网用户通过 Nginx 代理访问外网资源。
-
缓存与带宽优化:对频繁请求的资源进行缓存,减少重复流量。
-
访问管控:统一记录客户端请求日志、实施访问策略。
反向代理
-
代理后端服务器向客户端响应请求。
-
隐藏后端架构:客户端仅需访问 Nginx 的地址,不知道后端多台服务器的存在。
-
负载均衡:可通过权重、IP 哈希等策略将请求分发到多个后端节点,提升系统性能与可用性。
-
动静分离:静态资源由 Nginx 直接处理,动态请求转发至后端应用服务器。
-
安全加固:作为后端服务的 "防护层",可过滤恶意请求、实现 HTTPS 加密等。


负载均衡
-
通过多种方法将请求分发到多个后端节点,提升系统的可用性和性能。
-
调度策略
-
轮询(默认):按顺序依次将请求分发到后端服务器。
-
权重(weight):为不同服务器设置权重值,权重高的接收更多请求,适用于服务器性能差异场景。
-
IP 哈希(ip_hash):根据客户端 IP 的哈希值将请求固定分发到某台服务器,可解决会话保持问题。
-
最少连接(least_conn):将请求分发到当前连接数最少的服务器,适用于请求处理时间差异较大的场景。
-

动静分离
-
把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
-
静态资源由 Nginx 直接处理,利用其高效的静态文件服务能力,减少后端应用服务器压力。
-
动态请求转发至后端应用服务器,让专业的应用服务器处理业务逻辑,实现资源的合理分工。
3.nginx的特点
-
并发能力强:单机nginx可支持十万级的并发连接,最高支持百万计并发连接。
-
占有内存少:在同等级web服务器中,Nginx占用的内存最少。
-
高扩展性:采用模块化设计,可以根据需要添加或删除模块,具有良好的扩展性。
-
高可靠性:采用master-worker模式,如果worker出现故障,master可以快速开启一个新的worker来提供服务。能够处理大量的并发连接而不会崩溃。
-
可以运行在x86、ARM等多种平台上,同时支持Linux、Windows等主流操作系统。
4.Nginx 架构
Master进程
-
配置管理:加载、解析 Nginx 配置文件,并将配置同步给 Worker 进程。
-
进程管理:创建、监控 Worker 进程,当 Worker 进程异常退出时,Master 会自动重启新的 Worker 进程,保障服务可用性。
-
信号处理:接收对nginx的管理指令,并将指令分发到 Worker 进程。
worker进程
-
并发处理:采用事件驱动的异步非阻塞 I/O 模型,结合Linux、FreeBSD等 I/O 多路复用机制。
-
功能:接收、处理客户端请求,完成静态资源返回、反向代理转发、负载均衡调度等业务。
-
高可用性:多个 Worker 进程相互独立,由 Master 进程监控,若某个 Worker 异常退出,Master 会自动重启新的 Worker,保障服务不中断
-
性能优化:Worker 进程数通常配置为与 CPU 核心数一致,通过
worker_processes指令设置,利用多核资源提升性能。
5.nginx关键工作机制
-
抢占机制:当客户端发起请求时,会激活accept_mutex互斥锁,哪个worker抢占了该互斥锁,该客户端的请求就由那个worker响应和处理

-
异步非阻塞模式:在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待,直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就算worker被阻塞,新的客户端请求也会被正常处理

二、Nginx的安装
Nginx版本
-
Mainline version: 主要开发版本。
-
Stable version: 当前最新稳定版。
-
Legacy versions: 旧的稳定版。
Nginx安装方式
-
包管理器安装:通过系统包管理器直接安装。安装过程简单快捷,自动处理依赖,适合快速部署或对功能需求较基础的场景。
-
源码编译安装: 下载源码包→安装依赖→配置编译参数→编译安装。可自定义功能模块(如启用 SSL、HTTP/2 等),指定安装路径,适合对功能和环境有个性化需求的场景。(推荐)
-
Docker 容器安装:拉取 Nginx 官方镜像→运行容器。环境隔离性好,便于迁移和版本管理。
Nginx 编译安装
-
安装依赖:安装编译器(如 GCC)及相关库(如 PCRE、zlib),以支持 Nginx 的功能模块。
-
下载源码:从 Nginx 官网下载对应版本的源码包(如
nginx-1.24.0.tar.gz)。 -
配置编译参数:通过
./configure命令指定安装路径、启用的模块(如--with-http_ssl_module启用 HTTPS)等。 -
编译安装:执行
make编译源码,再执行make install完成安装。
工具介绍
在 Nginx 编译安装中,常用的编译器是GCC(GNU Compiler Collection),支持多种编程语言,如C、C++和Java等。
-
功能:是一套开源的编译器集合,可将 Nginx 的 C 语言源码编译为可执行程序。
-
优势:支持多平台(Linux、Unix、Windows 等),对 C/C++ 语言的编译优化能力强,是开源软件编译的主流工具。
-
安装方式:在 Linux 系统中,可通过包管理器安装,如红帽系统执行yum install gcc -y
Automake: 构建工具。自动生成 Makefile 的工具,简化编译流程,让 Nginx 源码的编译配置更高效。
依赖库
- pcre:支持正则表达式,是 Nginx rewrite 模块的核心依赖,用于 URL 重写、 location 匹配等场景。
- zlib:提供数据压缩能力,支持 Nginx 的 gzip 模块,可对 HTTP 响应进行压缩,减少带宽消耗。
- openssl:支持 SSL/TLS 加密,是 Nginx 实现 HTTPS 协议的必备依赖,保障数据传输的安全性。
编译安装步骤
-
安装编译器和依赖库(以红帽系系统为例)执行命令yum install gcc automake pcre-devel zlib-devel openssl-devel -y,一次性安装所有必需的编译工具和依赖库。
-
下载 Nginx 源码,从Nginx 官网下载稳定版源码包。
配置编译选项(如启用或禁用某些模块)
- 解压源码后进入目录,通过
./configure命令指定安装路径和启用的模块,例如:./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module。
编译和安装Nginx
-
执行
make编译源码,再执行make install完成安装,最终可在指定路径(如/usr/local/nginx)下找到 Nginx 的可执行程序和配置文件。[root@shiyan ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y #安装 Nginx 编译所需的编译器(gcc)和依赖库(pcre-devel正则库、zlib-devel压缩库、openssl-devel加密库)
[root@shiyan nginx-1.24.0]# useradd -s /sbin/nologin -M nginx #创建 Nginx 运行用户nginx,-s /sbin/nologin设置为无登录权限,-M不创建家目录,增强安全性
[root@shiyan nginx]# tar zxf nginx-1.24.0.tar.gz
[root@shiyan nginx-1.24.0]# useradd -s /sbin/nologin -M nginx
[root@shiyan nginx]# cd nginx-1.24.0/
[root@shiyan nginx-1.24.0]# ls #列出目录内容,查看源码结构(如configure配置脚本、src源码目录等)
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@Nginx nginx-1.24.0]# ./configure --prefix=/usr/local/nginx
--user=nginx \ # 指定nginx运行用户
--group=nginx \ # 指定nginx运行组
--with-http_ssl_module \ # 启用https
--with-http_v2_module \ # 启用http版本2
--with-http_realip_module \ # 启用ip透传
--with-http_stub_status_module \ # 启用状态页面
--with-http_gzip_static_module \ # 启用压缩
--with-pcre \ # 启用正则
--with-stream \ # 启用tcp反向代理
--with-stream_ssl_module \ # 启用tcp的ssl加密
--with-stream_realip_module # 启用tcp的透传ip
[root@Nginx nginx-1.24.0]# make && make install -
安装完nginx后,会在 路径
/usr/local下自动生成nginx文件夹。 -
进入这个目录,查看目录内容
[root@shiyan nginx]# cd /usr/local/nginx [root@shiyan nginx]# ls client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp -
以下几个目录最为关键:
-
conf存放Nginx的配置文件,核心配置文件`nginx.conf`就在此目录下,可在此配置虚拟主机、反向代理、负载均衡等规则
-
html:存放默认的网页文件,如`index.html`(Nginx默认首页),也可在此放置静态资源(如图片、CSS、JS)
-
logs:存储Nginx的日志文件,包括访问日志`access.log`、错误日志`error.log`和进程ID文件`nginx.pid'
-
sbin:存放Nginx的可执行程序`nginx`,用于启动、停止、重载Nginx服务
部署Nginx
[root@shiyan ~]# setenforce 0 #临时关闭 SELinux
[root@shiyan ~]# systemctl stop firewalld #临时停止 firewalld 防火墙服务,关闭系统的网络端口访问限制,使外部可访问 Nginx 的 80、443 等端口。
[root@shiyan ~]# systemctl disable firewalld #禁用 firewalld 防火墙的开机自启,确保系统重启后防火墙不会自动开启,长期为服务提供无防火墙拦截的网络环境(若需重新启用,可执行systemctl enable firewalld)。
[root@shiyan ~]# vim ~/.bash_profile #编辑用户的环境变量配置文件~/.bash_profile,用于添加 Nginx 可执行程序的路径到系统环境变量中
export PATH=$PATH:/usr/local/nginx/sbin #将 Nginx 可执行程序所在的sbin目录(/usr/local/nginx/sbin)加入PATH,使得在任意目录下都可直接执行nginx命令
[root@shiyan ~]# source ~/.bash_profile #使刚修改的环境变量配置立即生效,无需重新登录系统
[root@shiyan ~]# nginx -V #查看 Nginx 的版本信息及编译参数
nginx version: nginx/1.24.0 #版本号
built by gcc 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC) #编译工具
built with OpenSSL 3.0.7 1 Nov 2022 #启用的功能模块
TLS SNI support enabled
configure arguments: --group=nginx --with-http_ssl_module --with-http_v2_module -
-with-http_realip_module --with-http_stub_status_module --withhttp_gzip_static_module
--with-pcre --with-stream --with-stream_ssl_module --
with-stream_realip_module
[root@shiyan ~]# systemctl start nginx # 启动httpd
[root@shiyan ~]# systemctl enable nginx # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@shiyan ~]# systemctl status nginx # 查看状态,q键退出查看
[root@shiyan ~]# ps -ef | grep nginx # 查看进程
root 481 1 0 13:57 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 482 481 0 13:57 ? 00:00:00 nginx: worker process
nginx 483 481 0 13:57 ? 00:00:00 nginx: worker process
root 497 497 0 14:00 pts/0 00:00:00 grep --color=auto nginx
Nginx的常用命令
systemctl start nginx # 启动服务
systemctl restart nginx # 重启服务
systemctl enable nginx # 开机启动
systemctl stop nginx # 停止服务
systemctl disable nginx # 取消开机启动
systemctl status nginx # 查看状态
systemctl reload nginx # 配置重载
grep nginx # 查看服务状态
nginx -s reload # 重新加载配置文件
nginx -s stop # 强行停止服务
nginx -s quit # 优雅停止服务,即所有请求处理完后退出服务
nginx -v # 查看版本号
nginx -t # 检查配置文件的语法错误,无错返回ok
Nginx的配置目录结构
[root@shiyan ~]# cd /etc/nginx # 服务目录
[root@shiyan nginx]# yum install tree -y
[root@shiyan nginx]# tree
.
├── conf.d # 子配置文件目录
├── default.d # 默认子配置目录,通常存放默认虚拟主机的配置
├── fastcgi.conf # FastCGI 协议的配置文件,定义 FastCGI 交互的参数
├── fastcgi.conf.default
├── fastcgi_params
├── fastcgi_params.default
├── koi-utf # KOI8-R 编码(俄语)转换的映射文件
├── koi-win # KOI8-R 编码(俄语)转换的映射文件
├── mime.types # 配置支持的媒体类型
├── mime.types.default # 样例文件
├── nginx.conf # 主配置文件
├── nginx.conf.default # 样例文件
├── scgi_params
├── scgi_params.default
├── uwsgi_params
├── uwsgi_params.default
└── win-utf # KOI8-R 编码(俄语)转换的映射文件
nginx命令示例
[root@shiyan ~]# vim /usr/local/nginx/conf/nginx.conf
[root@shiyan ~]# ps aux | grep nginx # 查看进程
root 48148 0.0 0.1 9868 2052 ? Ss 14:00 0:00 nginx: master process nginx -g worker_processes 6;
nobody 48149 0.0 0.2 14200 4868 ? S 14:00 0:00 nginx: worker process
nobody 48150 0.0 0.2 14200 4868 ? S 14:00 0:00 nginx: worker process
nobody 48151 0.0 0.2 14200 4868 ? S 14:00 0:00 nginx: worker process
[root@shiyan ~]# nginx -s quit #停止 Nginx 服务,处理完当前请求后终止进程,保障服务平滑关闭
[root@shiyan ~]# ps aux | grep nginx
root 48171 0.0 0.1 221664 2176 pts/0 S+ 14:04 0:00 grep --color=auto nginx
Nginx主配置文件
# main配置段
user nginx; # 运行的账户,默认即是nginx,可以不进行设置
worker_processes auto; # worker进程数,根据硬件调整,通常等于CPU数量或者2倍于CPU
error_log /var/log/nginx/error.log; # 错误日志存放目录
pid /run/nginx.pid; # 指定运行Nginx master主进程的pid文件存放路径
include /usr/share/nginx/modules/*.conf; # 导入的外部文件位置
# events配置段,性能模块设置,其中可以设置时间处理模式等
events {
use epoll; # 使用epoll事件驱动模型,但不推荐配置它,让nginx自己选择
worker_connections 1024; # 每个进程的最大连接数量(并发数)
accept_mutex on # 默认是off关闭的,这里推荐打开
}
# http配置段,包含全局块和server块,使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 以上定义日志格式
access_log /var/log/nginx/access.log main; # 访问日志存储位置
sendfile on; # 高效文件传输模式,默认开启
tcp_nopush on; # 性能优化参数,数据是否立刻发送
tcp_nodelay on; # 性能优化参数,小数据包是否延迟发送
keepalive_timeout 65; # 超时时间
types_hash_max_size 4096; # 性能优化参数,影响散列表的冲率
include /etc/nginx/mime.types; # 可解析的静态资源类型
default_type application/octet-stream; # 默认文件类型
include /etc/nginx/conf.d/*.conf; # 加载子配置项
# server配置段,虚拟主机设置
server {
listen 80; # 监听IPV4端口
listen [::]:80; # 监听IPV6端口
server_name _; # 访问的域名
root /usr/share/nginx/html; # 网页默认目录
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; # 子配置文件存储路径
# location配置段,一般用来匹配不同的URI请求
location / {
root /usr/share/nginx/html; # 相对路径网站根目录
alias /usr/share/nginx/html/; # 绝对路径网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44; # 允许访问的ip地址,可以为all
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
auth_basic "xxxx"; # 加密网页验证时的提示信息
auth_basic_user_file /路径/文件名; # 加密网页使用的密码验证文件
}
error_page 404 /404.html; # 404时返回给客户端的页面
location = /40x.html {
}
error_page 500 502 503 504 /50x.html; # 50x错误返回给客户端的页面
location = /50x.html {
}
}
}
层级结构

配置详解
Nginx 的配置文件,主要由全局块、events 块、http 块三部分组成,每部分又包含细分的配置指令和模块。
1.全局块(Global Context)
作用:定义影响 Nginx 整体运行的全局参数。
-
user:指定 Nginx 工作进程的运行用户和用户组,如user nginx nginx;,用于权限隔离,提升安全性。 -
worker_processes:设置工作进程数量,通常建议与 CPU 核心数一致(可设为auto,由 Nginx 自动匹配),如worker_processes auto;,以充分利用硬件资源。 -
error_log:定义错误日志的路径和级别(可选debug、info、warn、error等),如error_log /var/log/nginx/error.log warn;,用于排查故障。 -
pid:指定 Nginx 主进程 ID(PID)的存储文件路径,如pid /run/nginx.pid;。 -
worker_rlimit_nofile:设置单个工作进程可打开的最大文件描述符数,需配合系统ulimit调整,如worker_rlimit_nofile 65535;,用于支持高并发连接。
2.events 块
作用:配置 Nginx 的网络连接模型和并发参数。
-
worker_connections:设置每个工作进程的最大并发连接数,如worker_connections 4096;,Nginx 的最大并发数为worker_processes × worker_connections。 -
use:指定事件驱动模型,Linux 系统推荐epoll(高效异步 I/O),如use epoll;;BSD 系统推荐kqueue。 -
multi_accept:是否允许一个工作进程一次性接受所有新连接,高并发场景建议设为on,如multi_accept on;。 -
accept_mutex:是否启用连接互斥锁,高并发时建议设为off以减少延迟,如accept_mutex off;。
3.http 块
作用:配置 HTTP 协议相关的所有功能,是 Nginx 配置的核心区域,包含 ** 全局 HTTP 设置、server 块(虚拟主机)、location 块(URL 路由)** 等。
a. 全局 HTTP 设置
-
include:引入外部配置文件,实现模块化管理,如include /etc/nginx/mime.types;(引入 MIME 类型映射)、include /etc/nginx/conf.d/*.conf;(引入虚拟主机配置)。 -
default_type:设置默认的 MIME 类型,未知文件类型时使用,如default_type application/octet-stream;(默认二进制流,浏览器会触发下载)。 -
log_format:自定义访问日志格式。 -
access_log:指定访问日志的路径和格式,如access_log /var/log/nginx/access.log main;。 -
sendfile:启用零拷贝文件传输(sendfile()系统调用),提升静态文件传输性能,设为on。 -
tcp_nopush:配合sendfile使用,合并数据包减少网络开销,设为on。 -
keepalive_timeout:设置客户端长连接的超时时间(秒),如keepalive_timeout 65;。 -
gzip:启用 Gzip 压缩以减少传输体积,可配置压缩级别、压缩类型等。
b. server 块(虚拟主机)
作用:定义单个虚拟主机的配置,可实现多域名、多端口的隔离服务。
-
listen:指定监听的 IP 和端口,如listen 80;(监听 80 端口)、listen 127.0.0.1:8080;(仅监听本地回环地址的 8080 端口)。 -
server_name:指定虚拟主机的域名,支持通配符(如*.example.com)和正则(如~^www\.example\.com$),如server_name example.com www.example.com;。 -
root:设置网站的根目录,用于静态文件服务,如root /var/www/html;。 -
index:设置默认首页文件,如index index.html index.htm;。 -
error_page:自定义错误页面,如error_page 404 /404.html;、error_page 500 502 503 504 /50x.html;。
c. location 块(URL 路由)
作用:匹配请求的 URL 路径,定义对应的处理逻辑(静态文件、反向代理、负载均衡等)。
-
匹配规则:
-
精确匹配:
location = /about { ... }(仅匹配/about)。 -
前缀匹配:
location /images/ { ... }(匹配以/images/开头的路径)。 -
正则匹配:
location ~ \.php$ { ... }(匹配以.php结尾的路径,区分大小写);location ~* \.jpg$ { ... }(不区分大小写)。
-
-
常用指令:
-
try_files:尝试按顺序查找文件,常用于前端单页应用路由,如try_files $uri $uri/ /index.html;。 -
proxy_pass:反向代理到上游服务器,如proxy_pass http://backend_server;,常用于对接后端应用(如 Java、Python 服务)。 -
fastcgi_pass:传递请求到 FastCGI 服务器(如 PHP-FPM),如fastcgi_pass 127.0.0.1:9000;。 -
expires:设置客户端缓存时间,如expires 30d;(静态资源缓存 30 天)。
-
示例
#精确匹配
curl http://localhost/test
#前缀匹配(^~)
curl http://localhost/static/files/report.pdf
#区分大小写的正则匹配
curl http://localhost/login.PHP
#不区分大小写的正则匹配
curl http://localhost/pic.JPG
#普通前缀匹配
curl http://localhost/static/css/style.css
#默认匹配
curl http://localhost/abc123
location 尾部斜杠(/)差异
-
尾部无斜杠(
/test):优先匹配同名文件,无文件则匹配同名目录。 -
尾部有斜杠(
/test/):仅匹配同名目录,不识别文件,无目录则返回异常。创建网站根目录(与Nginx配置的root一致)
mkdir -p /var/www/html
cd /var/www/html1. 创建 test 目录 + 目录内首页文件
mkdir test
echo "这是 test 目录下的 index.html" > test/index.html2. 创建独立的 test 文件(无后缀)
echo "这是独立的 test 文件" > test
配置目录 / 文件权限(确保 Nginx 可访问)chmod -R 755 /var/www/html
chown -R nginx:nginx /var/www/htmlNginx 配置
server {
listen 80;
server_name localhost; # 替换为你的服务器IP或域名
root /var/www/html; # 网站根目录,与上述创建的目录一致
index index.html; # 默认首页文件# 1. location 尾部无斜杠:匹配 /test(文件或目录) location /test { return 200 "尾部无斜杠 /test:\n访问内容:$request_filename\n内容:$(cat $request_filename 2>/dev/null || echo '无对应文件/目录')\n"; } # 2. location 尾部有斜杠:仅匹配 /test/(目录) location /test/ { return 200 "尾部有斜杠 /test/:\n访问内容:$request_filename\n内容:$(cat $request_filename 2>/dev/null || echo '无对应目录')\n"; }}
配置生效命令
验证配置语法
nginx -t
输出 test is successful 表示语法正确。
重新加载 Nginx
nginx -s reload # 或 systemctl reload nginx
测试不同访问路径(curl 命令)
测试尾部无斜杠的 location /test
访问 /test(匹配文件,优先级高于目录):
预期输出:
plaintext
尾部无斜杠 /test:
访问内容:/var/www/html/test
内容:这是独立的 test 文件
若删除独立的 test 文件,再访问 /test(匹配目录)#rm /var/www/html/test # 删除独立文件
curl http://localhost/test预期输出:
plaintext
尾部无斜杠 /test:
访问内容:/var/www/html/test/index.html
内容:这是 test 目录下的 index.html测试尾部有斜杠的 location /test/
访问 /test/(仅匹配目录):
bash
curl http://localhost/test/
预期输出:
plaintext尾部有斜杠 /test/:
访问内容:/var/www/html/test/index.html
内容:这是 test 目录下的 index.html
若删除 test 目录,再访问 /test/(无对应目录):rm -rf /var/www/html/test # 删除test目录
curl http://localhost/test/
预期输出:
plaintext尾部有斜杠 /test/:
访问内容:/var/www/html/test/index.html
内容:无对应目录
d.upstream 块(负载均衡)
- 作用:定义后端服务器组,实现负载均衡和健康检查,通常在 http 块中使用。
e.SSL/TLS 配置(HTTPS)
- 作用:配置安全加密通信,需在 server 块中设置。
nginx全局配置
正常运行必备配置
# 指定工作进程的用户和用户组
user nginx nginx;
# 工作进程数量(建议与CPU核心数一致,auto为自动匹配)
worker_processes auto;
# 主进程PID文件路径
pid /run/nginx.pid;
# 加载动态模块配置
include /usr/share/nginx/modules/*.conf;
优化性能相关配置
# 单个工作进程可打开的最大文件描述符数(支持高并发)
worker_rlimit_nofile 65535;
# 工作进程绑定CPU核心(减少进程切换开销,4核心示例)
worker_cpu_affinity 0001 0010 0100 1000;
# 自动绑定(Nginx 1.9.10+支持)
# worker_cpu_affinity auto;
# 定时器分辨率(减少时间精度误差,提升时间敏感场景性能)
timer_resolution 100ms;
调试及定位问题配置
# 错误日志配置(路径+级别:debug/info/warn/error/crit)
error_log /var/log/nginx/error.log warn;
# 调试模式(仅开发环境使用,会产生大量日志)
# error_log /var/log/nginx/debug.log debug;
# 调试断点(调试特定阶段,stop=暂停,abort=终止进程)
# debug_points stop;
# 传递环境变量到Nginx进程(用于自定义调试参数)
env NGINX_DEBUG=on;
事件驱动相关配置
events {
# 事件驱动模型(Linux推荐epoll,BSD推荐kqueue)
use epoll;
# 单个工作进程最大并发连接数
worker_connections 10240;
# 允许工作进程一次性接受所有新连接(高并发优化)
multi_accept on;
# 关闭连接互斥锁(减少高并发延迟)
accept_mutex off;
}
配置后需通过nginx -t验证语法正确性,再执行nginx -s reload生效。
root指令与alias指令区别
|------------|----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
| 作用范围 | 可在 http、server、location 等配置块中使用 | 仅能在 location 配置块中使用 |
| 路径拼接逻辑 | 定义的路径会与 URI 叠加生成最终访问路径,如root /opt/nginx/static;,访问/image/1.png时,实际路径为/opt/nginx/static/image/1.png | 直接指定绝对路径,不会与 URI 叠加,如alias /opt/nginx/static/image/;,访问/image/1.png时,实际路径为/opt/nginx/static/image/1.png |
| 末尾斜杠要求 | 无强制要求 | 末尾必须添加斜杠 |
| 应用场景 | 适用于为一组 location 定义统一的根目录 | 适用于单个 location 需要映射到特定绝对路径的场景 |
- 两者都是用来设置静态资源的目录位置,但
root会和请求的 URI(访问路径)叠加生成最终路径,而alias是直接指定绝对路径,不会叠加 URI。
示例
前提准备(服务器端操作)
# 为 root 指令创建目录结构
mkdir -p /opt/nginx/static/image
# 为 alias 指令创建目录结构
mkdir -p /opt/nginx/static/alias_image
# 生成测试图片(或上传真实图片)
touch /opt/nginx/static/image/test.jpg
touch /opt/nginx/static/alias_image/test.jpg
#确保 Nginx 有权限访问目录
chmod -R 755 /opt/nginx/static
chown -R nginx:nginx /opt/nginx/static
root指令
server {
listen 80;
server_name your_domain.com; # 替换为你的域名或服务器IP
location /root-image {
root /opt/nginx/static; # 根目录,不包含 URI 中的 /root-image
expires 30d; # 静态资源缓存优化
autoindex on; # 允许目录浏览(测试用,生产环境建议关闭)
}
}
alias指令
server {
listen 80;
server_name your_domain.com; # 替换为你的域名或服务器IP
location /alias-image {
alias /opt/nginx/static/alias_image/; # 直接指定绝对路径,末尾必须加斜杠
expires 30d;
autoindex on;
}
}
配置生效与测试
nginx -t # 验证语法正确性
nginx -s reload # 重启 Nginx 使配置生效
# 测试 root 指令:实际访问路径 /opt/nginx/static/root-image/test.jpg
curl -I http://your_domain.com/root-image/test.jpg
# 测试 alias 指令:实际访问路径 /opt/nginx/static/alias_image/test.jpg
curl -I http://your_domain.com/alias-image/test.jpg
- 若返回
200 OK,说明路径映射成功; - 若返回
404 Not Found,需检查目录路径、文件存在性或权限配置;
nginx.conf 配置文件的语法规则
-
指令格式 由指令名和参数组成,以分号(;)结尾。示例:worker_processes auto;
-
配置块 用大括号({})包裹一组相关指令,形成作用域。示例:nginx<br>http {<br> server {<br> listen 80;<br> }<br>}<br>
-
注释 单行注释以#开头,无多行注释语法。示例:# 这是一条注释
-
变量引用 用符号引用内置变量或自定义变量。示例:access_log /var/log/nginx/access.log remote_addr;
-
包含文件 用include指令引入外部配置文件,实现模块化管理。示例:include /etc/nginx/conf.d/*.conf;
-
语法验证 可通过nginx -t命令验证配置文件语法正确性,避免因语法错误导致 Nginx 启动失败。
