大家好,本篇文章将从零开始系统讲解 Nginx,涵盖安装、配置、核心功能、反向代理、URL 重写、虚拟主机、负载均衡,以及 Nginx+Tomcat 集群架构,全程可直接落地生产环境。

一、Nginx 基础介绍

Nginx(engine x)是一款高性能 HTTP 和反向代理 Web 服务器,核心优势:

  • 内存占用极低
  • 并发能力极强(同类型服务器表现最优)
  • 国内大厂广泛使用:百度、京东、新浪、网易、腾讯、淘宝等

官方网站:http://nginx.org/

版本说明

  • Mainline version:主线开发版,更新快(每月 1~2 次)
  • Stable version:稳定版,生产环境强烈推荐
  • Legacy versions:历史稳定版

本文以 Nginx 1.24.0 稳定版 为例。

本文演示基于Centos 7为主。

二、Nginx 安装和配置(CentOS/RHEL)

1.  源码安装(本文使用)

(1)先安装Nginx 依赖

在安装Nginx之前,需要安装一些Nginx的依赖程序,Nginx的主要依赖程序有zlib、pcre、openssl三个,其中,zlib用于支持gzip模块,pcre用于支持rewrite模块,openssl用于支持ssl功能,为了简单快捷,推荐通过yum安装zlib、pcre、openssl软件包,安装方式如下:

yum -y install zlib pcre pcre-devel openssl openssl-devel
(2)编译并安装
# 下载解压
tar zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

# 编译配置
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre

# 编译安装
make && make install
(3)Nginx编译参数

其中,每个编译参数的含义如下所示:

--prefix	指定Nginx程序的安装路径
--sbin-path	设置Nginx二进制文件的路径名
--conf-path	指定Nginx配置文件路径
--error-log-path	指定Nginx错误日志文件路径
--http-log-path	指定Nginx访问日志文件路径
--pid-path	设置Nginx的pid文件nginx.pid的路径
--lock-path	设置Nginx的lock文件nginx.lock文件路径
--with-openssl	指定OpenSSL源码包的路径,如果编译的时候没有指定“--with-openssl”选项,那么默认会使用系统自带的openssl库
--with-pcre	设置Nginx启用正则表达式
--with-http_stub_status_module	安装用来监控Nginx状态的模块
--with-http_ssl_module	表示启用Nginx的SSL模块,此模块依赖“--with-openssl”这个选项,通常一起使用。
--with-http_gzip_static_module	表示启用Nginx的gzip压缩

2. Yum 安装(简单快速)

yum -y install nginx

缺点:版本不一定最新。

3. 配置systemd管理Nginx

 (1)编写 service 文件
vi /etc/systemd/system/nginx.service

  内容如下:

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
(2)重载并管理服务
systemctl daemon-reload
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl enable nginx
systemctl status nginx

执行演示:

先通过yum -y install zlib pcre pcre-devel openssl openssl-devel安装ngnix依赖。

安装完成可以看见如图所示页面。

在官网下载对应的nginx源码压缩包,然后上传到自己的虚拟机

然后我们对其进行解压缩,解压完成我们可以看见一个nginx-1.24.0的目录

然后我们cd cd nginx-1.24.0/进入该目录下,进行系统环境检查和编译配置

如图所示就是配置成功了

最后就是编译和安装

我们可以进入到/usr/local/nginx

conf主要就是配置文件。html存放的网页资源,logs就是存放的日志,sbin就是nginx的可执行程序

然后我们可以通过sbin目录下的二进制文件启动我们的nginx服务

为了更方便的管理nginx我们可以编写一个脚本

修改之后一定要重新加载配置,现在我们可以看到active(runing)说明服务以及启动成功

三、Nginx 配置文件核心解读

Nginx安装完毕后,会产生相应的安装目录,根据前面的安装路径,Nginx的配置文件路径为/usr/local/nginx/conf,其中nginx.conf为Nginx的主配置文件。

配置文件:/usr/local/nginx/conf/nginx.conf

Nginx配置文件默认有五个部分组成:分别是main、events、http、server和location,其中,main部分设置的指令将影响其他所有设置;events部分用来配置影响nginx服务器或与用户的网络连接;http部分可以嵌套多个server,主要用来配置代理,缓存,自定义日志格式等绝大多数功能和第三方模块的配置,server部分用于配置虚拟主机的相关参数;location部分用于配置请求的处理规则,以及各种页面的处理情况。这五者之间的关系是:main与events平级,一个http中可以有多个server,server继承main,location继承server。

如下所示

默认分为 5 块:main → events → http → server → location

main
└── events
    └── http
        ├── server
        │   └── location
        └── server


main:全局配置
events:连接处理
http:Web 服务核心
server:虚拟主机
location:请求匹配规则

1. 全局配置(main)

(1)user:指定Worker进程运行身份

定义Nginx Worker进程的运行用户和用户组,默认情况下由nobody账号运行(权限较低,安全性一般)。实际部署中,建议指定专用用户(如www),避免使用root账号运行,降低安全风险。

示例配置:

user www www;

说明:第一个www是用户名,第二个www是用户组,需提前在系统中创建该用户和组

useradd -r -s /sbin/nologin www

(2)worker_processes:设置Worker进程数

指定Nginx启动的Worker进程数量,Worker进程是实际处理客户端请求的进程,数量设置直接影响并发处理能力。

配置原则:

  • 一般设置为服务器CPU核心数,可充分利用CPU资源,避免进程切换带来的性能损耗。

  • 查看CPU核心数命令(Linux系统):

grep ^processor /proc/cpuinfo | wc -l

可以看到我的虚拟机cpu核数就是1核

  • Nginx 1.10版本及以后,支持auto参数,Nginx会自动检测CPU核心数,并开启对应数量的Worker进程(推荐新手使用)。

示例配置:

# 手动设置(4核CPU) worker_processes 4; 
# 自动检测(推荐) worker_processes auto;

