Nginx入门教程:简介、安装配置、静态资源部署
一、简介
1. 什么是Nginx?
Nginx(发音为“engine-x”)是一款开源的高性能HTTP服务器和反向代理服务器,还支持IMAP/POP3/SMTP邮件代理功能。它最初由俄罗斯程序员Igor Sysoev开发,并于2004年正式发布。Nginx因其高并发处理能力、高可靠性和低资源消耗而闻名,已成为全球最流行的Web服务器之一。
Nginx的设计旨在解决高并发连接的问题。与传统的进程或线程池模型的服务器相比,Nginx使用了异步、事件驱动的架构,能够更有效地处理大量并发请求。因此,Nginx常被用于需要处理高流量的网站和应用中,如静态内容服务、反向代理、负载均衡等。
2. Nginx的主要功能和应用场景
主要功能:
- 静态文件服务:Nginx非常适合用于提供静态文件(如HTML、CSS、JavaScript、图片等)。其文件读取和传输速度非常快,尤其适合用于CDN(内容分发网络)中。
- 反向代理:作为反向代理服务器,Nginx可以将客户端的请求转发到后端的应用服务器,并支持负载均衡、缓存、SSL终止等功能。这通常用于分发HTTP请求,减轻后端服务器的压力。
- 负载均衡:Nginx可以在多台后端服务器之间分发请求,从而提高系统的可扩展性和可靠性。支持多种负载均衡算法,如轮询、最少连接数、IP哈希等。
- HTTP缓存:Nginx可以缓存后端服务器的响应,减少后端服务器的负载并加快响应速度。它可以作为Web加速器,显著提升动态网站的性能。
- SSL/TLS 支持:支持HTTPS,可以用于加密HTTP流量,并能够实现SSL终止,即Nginx可以处理加密流量,然后将解密后的请求转发给后端服务器。
- WebSocket支持:Nginx可以处理WebSocket协议的反向代理,非常适合用于实时应用,如聊天室和在线游戏。
应用场景:
- 静态网站托管:通过Nginx托管静态网站,如企业官网、个人博客等。
- 反向代理和负载均衡:为动态应用(如Node.js、Django、Flask等框架的应用)提供反向代理和负载均衡支持。
- 内容分发网络(CDN):作为CDN服务器,提供全球范围内的内容分发服务。
- API网关:为微服务架构中的各个服务提供统一的入口和管理。
- 应用服务器前端:Nginx常作为应用服务器(如Apache、Tomcat、Node.js等)的前端服务器,处理静态资源请求和SSL加密,减轻后端服务器的负担。
3. Nginx的工作原理
Nginx采用事件驱动架构,其工作原理包括以下几个方面:
- 事件驱动的异步架构:Nginx使用异步非阻塞的方式处理请求,每个请求被分配一个事件,Nginx通过事件循环来监听和处理这些事件,而不是为每个请求创建独立的线程或进程。这种设计使Nginx能够处理大量并发连接,避免了上下文切换和线程管理的开销。
- 多进程模型:Nginx通常会启动一个主进程(master process)和多个工作进程(worker processes)。主进程负责管理工作进程,处理配置文件的加载和重载,工作进程负责实际处理客户端的请求。每个工作进程是独立的,这意味着如果一个进程崩溃,其他进程仍然可以继续服务。
- 模块化架构:Nginx的功能通过模块化方式实现。核心功能包括HTTP服务器、反向代理和邮件代理功能,其它功能如负载均衡、缓存、SSL支持等通过加载相应的模块来实现。这种设计使得Nginx可以根据需求进行定制化配置,提供更高的性能和可扩展性。
- 高效的内存管理:Nginx使用专门设计的内存池来管理内存,使得内存分配和释放效率高,并减少内存碎片。
- 非阻塞I/O:Nginx使用非阻塞I/O操作处理网络通信,这使得它可以在等待网络数据时执行其他任务,而不会因为等待I/O操作而阻塞整个进程,从而提高了在高并发场景下的性能。
二、Nginx 安装与配置
1. 安装Nginx
Nginx的安装相对简单,支持多种操作系统。以下是常见的安装方式:
1.1 在不同操作系统上的安装
✅Windows:
- 访问 Nginx官网 下载适用于Windows的版本。

- 解压下载的文件。
- 进入解压后的目录,双击
nginx.exe文件启动Nginx。
Linux:
在大多数Linux发行版中,Nginx可以通过包管理器安装:
- Debian/Ubuntu:
sudo apt update
sudo apt install nginx
- CentOS/RHEL:
sudo yum install epel-release
sudo yum install nginx
- Fedora:
sudo dnf install nginx
- macOS:
使用Homebrew安装:
brew install nginx
1.2 通过包管理器安装
使用包管理器安装Nginx是最常见的方法,能够自动处理依赖关系并简化安装过程。根据操作系统选择相应的命令执行即可。
2. 基本配置文件结构介绍
Nginx的配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。Nginx采用模块化配置方式,支持多个独立的配置文件。