(3)worker_cpu_affinity:绑定Worker进程与CPU核

将Nginx Worker进程与指定的CPU核心绑定,避免多核CPU之间的进程切换,减少性能损耗,尤其在高并发场景下效果明显,需与worker_processes配合使用。

配置规则:

  • 用二进制数字(1和0)表示CPU核心的启用状态,1表示启用该核心,0表示禁用。

  • CPU有多少核,就需要写多少位二进制数,多个进程对应多个二进制数(用空格分隔)。

示例配置(对应不同核数CPU):

# 4核CPU,4个Worker进程,每个进程绑定一个核心 worker_processes 4; 
worker_cpu_affinity 0001 0010 0100 1000;

# 8核CPU,绑定第一个核心(仅1个Worker进程) worker_processes 1; 
worker_cpu_affinity 00000001; 

# 8核CPU,8个Worker进程,每个进程绑定一个核心 worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

(4)error_log:全局错误日志配置

定义Nginx全局错误日志的存储路径和日志输出级别,用于排查Nginx启动、运行过程中的错误(核心排查工具)。

日志级别(从详细到简洁):debug > info > notice > warn > error > crit

  • debug:最详细,适合开发、调试阶段(日志量大,不建议生产环境使用)。

  • error/crit:最简洁,仅记录严重错误,适合生产环境(节省磁盘空间)。

示例配置:

# 生产环境配置(仅记录错误信息) error_log /var/log/nginx/error.log error; 
# 调试环境配置(记录详细调试信息) error_log /var/log/nginx/debug.log debug;

(5)pid:指定进程ID存储文件

指定Nginx主进程ID(PID)的存储文件路径,方便管理Nginx进程(如启动、停止、重启)。

示例配置:

pid /var/run/nginx.pid;

说明:

默认路径通常为/var/run/nginx.pid,若修改路径,需确保Nginx有该路径的写入权限。

(6)worker_rlimit_nofile:设置进程最大打开文件数

指定单个Nginx Worker进程可以打开的最大文件描述符数目(Linux系统中,文件、网络连接都属于文件描述符),直接影响Nginx的并发连接能力。

示例配置:

worker_rlimit_nofile 65535;

注意:

该配置需配合系统级设置生效,需执行命令ulimit -n 65535(临时生效),若需永久生效,需修改/etc/security/limits.conf文件,添加以下内容:

* soft nofile 65535 
* hard nofile 65535

(7)events模块(全局连接相关配置)

events模块属于全局配置的一部分,用于设定Nginx的工作模式和连接数上限,决定Nginx处理客户端连接的效率。

核心配置示例:

events { # 工作模式(Linux系统首选epoll,高效模式) 
         use epoll; 
         # 单个Worker进程的最大连接数
         worker_connections 1024; 
}

关键参数说明:

  1. use:指定Nginx的工作模式,支持的模式如下:

    1. select/poll:标准模式,兼容性好,适用于所有系统,但性能一般。

    2. epoll:Linux系统专属高效模式,支持大量并发连接,推荐生产环境使用。

    3. kqueue/dev/poll:分别适用于FreeBSD、Solaris系统,功能与epoll类似。

  2. worker_connections:单个Worker进程的最大连接数,默认1024,可根据服务器配置调整(如调整为65535)。

补充:最大客户端连接数计算

在纯Nginx服务(无反向代理、无后端应用)中,Nginx能支持的最大客户端连接数计算公式:

max_client = worker_processes * worker_connections

示例:4个Worker进程,每个进程最大连接数65535,则最大客户端连接数为 4 * 65535 = 262140。

注意:进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。

2.HTTP服务器配置

(1)include:引入外部配置文件

主模块指令,用于引入外部配置文件,将分散的配置(如MIME类型、虚拟主机配置)拆分到不同文件中,减少主配置文件(nginx.conf)的复杂度,便于维护和管理,类似Apache的include指令。

示例配置:

# 引入MIME类型配置(指定不同文件后缀对应的响应类型) 
include mime.types;
 
# 引入所有虚拟主机配置文件(将虚拟主机配置单独放在vhost目录下) 
include /etc/nginx/vhost/*.conf;

说明:

mime.types是Nginx默认的MIME类型配置文件,默认路径通常为/etc/nginx/mime.types,无需手动修改,引入即可正常解析HTML、CSS、JS等文件类型。

(2)default_type:设置默认文件类型

HTTP核心模块指令,用于设定Nginx无法识别文件类型时的默认响应类型,默认值通常为application/octet-stream(二进制流)。

示例配置:

default_type application/octet-stream;

(3)log_format:定义访问日志输出格式

用于指定Nginx访问日志的输出格式,自定义日志中包含的信息(如客户端IP、请求时间、请求方式、状态码等),方便后续日志分析和问题排查。

关键说明:

  • 需先定义日志格式(指定格式名称,如main),再通过access_log指令引用该格式。

  • 常用日志变量:$remote_addr(客户端IP)、$time_local(请求时间)、$request(请求方式+请求路径)、$status(响应状态码)、$http_user_agent(客户端浏览器信息)。

示例配置(定义+引用):

# 定义日志格式,名称为main(可自定义) 
log_format main '$remote_addr [$time_local] "$request" ' 
                '$status $body_bytes_sent "$http_referer" ' 
                '"$http_user_agent" "$http_x_forwarded_for"'; 

# 引用main格式,指定访问日志存储路径 
access_log /var/log/nginx/access.log main;

说明:

访问日志默认存储路径为/var/log/nginx/access.log,可根据需求修改,日志格式可按需添加/删除变量。

(4) sendfile、tcp_nopush、tcp_nodelay:开启高效文件传输

三者配合使用,优化Nginx文件传输性能,减少网络阻塞,提升响应速度,尤其适用于静态文件(HTML、CSS、图片、视频)服务。

各参数说明:

  • sendfile on开启高效文件传输模式,避免用户空间与内核空间的数据拷贝,提升文件传输效率(默认off,推荐开启)。

  • tcp_nopush on开启后,Nginx会等待数据包积累到一定大小后再发送,减少TCP连接的请求次数,降低网络开销(需配合sendfile开启)。

  • tcp_nodelay on开启后,禁止Nginx延迟发送数据,确保数据及时传输,适用于高并发、低延迟的场景(如实时交互)。

示例配置:

sendfile on; 
tcp_nopush on; 
tcp_nodelay on;

(5)keepalive_timeout:设置客户端连接超时时间

设置客户端与Nginx服务器建立的TCP连接保持活动的超时时间,超过该时间后,服务器会主动关闭连接,释放资源。

配置原则:超时时间不宜过长(避免占用过多连接资源),也不宜过短(频繁建立连接会增加开销),一般设置为60s~120s。

示例配置:

keepalive_timeout 65;

说明:单位为秒,若设置为0,则关闭长连接,每次请求都需要重新建立TCP连接。

(6)server_names_hash_bucket_size:优化server name查找效率

Nginx使用散列表(hash表)存储虚拟主机的server name(域名),该指令用于设置每个散列桶占用的内存大小,优化域名查找速度,避免因域名过多导致查找缓慢。

常用配置:根据服务器内存和域名数量调整,一般设置为128(单位:字节),若域名较多(如几十个以上),可调整为256。

示例配置:

server_names_hash_bucket_size 128;

(7)client_max_body_size:限制客户端请求文件大小

用于设置客户端单次请求中,单个上传文件的最大字节数,防止客户端上传过大文件导致服务器磁盘空间占用过多、带宽拥堵。可根据实际需求调整,一般设置为10m~50m,示例中设置为30m。

示例配置:

client_max_body_size 30m;

注意:若客户端上传的文件超过该限制,Nginx会返回413(Request Entity Too Large)错误,需根据业务需求合理调整。

(8)client_header_buffer_size:设置请求头缓冲区大小

指定客户端请求头(header)的缓冲区大小,用于存储客户端发送的请求头信息(如Cookie、User-Agent、自定义请求头)。

配置原则:默认缓冲区大小为1k,大多数场景下足够使用;若客户端请求头中包含较大的Cookie、自定义消息头,需增大缓冲区大小,示例中设置为32k。

示例配置:

client_header_buffer_size 32k;

(10)large_client_header_buffers:设置大请求头缓存

用于处理客户端发送的较大请求头(如超长Cookie、自定义复杂请求头),指定缓存的最大数量和单个缓存的大小,避免因请求头过大导致Nginx无法处理。

参数说明:4 128k 表示最多缓存4个大请求头,每个缓存的大小为128k,最大缓存总量为4×128k=512k。

示例配置:

large_client_header_buffers 4 128k;

注意:若客户端请求头超过该缓存限制,Nginx会返回400(Bad Request)错误,需根据实际请求头大小调整。

3.Http Gzip模块配置

(1)gzip:开启/关闭GZIP压缩

作用:核心开关指令,用于控制是否开启HttpGzip模块的实时压缩功能,决定响应数据流是否被压缩后传输。

参数说明:

  • gzip on开启GZIP压缩,实时压缩输出的HTTP响应数据流(推荐生产环境开启)。

  • gzip off关闭GZIP压缩,响应数据不进行压缩,默认值为off。

示例配置:

gzip on;

说明:

开启后,Nginx会自动对符合条件的资源进行压缩,客户端(浏览器)接收后会自动解压,无需额外配置客户端。

(2)gzip_min_length:设置允许压缩的最小文件大小

指定允许进行GZIP压缩的页面(或资源)最小字节数,字节数从HTTP响应头的Content-Length字段中获取。

配置原则:

  • 默认值为0,即无论资源大小,均进行压缩,但小于1k的小型资源(如小图标、短文本)压缩后可能比原始文件更大(压缩本身会增加少量头部信息),反而浪费带宽。

  • 推荐设置为1k及以上,仅对大于1k的资源进行压缩,兼顾压缩效果和性能。

示例配置:

gzip_min_length 1k;

(3)gzip_buffers:设置压缩缓存缓冲区

指定Nginx用于存储GZIP压缩结果的缓存缓冲区数量和单个缓冲区大小,优化压缩效率,减少磁盘I/O开销。

参数说明:4 16k 表示申请4个缓冲区,每个缓冲区的大小为16k,总缓存大小为4×16k=64k。

补充说明:

  • 默认配置为申请与原始数据大小相同的内存空间作为缓存,会占用较多内存资源。

  • 建议根据服务器内存配置调整,16k/32k为常用缓冲区大小,缓冲区数量一般设置为4~8个即可。

示例配置:

gzip_buffers 4 16k;

(4)gzip_http_version:指定支持的HTTP协议版本

设置Nginx识别的HTTP协议版本,只有当客户端发送的HTTP请求版本符合该设置时,才会对响应数据进行GZIP压缩。

参数说明:

  • 默认值为1.1,目前主流浏览器(Chrome、Firefox、Edge等)均支持HTTP/1.1协议,无需修改。

  • 若需兼容老旧浏览器(仅支持HTTP/1.0),可设置为1.0,但实际场景中几乎无需调整,保持默认即可。

示例配置:

gzip_http_version 1.1;

(5)gzip_comp_level:设置GZIP压缩比

指定GZIP压缩的压缩级别,控制压缩效果和服务器CPU消耗,压缩比越高,响应数据越小,但服务器处理耗时越长、CPU占用越高。

压缩级别说明(1~9级):

  • 1级:压缩比最小,处理速度最快,CPU消耗最低,适合高并发、CPU资源紧张的场景。

  • 9级:压缩比最大,响应数据传输速度最快,但处理速度最慢,CPU消耗最高,适合CPU资源充足、追求极致压缩效果的场景。

  • 推荐级别:2~6级,兼顾压缩效果和CPU性能,其中2级为常用配置(示例中设置为2级)。

示例配置:

gzip_comp_level 2;

(6)gzip_types:指定需要压缩的资源类型

明确指定哪些MIME类型的资源需要进行GZIP压缩,未指定的类型不会被压缩。

关键说明:

  • 无论是否指定,text/html类型(HTML页面)总会被自动压缩,无需额外添加。

  • 常用需压缩的类型:文本类(text/plain)、JS(application/x-javascript)、CSS(text/css)、XML(application/xml),可根据业务需求添加更多类型(如JSON、SVG等)。

示例配置:

gzip_types text/plain application/x-javascript text/css application/xml;

补充示例(扩展更多类型):

gzip_types text/plain application/x-javascript text/css application/xml application/json image/svg+xml;

4.server模块配置(虚拟主机)

(1)server:虚拟主机开始标识

定义一个虚拟主机的开始,是虚拟主机配置的关键字,所有虚拟主机相关配置均需放在server { ... }块内。

一个server { ... }块对应一个虚拟主机,多个虚拟主机可在http块内并列配置,Nginx会根据客户端请求的域名/IP,匹配对应的server块进行处理。

基础格式:

server { 
       # 虚拟主机配置项 
}

(2)listen:指定虚拟主机监听端口

用于指定当前虚拟主机监听的HTTP端口,客户端需通过该端口访问虚拟主机,默认HTTP端口为80,HTTPS端口为443。

常用配置场景:

  • 监听默认80端口(最常用,客户端访问时可省略端口);

  • 监听自定义端口(如8080、8081),适用于一台服务器部署多个网站,且端口不冲突的场景;

  • 指定IP+端口监听(如listen 192.168.1.100:80;),适用于服务器有多个IP的场景。

示例配置:

# 监听默认80端口(推荐) 
listen 80; 

# 监听自定义端口8080 
listen 8080; 

# 监听指定IP+端口 
listen 192.168.1.100:80;

(3)server_name:指定虚拟主机绑定的域名/IP

指定当前虚拟主机对应的IP地址或域名,Nginx会根据客户端请求的Host头(域名/IP),匹配对应的server块,是区分多个虚拟主机的核心配置。

配置规则:

  • 多个域名之间用空格分隔,可绑定主域名、子域名;

  • 可使用通配符(如*.example.com,匹配所有子域名);

  • 默认值为localhost,匹配本地访问(127.0.0.1)。

示例配置:

# 绑定单个域名 
server_name www.example.com; 

# 绑定多个域名(主域名+子域名) 
server_name www.example.com example.com blog.example.com; 

# 绑定通配符域名(匹配所有子域名) 
server_name *.example.com; 

# 绑定IP地址 server_name 192.168.1.100;

说明:当客户端访问www.example.com时,Nginx会匹配到对应的server块,处理该请求;若未匹配到任何server_name,会默认使用第一个server块的配置。

(4)index:设置默认首页

指定客户端访问虚拟主机时,默认加载的首页文件(无需手动输入文件名),优先级按配置顺序排列,找到第一个存在的文件即加载。

常用首页文件:index.html(静态首页)、index.php(动态首页,需配合PHP解析配置)、index.htm

示例配置:

# 优先加载index.html,其次index.php、index.htm 
index index.html index.php index.htm;

说明:访问www.example.com时,Nginx会自动查找网站根目录下的index.html,若不存在则查找index.php,以此类推;若均不存在,会返回403禁止访问错误。

(5)root:指定网站根目录

指定当前虚拟主机的网页文件存储根目录,客户端请求的资源(HTML、CSS、JS等)均从该目录中读取,可设置为绝对路径(推荐)或相对路径。

路径说明:

  • 绝对路径:完整的文件路径(如/usr/share/nginx/html,Linux系统常用);

  • 相对路径:相对于Nginx安装目录的路径(不推荐,易出错)。

示例配置:

# 绝对路径(推荐,Linux系统) 
root /usr/share/nginx/html/www; 

# 相对路径(不推荐) 
root html/www;

说明:结合index配置,当访问www.example.com时,Nginx会去/usr/share/nginx/html/www目录下,查找index.html文件并返回。

(6)access_log:指定虚拟主机访问日志

指定当前虚拟主机的访问日志存储路径,以及日志的输出格式,用于记录该虚拟主机的所有访问请求(如客户端IP、请求时间、请求路径等),便于日志分析和问题排查。

关键说明:

  • 日志输出格式需提前通过http块中的log_format指令定义(参考3.2节HTTP配置),常用格式为main

  • 不同虚拟主机可配置不同的访问日志路径,便于区分各网站的访问记录。

示例配置:

# 日志路径+main格式(main格式在http块中定义) 
access_log /var/log/nginx/www.example.com.access.log main;

说明:日志文件会自动创建(若路径不存在,需手动创建并赋予Nginx写入权限),可通过日志文件查看该虚拟主机的所有访问记录。

(5)error_page:定制错误页面

定制各类HTTP错误状态码(如404、500、403等)的返回页面,替代Nginx默认的错误页面,提升用户体验,同时可统一网站风格。

核心注意事项:

  • 默认情况下,Nginx会在主目录的html目录(如/usr/share/nginx/html)中查找错误页面文件;

  • 错误页面的大小必须超过512KB,否则会被IE浏览器替换为其默认的错误页面,无法显示自定义页面。

常用错误状态码及示例配置:

# 404页面(页面不存在) 
error_page 404 /404.html; 

# 500、502、503、504页面(服务器内部错误) 
error_page 500 502 503 504 /50x.html; 

# 可选:指定错误页面的根目录(若错误页面不在默认html目录) 
location = /404.html { 
    root /usr/share/nginx/html/error; 
}

说明:配置后,当客户端访问不存在的页面时,会返回自定义的404.html页面;服务器出现内部错误时,会返回50x.html页面,需确保这些页面已创建且大小超过512KB。

四、Nginx的管理与维护

Nginx 提供了非常完善的命令行管理工具,用于配置检查、服务启停、平滑重启、版本查看等。熟练掌握这些运维命令,是线上稳定运行 Nginx 的基础。

1、检查 Nginx 配置文件的正确性

在修改 Nginx 配置后,重启前必须检查配置语法,避免因配置错误导致服务直接挂掉。

Nginx 内置了配置检查功能,只检测语法不启动服务:

/usr/local/nginx/sbin/nginx -t

如果是指定配置文件路径进行检查:

/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

参数说明:

  • -t:只测试配置文件语法是否正确,不实际启动 Nginx
  • -c:手动指定配置文件路径;不指定时 Nginx 会默认读取安装目录下的 conf/nginx.conf

配置正确时会输出类似如下提示:

2、显示 Nginx 版本及编译信息

通过以下命令可以快速查看当前安装的 Nginx 版本和编译参数,用于排查模块是否安装、版本是否兼容等问题。

仅查看版本号

/usr/local/nginx/sbin/nginx -v

示例输出:

nginx version: nginx/1.13.9

查看版本 + 完整编译信息(模块、编译参数、路径)

/usr/local/nginx/sbin/nginx -V

会显示:

  • Nginx 版本
  • 编译器版本
  • 配置参数(--prefix--with-* 模块等)
  • 安装路径、配置文件路径等

3、Nginx 的启动、关闭与重启

Nginx 采用多进程模型,通过系统信号实现优雅启停、平滑重启,对业务影响极小。

常用信号说明

  • QUIT处理完当前请求后优雅关闭进程
  • HUP重新加载配置,平滑重启,不中断用户访问
  • USR1日志切换,用于按天切割日志
  • USR2平滑升级 Nginx 可执行程序
  • WINCH从容关闭工作进程

(1)启动 Nginx

直接执行二进制文件即可启动:

/usr/local/nginx/sbin/nginx

(2)关闭 Nginx

通过信号关闭 Nginx 主进程:

kill -XXX `cat /usr/local/nginx/logs/nginx.pid`

快速关闭(不等待请求)

kill -TERM `cat /usr/local/nginx/logs/nginx.pid`

优雅关闭(处理完现有请求再退出)

kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`

(3)平滑重启 Nginx(推荐)

修改配置后,使用 HUP 信号可以不中断服务、不丢请求地重新加载配置:

kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

等价于现代 Nginx 常用的:

/usr/local/nginx/sbin/nginx -s reload

这是生产环境修改配置后标准且安全的重启方式。

五、Nginx反向代理应用实例

反向代理是 Nginx 最核心、最常用的生产场景之一,用于统一入口、负载均衡、动静分离、隐藏后端真实服务等。本章从 location 匹配规则讲起,逐步介绍正向 / 反向代理区别、基础反向代理、生产级代理配置以及 proxy_pass 中 URI 拼接规则。

1、Nginx 中 location 应用实例

location 主要用于对请求 URL 进行匹配,支持普通字符串匹配正则表达式匹配,常用于实现动静分离、路由转发、权限控制等。

(1)静态文件匹配实例

匹配以 .gif.jpg.jpeg.png.bmp.swf 结尾的静态资源,交由 Nginx 直接处理:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    root /data/wwwroot/www.ixdba.net;
}

(2)目录匹配实例

匹配 /upload//html/ 开头的请求,直接读取本地静态文件:

location ~ ^/(upload|html)/ {
    root /data/wwwroot/www.ixdba.net;
}

(3)动态请求转发实例

匹配所有 .jsp 结尾的动态请求,转发给后端 Tomcat(8080 端口)处理:

location ~ .*.jsp$ {
    index index.jsp;
    proxy_pass http://localhost:8080;
}

2、Nginx 中 location 匹配优先级

当一个请求同时满足多个 location 规则时,Nginx 会按照优先级高低选择匹配项。常见匹配规则优先级如下(从上到下优先级递减):

location  = / {			# 精确匹配 /
  [ config A ]
}
location ^~ /images/ {	# 前缀匹配,不检查正则
  [ config B ]
}
location ~* \.(gif|jpg|png|swf)$ {	# 不区分大小写正则匹配
  [ config C ]
} 
location  /abc/def {	# 更长前缀匹配
  [ config D ]
}
location  /abc {		# 短前缀匹配
  [ config E ]
}
location  / {			# 通用匹配,所有请求都匹配
  [ config F ]
}

简单记忆:精确匹配 > ^~ 前缀匹配 > 正则匹配 > 普通前缀匹配 > / 通用匹配


3、反向代理与正向代理

(1)反向代理(Reverse Proxy)

代理服务器接收外网请求,转发给内部后端服务器,并将结果返回给客户端。对外只暴露 Nginx 地址,后端服务器对客户端不可见,这就是反向代理。

(2)正向代理(Forward Proxy)

客户端无法直接访问外网,必须通过局域网内一台代理服务器去访问外部 Web,需要在浏览器手动配置代理。

适用场景:① 局域网内统一出口代理② 访问受限网络(如教育网、内网访问外网)③ 科学上网类代理


4、最简单的反向代理实例

Nginx 实现反向代理依靠 proxy_pass 模块。

(1)极简反向代理

server {
    listen       80;
    server_name  www.a.com;

    location / {
        proxy_pass http://172.16.213.18;
    }
}

功能:访问 www.a.com 时,所有请求都会转发到后端 172.16.213.18:80

如需本地访问需要在C:\Windows\System32\drivers\etc\hosts加上本地域名解析

格式:虚拟机IP server_name

server {
    listen       80;
    server_name  www.a.com;

    location / {
        proxy_pass http://172.16.213.18;
    }
}

需注意防火墙是否关闭

systemctl status firewalld

成功就会代理到百度页面

5、典型反向代理实例

生产环境通常需要添加请求头、超时时间、缓冲区等优化配置:

server {
    listen       80;
    server_name  www.b.com;

    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;

        proxy_buffer_size  4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;

        proxy_pass http://172.16.213.77:5601;
    }
}

功能:访问 www.b.com → 转发到 172.16.213.77:5601同时透传真实 IP、设置超时、优化代理缓冲区,适合高并发生产环境。

6、Nginx 反向代理 URI 用法(重点:末尾 / 的区别)

proxy_pass 末尾是否带 /,会直接影响 URL 拼接结果,是最容易踩坑的地方。

(1)proxy_pass 带 /uri/ 且末尾有 /

server {
    server_name www.abc.com;
    location /uri/ {
        proxy_pass http://192.168.99.100:8000/new_uri/;
    }
}

访问:

http://www.abc.com/uri/iivey.html

实际转发:

http://192.168.99.100:8000/new_uri/iivey.html

(2)proxy_pass 只有 / 结尾

server {
    server_name www.abc.com;
    location /uri/ {
        proxy_pass http://192.168.99.100:8000/;
    }
}

访问:

http://www.abc.com/uri/iivey.html

实际转发:

http://192.168.99.100:8000/iivey.html

(3)proxy_pass 不带 / 结尾

location /uri/ {
    proxy_pass http://192.168.99.100:8000;
}

访问:

http://www.abc.com/uri/iivey.html

实际转发:

http://192.168.99.100:8000/uri/iivey.html

总结:

  • proxy_pass/ 结尾:会去掉 location 匹配的路径部分再拼接
  • proxy_pass 不带 / 结尾:会完整拼接原路径

六、Nginx URL 重写功能与内置变量

URL 重写(Rewrite)是 Nginx 最常用的高级功能之一,常用于伪静态、域名跳转、URL 规范化、访问控制等场景。本章主要介绍 Nginx 内置变量、if 判断、rewrite 重写规则、set 变量定义、break 终止规则等核心用法,是 Nginx 高级配置的必备知识点。

1、Nginx 内置变量

Nginx 提供大量内置变量,用于获取客户端、请求、服务器信息,在日志、rewrite、proxy_pass 中大量使用。

常用内置变量说明

  • $args:请求行中的参数(? 后面的内容)
  • $document_root:当前请求的 root 路径
  • $uri:不带参数的当前 URI
  • $document_uri:与 $uri 相同
  • $host:请求头中的 Host 字段
  • $limit_rate:限制连接速率
  • $request_method:请求方法(GET/POST)
  • $remote_addr:客户端 IP
  • $remote_port:客户端端口
  • $remote_user:认证用户名
  • $request_filename:当前请求的文件完整路径
  • $request_uri:包含参数的完整原始 URI
  • $query_string:与 $args 相同
  • $server_addr:服务器 IP
  • $server_name:服务器名称
  • $server_port:服务器端口

示例 1

URL:http://188.19.236.18:8000/abc?test=123&test2=abc

  • $argstest=123&test2=abc
  • $uri/abc
  • $server_addr188.19.236.18
  • $server_port8000
  • $request_uri/abc?test=123&test2=abc

示例 2

URL:http://172.16.213.199:88/test1/test2/test.php

假定虚拟主机根目录root:/var/www/html

  • $host172.16.213.199
  • $server_port88
  • $request_uri/test1/test2/test.php
  • $document_uri/test1/test2/test.php
  • $document_root/var/www/html
  • $request_filename/var/www/html/test1/test2/test.php

2、if 指令(条件判断)

if 用于条件匹配,满足条件则执行大括号内配置。

语法

if (condition) {
    ...
}

可使用在:serverlocation

正则匹配

  • ~:区分大小写匹配
  • ~*:不区分大小写匹配
  • !~!~*:不匹配

文件 / 目录判断

  • -f / !-f:判断文件是否存在
  • -d / !-d:判断目录是否存在
  • -e / !-e:判断文件或目录是否存在
  • -x / !-x:判断文件是否可执行

3、rewrite 指令(URL 重写)

Nginx 通过 ngx_http_rewrite_module 实现 URL 重写,依赖 PCRE 库。

语法

rewrite  正则  目标URL  标记;

标记(flag)说明

  • last:重写后继续匹配其他 location
  • break:执行后终止,不再继续匹配
  • redirect:返回 302 临时重定向
  • permanent:返回 301 永久重定向

rewrite 实例(新旧网站跳转 / 反向代理重写)

location ~ ^/new/ {
    rewrite ^/new/(.*)$ /old/$1 break;
    proxy_pass http://www.tb.com;
}

功能:访问 www.newtb.com/new/web.html→ 内部转发到 www.tb.com/old/web.html

浏览器地址栏不变,适合网站改版、新旧系统切换。


4、set 指令(自定义变量)

set 用于定义变量并赋值,常用于获取参数、拼接 URL。

语法

set $变量名 值;

set + if + rewrite 实现伪静态实例

location / {
    if ($query_string ~ "id=(.*)") {
        set $myid $1;
        rewrite ^/app.php$ /m-$myid.html?;
    }
}

功能:访问:www.abc.com/app.php?id=100跳转:www.abc.com/m-100.html

关键点:

  • $query_string 获取 URL 参数
  • set 将参数存入变量
  • 末尾 ? 作用:清除原有参数,避免附加在新 URL 后

5、break 指令(终止规则执行)

break 表示执行完当前规则后立即停止,不再执行后续 rewrite 规则。

语法

break;

break 实例(域名非法访问跳转)

server {
    listen 80;
    server_name www.tb.cn;

    if ($host != 'www.tb.cn') {
        rewrite ^/(.*)$ http://www.tb.cn/error.txt break;
        rewrite ^/(.*)$ http://www.tb.cn/$1 permanent;
    }
}

功能:

  • 若访问域名不是 www.tb.cn,直接跳转到 error.txt
  • 由于 break第二条 rewrite 不会执行
  • 若域名正确,则不进入 if,直接正常访问

七、Nginx 中虚拟主机配置实例

虚拟主机是 Nginx 最核心、最常用的功能之一,能够让一台服务器、一个 IP 地址,部署并运行多个独立网站,每个网站对应一个独立域名,互不干扰。

通过虚拟主机,可以极大提高服务器利用率,降低部署成本,是 Web 服务必备技能。

1、虚拟主机说明

  • 每个 server{} 就是一个虚拟主机,对应一个网站
  • 多个虚拟主机可以监听同一个端口(如 80)
  • Nginx 通过 server_name(域名)区分不同站点
  • 每个站点可以拥有独立的:
    • 网站根目录
    • 访问日志 / 错误日志
    • 首页文件
    • 访问规则、重写、代理等配置

2、多虚拟主机配置实例(3 个站点)

下面在 Nginx 中创建 3 个独立虚拟主机,分别对应 3 个不同域名,包含直接配置、独立文件引入两种方式。

以下配置位于 http{} 块内:

http {
    # 虚拟主机 1:www.domain1.com
    server {
        listen          80;
        server_name     www.domain1.com;
        access_log      logs/domain1.access.log main;
        
        location / {
            index index.html;
            root  /data/www/domain1.com;
        }
    }

    # 虚拟主机 2:www.domain2.com
    server {
        listen          80;
        server_name     www.domain2.com;
        access_log      logs/domain2.access.log main;
        
        location / {
            index index.html;
            root  /data/www/domain2.com;
        }
    }

    # 虚拟主机 3:通过 include 引入外部配置文件(推荐)
    include    /usr/local/nginx/conf/vhosts/www.domain3.conf;
}

3、配置说明

(1)虚拟主机 1 和 2

  • 直接在 nginx.conf 中编写 server{} 配置
  • 各自监听 80 端口
  • 通过 server_name 区分不同域名
  • 独立网站根目录:/data/www/domain1.com/data/www/domain2.com
  • 独立访问日志:domain1.access.logdomain2.access.log

(2)虚拟主机 3(include 引入)

include /usr/local/nginx/conf/vhosts/www.domain3.conf;
  • 将第 3 个站点的配置单独写在一个文件中
  • 通过 include 指令引入主配置
  • 优点:便于管理、维护、批量添加站点,生产环境标准用法

外部文件 www.domain3.conf 内容示例:

server {
    listen      80;
    server_name www.domain3.com;
    access_log  logs/domain3.access.log main;

    location / {
        root  /data/www/domain3.com;
        index index.html;
    }
}

八、Nginx 中负载均衡配置实例

Nginx 自带强大的负载均衡功能,可以将用户请求均匀分发到多台后端应用服务器,提高系统并发能力、可用性和容错能力。本章详细介绍 Nginx 支持的负载均衡调度算法、节点状态配置,并给出完整可直接使用的负载均衡实例。

1、Nginx 负载均衡调度算法

Nginx 内置 4 种负载均衡调度策略,其中后两种为第三方模块提供:

(1)轮询(默认)

请求按时间顺序逐一分配到不同后端服务器。如果某台服务器宕机,会自动剔除,不影响用户访问。

(2)weight(权重轮询)

为每个后端节点设置权重值 weight,值越大被分配到的概率越高。适用于后端服务器性能不均的场景,性能好的节点可以设置更高权重。

(3)ip_hash

根据客户端 IP 的 hash 结果分配后端节点。来自同一个 IP 的用户会固定访问一台后端服务器,有效解决 Session 共享问题

(4)fair(第三方)

根据后端服务器的响应时间分配请求,响应越快优先分配。Nginx 默认不支持,需额外安装 upstream_fair 模块。

(5)url_hash(第三方)

根据访问 URL 的 hash 结果分配请求,同一个 URL 固定指向同一台后端。适合缓存类场景,提升缓存效率。Nginx 默认不支持,需安装第三方 hash 模块。


2、后端节点状态参数

upstream 中可以通过 server 指令设置节点状态:

  • down:当前服务器暂时不参与负载均衡
  • backup:备用节点,仅当其他非 backup 节点全部故障时才启用
  • max_fails:允许失败的最大次数,默认 1
  • fail_timeout:达到 max_fails 后,节点被暂停的时间

注意:使用 ip_hash 调度算法时,后端节点不能配置 weight 和 backup


3、Nginx 负载均衡完整配置实例

  • 负载均衡服务器:192.168.12.189
  • 后端 3 台 Web 服务器:
    • 192.168.12.181:80
    • 192.168.12.182:80
    • 192.168.12.183:80
  • 使用权重轮询实现负载均衡

配置如下(只展示 httpserver 核心部分):

http {
    # 定义后端服务器集群
    upstream myserver {
        server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;
        server 192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;
        server 192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;
    }

    # 对外提供服务的虚拟主机
    server {
        listen  80;
        server_name www.domain.com 192.168.12.189;
        index index.htm index.html;
        root /data/web/wwwroot;

        location / {
            # 转发请求到 upstream 集群
            proxy_pass http://myserver;

            # 出现指定错误时自动切换下一台后端
            proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;

            # 引入代理相关配置
            include /usr/local/nginx/conf/proxy.conf;
        }
    }
}

4、配置说明

  1. upstream myserver定义一个名为 myserver 的后端服务器池,所有请求通过 proxy_pass 转发到此。

  2. weight 权重三台节点权重分别为 3、1、4,权重越高分配请求越多。

  3. max_fails=3 + fail_timeout=20s一台节点失败 3 次后,Nginx 会在 20 秒内不再向其转发请求,提高可用性。

  4. proxy_next_upstream当出现 500/502/503、超时、错误等情况时,自动将请求转发给下一台正常节点。

  5. include proxy.conf引入通用代理配置(如请求头、超时、缓冲区等),便于统一维护。

九、Nginx +Tomcat架构与应用案例

1、Nginx +Tomcat整合的必要性     

Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tmcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。 Nginx可以通过两种方式来实现与Tomcat的耦合。

将静态页面请求交给Nginx,动态请求交给后端Tomcat处理。                                                        将所有请求都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能,进行多台Tomcat服务器的负载均衡。

2、Nginx +Tomcat的常见架构     

Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tmcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。 Nginx可以通过两种方式来实现与Tomcat的耦合。     

将静态页面请求交给Nginx,动态请求交给后端Tomcat处理。                                                        将所有请求都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能,进行多台Tomcat服务器的负载均衡。

3、环境准备:JDK 与 Tomcat 安装部署

在配置 Nginx + Tomcat 架构前,需先确保后端 Tomcat 服务正常运行。以下以 JDK1.8 和 Tomcat8.5.30 为例进行安装。

(1)安装 JDK(Java 运行环境)

将 JDK 压缩包上传至服务器 /data 目录,执行解压与环境变量配置:

# 1. 创建安装目录
mkdir /usr/java

# 2. 解压 JDK 到安装目录
tar -xvf jdk-8u201-linux-x64.tar.gz -C /usr/java

# 3. 配置环境变量(修改 /etc/profile)
vi /etc/profile

# 添加以下内容到文件末尾
export JAVA_HOME=/usr/java/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$PATH

# 4. 生效环境变量并验证
source /etc/profile
java -version

验证成功输出:

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

(2)安装 Tomcat(二进制解压版)

将 Tomcat 压缩包上传至服务器 /data 目录,解压即可完成部署:

# 1. 解压 Tomcat 到 /usr/local 目录
tar -xvf apache-tomcat-8.5.30.tar.gz -C /usr/local

# 2. 重命名目录(方便管理)
mv /usr/local/apache-tomcat-8.5.30 /usr/local/tomcat

# 3. 启动 Tomcat
cd /usr/local/tomcat/bin/
./startup.sh

(3)验证 Tomcat 安装

浏览器访问 http://服务器IP:8080,若看到 Apache Tomcat 官方欢迎页面,说明部署成功。

4、Nginx + Tomcat 动静分离配置实例

核心原理:Nginx 直接处理静态资源(图片、Html、JS、CSS),动态请求(JSP、Do)转发给 Tomcat 处理。配置目标

  • 匹配 /img/、静态文件后缀 → Nginx 本地读取
  • 匹配 .jsp.do → 转发给 Tomcat (192.168.12.130:8080)

完整配置代码(nginx.confserver 块):

server { 
    listen 80; 
    server_name www.ixdba.net; 
    root /web/www/html; # 静态资源根目录

    #  location 1: 处理静态图片资源
    location /img/ { 
        alias /web/www/html/img/; 
    }

    #  location 2: 处理动态 JSP/Do 请求
    location ~ (\.jsp)|(\.do)$ { 
        proxy_pass http://192.168.12.130:8080; 
        proxy_redirect off;
        
        # 透传真实 IP 给后端 Tomcat
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # 性能优化配置
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
    } 
} 

重点知识点:Root 与 Alias 区别

这是最容易混淆的点,必须区分使用:

指令 配置示例 访问 /i/logo.gif 实际查找路径 说明
alias location /i/ { alias /dir/; } /dir/logo.gif 替换路径。location 路径被丢弃,只追加后续文件名
root location /i/ { root /dir/; } /dir/i/logo.gif 拼接路径。location 路径保留,追加到根目录后

实战建议

  • location / 全局根目录配置使用 root
  • 在特定子目录匹配(如 /img/)中,使用 alias 精准定位目录。

5、Nginx + Tomcat 多 Tomcat 负载均衡配置实例

核心原理:Nginx 作为负载均衡器,将请求分发到多台 Tomcat 节点,实现高可用和高并发。集群架构

  • 节点 1:192.168.12.131:8000
  • 节点 2:192.168.12.132:8080
  • 节点 3:192.168.12.133:8090
  • 调度算法:ip_hash(固定访问同一台后端,解决 Session 共享)

完整配置代码(nginx.conf 核心部分):

http {
    # 1. 定义后端 Tomcat 集群池
    upstream  mytomcats { 
        # 指定后端节点及端口
        server 192.168.12.131:8000; 
        server 192.168.12.132:8080;
        server 192.168.12.133:8090;
        
        # 调度算法:根据客户端 IP 哈希,确保同 IP 固定访问同一台
        ip_hash;
    }

    # 2. 虚拟主机配置
    server { 
        listen 80; 
        server_name www.ixdba.net; 

        # 静态资源匹配(交由 Nginx 直接处理)
        location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { 
            root /web/www/html/; 
        }
        
        # 3. 所有非静态请求转发到 Tomcat 集群
        location / {
            proxy_pass http://mytomcats; # 转发到 upstream 定义的集群
            include    /usr/local/nginx/conf/proxy.conf; # 引入通用代理配置
        } 
    }
}

4、扩展:通用负载均衡架构(多 IP 集群)

如果你有三台 Tomcat 部署在同一 IP 段(如 172.16.213 网段),配置方式如下:

http {
    # 定义后端服务器组
    upstream  myserver {
        server  172.16.213.233:8080 max_fails=3 fail_timeout=20s;
        server  172.16.213.236:8080 max_fails=3 fail_timeout=20s;
        server  172.16.213.237:8080 max_fails=3 fail_timeout=20s;
    }

    server {
        listen 80;
        server_name www.web.com; # 域名或 IP
        access_log logs/web.access.log main;

        # 静态资源处理
        location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
            root /web/www/html/;
        }
        
        # 动态请求转发
        location / {
            proxy_pass http://myserver;
            include /usr/local/nginx/conf/proxy.conf;
        }
    }
}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