2.1 主配置文件 nginx.conf 解析
nginx.conf 是Nginx的主配置文件,定义了全局配置以及HTTP、Server和Location块等。
nginx.conf 文件的典型结构:
# 全局块
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
# 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;
# 日志配置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Gzip 压缩配置
gzip on;
gzip_disable "msie6";
# Server 块配置
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
# 其他 location 块配置
location /images/ {
root /data;
}
}
# 其他Server块
include /etc/nginx/conf.d/*.conf;
}
2.2 配置块的作用和配置
events块: 配置Nginx的工作模式以及连接数限制,如worker_connections指定每个worker进程的最大连接数。http块: 配置HTTP服务器的全局属性,包括文件MIME类型定义、日志设置、Gzip压缩、连接超时等。server块: 定义虚拟主机配置,每个server块代表一个独立的网站或域名配置,指定监听端口、域名、根目录等。location块: 配置处理特定URL路径的规则,支持正则表达式匹配,用于定义不同路径的路由规则、权限控制、代理设置等。
三、Nginx 基本操作
3.1 ✅检查Nginx配置的正确性
在对Nginx配置文件进行任何修改之后,建议先检查配置的正确性,以确保没有语法错误或配置冲突。使用以下命令检查配置文件的语法和有效性:
nginx -t
- 解释:`nginx
-t命令会验证当前的nginx.conf`文件是否正确配置。如果有误,命令行会显示错误信息,帮助定位并修复配置问题。
3.2 ✅启动与停止Nginx
Nginx的启动和停止是基本的服务管理任务。不同操作系统下的命令略有不同。
3.2.1 启动Nginx
- ✅Windows系统:在Windows上,可以直接双击
nginx.exe文件,或在命令提示符(CMD)中进入Nginx的安装目录后,执行以下命令启动服务:
start nginx
- Linux系统:在Linux系统上,使用以下命令启动Nginx服务:
sudo nginx
3.2.2 停止Nginx
停止Nginx服务的方法如下:
- ✅Windows系统:使用以下命令停止Nginx:
nginx -s stop
- Linux系统:可以使用以下命令直接停止Nginx服务:
sudo nginx -s stop
或使用以下命令优雅地停止Nginx服务:
sudo nginx -s quit
3.3 重新加载配置
当对Nginx的配置文件进行了修改后,可以通过重新加载配置来应用新配置,而无需完全停止和启动Nginx服务,这样能避免服务中断。
- ✅Windows系统:使用以下命令重新加载配置:
nginx -s reload
- Linux系统:在终端中执行以下命令重新加载配置:
sudo nginx -s reload
3.4 日志管理
Nginx的日志管理功能有助于监控和排查服务器运行中的问题。Nginx提供两种主要日志:访问日志(Access Log)和错误日志(Error Log)。
3.4.1 访问日志
访问日志记录所有对Nginx服务器的请求信息,包括客户端IP地址、请求时间、请求方法、URL路径、返回状态码等。
- 查看访问日志:在Linux系统上,可以使用以下命令查看实时访问日志:
tail -f /path/to/nginx/logs/access.log
- 配置访问日志格式:可以在
nginx.conf文件中自定义访问日志格式:
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 /path/to/nginx/logs/access.log main;
3.4.2 错误日志
错误日志记录了Nginx运行过程中遇到的错误信息和事件,帮助管理员诊断和修复问题。
- 查看错误日志:在Linux系统上,可以使用以下命令查看实时错误日志:
tail -f /path/to/nginx/logs/error.log
- 配置错误日志级别:可以在
nginx.conf中设置错误日志级别,如debug、info、warn、error等:
error_log /path/to/nginx/logs/error.log warn;
四、Nginx 作为静态文件服务器
Nginx作为高效的Web服务器,常用于提供网站的HTML、CSS、JavaScript文件、图片等静态资源。通过简单的配置,Nginx可以高效地响应和处理静态文件请求。本章介绍如何配置Nginx作为静态文件服务器。
4.1 配置Nginx为静态文件服务
通过配置server块定义静态文件服务。以下是一个基本的配置示例:
示例 nginx.conf 配置:
server {
listen 80; # 监听端口,默认为80
server_name localhost; # 服务器名称
location / {
root /path/to/your/static/files; # 静态文件的根目录
index index.html index.htm; # 默认文件
}
}
- 解释:上述配置将所有请求指向位于
/path/to/your/static/files目录下的文件,并在目录访问时默认显示index.html或index.htm文件。
4.2 使用 alias 和 root 指令
alias和root指令都用于指定Nginx静态文件的根目录,但它们的工作方式略有不同。
4.2.1 root 指令
root指令设置基本根目录,并使用请求的URI定位文件。例如:
location /images/ {
root /data/www;
}
- 解释:以上配置将
/images/请求映射到/data/www/images/目录。例如,请求http://yourdomain.com/images/pic.jpg指向/data/www/images/pic.jpg文件。
4.2.2 alias 指令
alias指令用于为特定的URI路径指定替代目录。它直接将URI映射到指定目录,而不追加原始URI路径。例如:
location /images/ {
alias /data/images/;
}
- 解释:以上配置将所有
/images/请求映射到/data/images/目录。例如,请求http://yourdomain.com/images/pic.jpg指向/data/images/pic.jpg文件。 - 注意:
alias指令应与尾随斜杠/一起使用,否则可能导致路径解析问题。
4.3 开启目录浏览(autoindex)
启用目录浏览功能后,访问目录时Nginx会自动生成一个包含该目录中文件列表的网页,方便开发和调试。
配置示例:
server {
listen 80;
server_name localhost;
location / {
root /path/to/your/static/files;
autoindex on; # 开启目录浏览功能
autoindex_exact_size off; # 禁用文件大小精确显示(可选)
autoindex_localtime on; # 显示本地时间(可选)
}
}
- 解释:设置
autoindex on;启用目录浏览功能。如果禁用文件大小精确显示(例如字节),设置autoindex_exact_size off;。autoindex_localtime on;显示文件的本地时间。
4.4 设置默认文件(如 index.html)
在Nginx中,index指令用于指定目录请求的默认文件。当用户请求一个目录而没有指定具体文件名时,Nginx会返回配置的默认文件。
配置示例:
server {
listen 80;
server_name localhost;
location / {
root /path/to/your/static/files;
index index.html index.htm default.html; # 设置默认文件
}
}
- 解释:在配置中,当用户请求一个目录(例如
http://yourdomain.com/)时,Nginx将依次查找index.html、index.htm和default.html,并返回找到的第一个文件。
五、实践:使用Nginx静态代理发布3D Tiles数据
为了使用Nginx来静态代理3D Tiles数据,无需复杂的部署或发布程序,只需将数据放在Nginx服务器上,并配置静态文件代理即可。以下是具体步骤和配置示例。
1. Nginx配置静态代理
首先,在Nginx的配置文件(nginx.conf)中添加一个新的server块,用于监听特定端口并指定数据文件的路径。
示例 nginx.conf 配置:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# 定义日志格式
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 logs/access.log main;
# 启用错误日志
error_log logs/error.log;
sendfile on;
keepalive_timeout 65;
server {
listen 8090;
server_name localhost;
# 设置跨域请求头
add_header Access-Control-Allow-Origin "$http_origin";
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken
,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
# 处理OPTIONS请求方法
if ($request_method = 'OPTIONS') {
return 204;
}
# 配置静态文件目录
location / {
autoindex on;
root D:/AOMEN3DTILES;
}
# 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
配置好nginx.conf文件后,双击nginx.exe即可启动Nginx服务。
验证服务是否运行:
打开浏览器,输入http://localhost:8090/,如果可以看到目录索引或3D Tiles数据文件列表,说明Nginx已经成功运行并提供服务。

2. 在前端Cesium中加载3D Tiles数据
在前端使用Cesium加载3D Tiles数据时,创建一个 Cesium3DTileset 对象,并将其添加到 viewer.scene.primitives 中。
示例代码:
// 创建Cesium Viewer实例
const viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain(),
shouldAnimate: true,
animation: false,
timeline: false,
baseLayerPicker: false,
geocoder: false,
homeButton: false,
sceneModePicker: false,
selectionIndicator: false,
navigationHelpButton: false,
fullscreenButton: false,
});
const tileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: "/api/tileset.json",
maximumScreenSpaceError: 1,
})
);
// 禁用地形深度测试,避免地形遮挡问题
viewer.scene.globe.depthTestAgainstTerrain = false;

1.本网站名称:柒柒零分享窝
2.本站永久网址:https://www.770a.cn/
3.本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ825703967进行删除处理。
4.本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5.本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6.如无特别声明本文即为原创文章仅代表个人观点,版权归《柒柒零分享窝》所有,欢迎转载,转载请保留原文链接。
7.本站作品采用: 《 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 》许可协议授权
