新闻详情

新闻详情

首页 / 资讯中心 / 详情

Nginx 保姆级教程:从系统安装到反向代理与生产加固

发布时间:2026/9/30 3:09:01来源:尧图网络
Nginx 保姆级教程:从系统安装到反向代理与生产加固
第一次在一台空 Linux 服务器上跑起 Nginx跟我预想的完全不一样。装包本身确实只有一条命令但接下来你会面对端口被占用、nginx 起不来、目录没权限、后端程序连不通甚至防火墙把 80 端口挡死的各种破事。这篇文章我按“保姆级”的粒度整理出来从装前比较、系统包安装、源码编译、配置结构、反向代理实战到上生产前的那几项默认改动尽量做到你跟着敲一遍就能跑通。后面写的每一个坑都是我真金白银踩过的。1. 安装前的三件事别急着敲命令1.1 先弄清你的 Linux 发行版和包管理器很多人上来就直接apt install nginx结果发现自己用的是 CentOS报错报得莫名其妙。先花十秒钟确认系统能省掉后面一小时的排错时间。cat /etc/os-release uname -m第一条命令告诉你发行版和版本号第二条告诉你架构是 x86_64 还是 aarch64。这两个信息直接决定你用什么包管理器、该不该走源码编译、以及能不能直接拉官方二进制仓库。不同发行版的包管理器差别很大装 Nginx 之前至少要心里有数发行版包管理器安装命令配置主目录Debian / Ubuntuaptsudo apt install nginx/etc/nginxCentOS / Rocky / Almadnf / yumsudo dnf install nginx/etc/nginxopenSUSEzyppersudo zypper install nginx/etc/nginxArch Linuxpacmansudo pacman -S nginx/etc/nginx如果你不确定系统里到底有哪些包管理器也可以用command -v apt dnf yum zypper pacman一条命令带出来。对绝大多数云服务器来说不是 apt 就是 dnf认准这两个就够了。1.2 想清楚用系统包还是源码编译这是安装方式的分岔路口也是我这篇文章要重点讲的。系统包管理器安装的好处是省事依赖自动处理卸载也干净版本跟随发行版仓库走。缺点是版本往往偏旧比如某些 LTS 系统自带的 Nginx 可能还在 1.18老一点的功能没有想加第三方模块也不方便。源码编译安装的好处是版本新、可定制性强./configure里想开哪个模块就开哪个模块适合对功能有明确要求的场景。缺点是升级要靠自己依赖库也要自己装第一次编译容易栽在缺依赖上。还有一个折中方案用 Nginx 官方软件源。它介于两者之间包管理器帮你管依赖版本又比系统源新很多。我现在的主力服务器大多走这条路只有需要定制模块的时候才源码编译。对新手来说建议先用系统包管理器跑通理解配置结构之后再去折腾源码编译。别一上来就挑战高难度容易打击信心。1.3 检查端口、更新系统、备好依赖安装前还要做两次体检。第一看端口80 和 443 是否被占sudo ss -tlnp | grep -E :80|:443如果已经有 Apache 或者其他 Web 服务占着要么先停掉要么就让 Nginx 换端口。我曾经遇到过一台机器上 Apache 和 Nginx 抢 80 端口两个服务都处于半残状态日志里全是 bind 失败的报错。先确认端口能避掉这个经典问题。第二更新系统包索引# Debian/Ubuntu sudo apt update sudo apt upgrade -y # CentOS/Rocky/Alma sudo dnf update -y别嫌这一步慢系统源里的软件包索引要是太旧装出来的东西很可能和系统库版本对不上。如果你打定主意走源码编译那还要提前把编译工具链和依赖库装好。Debian/Ubuntu 上是这样sudo apt install build-essential libpcre3-dev zlib1g-dev libssl-dev -yCentOS/RHEL 上是这样sudo dnf groupinstall Development Tools -y sudo dnf install pcre-devel zlib-devel openssl-devel -y这几个库后面都会用到pcre 处理正则和 rewrite 规则zlib 负责 gzip 压缩openssl 提供 TLS/SSL 支持。缺了哪个编译的时候都会准时报错。2. 最省事的路径用包管理器装 Nginx2.1 Debian/Ubuntu 系列如果确认了系统是 Debian 或 Ubuntu安装命令就两条sudo apt update sudo apt install nginx -y装完之后顺手验证一下版本nginx -v然后启动并设置开机自启sudo systemctl enable --now nginx sudo systemctl status nginx看到active (running)就说明服务起来了。这时候浏览器直接访问服务器 IP如果能看到 Nginx 的默认欢迎页说明 80 端口已经通了。这里要提醒一下 Debian/Ubuntu 和 CentOS 的目录结构差异。Debian 系的 Nginx 会把主配置放在/etc/nginx/nginx.conf但真正管理站点时你基本不会去动这个主配置而是把站点配置写到/etc/nginx/sites-available/然后在/etc/nginx/sites-enabled/里创建软链接sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com这种设计的好处是“启用/禁用站点”非常直观不需要删除文件直接移掉软链接就行。我维护多站点的服务器时靠的就是这套机制。2.2 CentOS/RHEL 系列CentOS 或者 Rocky Linux 用 dnf 装sudo dnf install nginx -y sudo systemctl enable --now nginxCentOS 系默认的网站根目录在/usr/share/nginx/html配置文件主目录同样是/etc/nginx但站点配置习惯放在/etc/nginx/conf.d/下文件名通常叫*.conf。比如我建一个/etc/nginx/conf.d/example.conf里面写一个 server 块Nginx 启动时会自动读取。如果你是从 Debian 转过来的别把 sites-available 那套软链接思路直接套到 CentOS 上在 conf.d 里放文件就行目录结构不同但效果一样。2.3 用 Nginx 官方软件源获取更新版本系统源里的 Nginx 版本通常偏旧如果你需要更新一些的特性直接上官方源。以 Debian 为例操作不复杂curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg echo deb [signed-by/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/debian/ bookworm nginx | sudo tee /etc/apt/sources.list.d/nginx.list sudo apt update sudo apt install nginx -yCentOS 系则是在/etc/yum.repos.d/nginx.repo里写一个仓库文件[nginx-stable] namenginx stable repo baseurlhttps://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue然后sudo dnf install nginx -y就能装到官方稳定版。我个人的习惯是如果只是跑个静态站或者简单反向代理系统包就够了如果需要新版特性用官方源只有要改编译参数或内置第三方模块时才去源码编译。别一上来就把工具链往死里用。3. 想要完全可控走一遍源码编译3.1 下载、校验、解压源码编译听起来吓人走一遍之后你会发现它反而更透明。先去官网下载稳定版别下主线版。主线版功能新但稳定性没经过大规模线上环境验证生产环境我从不碰。wget https://nginx.org/download/nginx-1.26.2.tar.gz tar -xf nginx-1.26.2.tar.gz cd nginx-1.26.2下载完最好校验一下文件完整性linux 上可以用sha256sum对一下官网给出的值防止下载过程损坏或被人动过手脚。这一步有点偏安全洁癖但养成了习惯之后你下载任何关键软件包都会顺手做一次。3.2 装齐编译依赖如果前面 1.3 里已经把依赖装好了这里可以跳过。但如果你想确保万无一失Debian/Ubuntu 上再补一条sudo apt install build-essential libpcre3-dev zlib1g-dev libssl-dev -yCentOS/RHEL 对应sudo dnf groupinstall Development Tools -y sudo dnf install pcre-devel zlib-devel openssl-devel -y这些库之所以必须在 configure 之前装好是因为 Nginx 本身不是一个“完全自包含”的软件它需要外部库来提供正则、压缩和加密能力。缺了 pcrerewrite 模块直接编译失败缺了 openssl--with-http_ssl_module就是空中楼阁。3.3 configure 参数怎么选这是源码编译的核心环节。./configure的参数决定了你编译出来的 Nginx 有哪些功能。我常用的参数组合如下./configure \ --prefix/usr/local/nginx \ --userwww-data \ --groupwww-data \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-stream逐个解释一下我为什么开这些--prefix/usr/local/nginx安装目录。所有编译出来的文件都会进这个目录卸载时直接删这个文件夹就行。--userwww-data --groupwww-data指定 Nginx worker 进程的运行用户。www-data 是 Debian/Ubuntu 上 Web 服务常用的低权限用户CentOS 上也可以改用 nginx 用户。--with-http_ssl_moduleHTTPS 必须没有它配置listen 443 ssl会直接报错。--with-http_v2_moduleHTTP/2 支持现代站点建议打开。--with-http_realip_module当你前面挂了 CDN 时用这个模块拿真实客户端 IP不然日志里全是 CDN 节点地址。--with-http_stub_status_module提供/nginx_status页面查看连接数统计用的。--with-streamTCP/UDP 四层代理模块有时要用它转发 MySQL、Redis 这类非 HTTP 服务。配置完成后执行编译make -j$(nproc) sudo make install-j$(nproc)是让系统用所有 CPU 核心并行编译速度快很多。等到编译完成Nginx 就装在了/usr/local/nginx目录下二进制文件在/usr/local/nginx/sbin/nginx。3.4 让源码版也能被 systemd 托管系统包安装的 Nginx 会自动注册 systemd 服务源码版不会。这一步必须手动补上不然每次开机你都要自己去敲命令启动。创建/etc/systemd/system/nginx.service写入[Unit] Descriptionnginx - high performance web server Documentationhttps://nginx.org/en/docs/ Afternetwork-online.target remote-fs.target nss-lookup.target Wantsnetwork-online.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStartPre/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart/usr/local/nginx/sbin/nginx ExecReload/usr/local/nginx/sbin/nginx -s reload ExecStop/usr/local/nginx/sbin/nginx -s quit PrivateTmptrue [Install] WantedBymulti-user.target然后重载 systemd 并启动sudo systemctl daemon-reload sudo systemctl enable --now nginx这里的Typeforking很关键因为 Nginx 主进程启动后会 fork 出 worker 进程主进程退到后台运行systemd 需要靠 PIDFile 来跟踪主进程状态。源码编译这条路我建议在工作目录里保留一份 configure 参数记录。Nginx 升级版本时要重新 configure参数丢了就只能照着以前的记忆去猜非常痛苦。4. 配置文件拆解nginx.conf 是分层的4.1 主配置整体长什么样先看/etc/nginx/nginx.conf的主干或者源码版对应的/usr/local/nginx/conf/nginx.conf。无论哪个版本整个配置文件都是分层的user www-data; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }结构上最大的块是http所有跟 Web 请求相关的指令都写在里面。events块负责网络连接模型相关配置。最外层则是一些进程级配置。理解 Nginx 配置的关键在于“继承与覆盖”。子块会继承父块的设置也能在子块里覆盖父块的值。比如http里设置了gzip on;所有 server 默认都开 gzip某个 server 如果设置gzip off;它就局部关掉。这种设计让配置非常灵活但也意味着你要时刻清楚自己改的是哪一层。4.2 高频指令和它的实际作用主配置里有些指令你可能天天见到但未必清楚它们是干什么的sendfile on;启用内核态的 sendfile 传输方式让文件不经过用户态缓冲区直接从磁盘发给网卡静态文件场景下效率提升很明显。keepalive_timeout 65;客户端长连接保持时间。太短会导致频繁重建连接太长会占用连接资源。普通网站 65 秒够用。gzip on;开启响应压缩文本类内容体积能下降 60% 以上。client_max_body_size默认只有 1M。如果做文件上传不调这个值就会遇到 413 错误。include /etc/nginx/mime.types;把文件后缀和 Content-Type 的映射表引进来否则访问 CSS 或 JS 文件时会返回错误的 MIME 类型浏览器就拒绝执行。4.3 把配置拆到独立文件不要全堆在 nginx.conf新手最常见的错误是往 nginx.conf 里疯狂堆 server 块堆到几百行之后想改动一个站点都心惊肉跳。正确的做法是给每个站点写一个独立配置文件。Debian 系用sites-available/sites-enabled双目录机制CentOS 系直接用conf.d。我更喜欢双目录机制。它的好处是“启用”和“禁用”在文件系统层面就分开了。上线新站点时我在 sites-available 写完配置复查一遍没问题再创建软链接到 sites-enabled这样 Nginx 一重载就生效要临时下线站点删掉软链接就行原配置还在 sites-available 里留着随时可以恢复。如果你用自动化部署工具管理服务器conf.d 风格更省事直接把配置文件推上去就行。两种风格没有绝对优劣挑一种坚持用下去就好。4.4 任何修改后都要 nginx -t这是本文最重要的一句话每次改完配置文件都要先检查语法再重载别直接systemctl restart nginx。sudo nginx -t这条命令会对配置做语法检查。如果输出syntax is ok和test is successful再执行重载sudo systemctl reload nginxreload和restart有本质区别。restart会先停掉 Nginx 再启动这个瞬间所有连接都会断开reload则是主进程重新读配置文件然后平滑地把新的 worker 进程拉起来老的 worker 处理完手头请求再退出。做线上服务能用 reload 就别用 restart。5. 从静态站点到反向代理几个高频场景配置实战5.1 场景一一个纯静态站点最简单也最典型的场景。创建一个站点配置比如/etc/nginx/sites-available/example.comserver { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html; location / { try_files $uri $uri/ /index.html; } }这里root指向站点文件所在目录index指定默认首页文件名。try_files的含义是先尝试请求的 URI 对应的文件再尝试对应目录下的 index 文件都找不到就内部重写到/index.html。对于静态站和前端单页应用这一行特别关键。配套操作是把目录权限搞对sudo mkdir -p /var/www/example.com sudo chown -R $USER:www-data /var/www/example.com sudo chmod -R 750 /var/www/example.com注意权限。Nginx 的 worker 进程是以 www-data 用户跑的如果文件所有者和权限不对就会出现“浏览器 403 或 404但服务器上文件明明存在”的诡异问题。权限给 750 足够别图省事直接 777安全上属于给自己挖坑。5.2 场景二反向代理到 Node.js / Python 后端前端静态页面由 Nginx 直接处理后端接口反向代理给 Node.js 或者 Python 进程这是目前最常见的架构。server { listen 80; server_name api.example.com; location /api/ { proxy_pass http://127.0.0.1:3000/; 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_set_header X-Forwarded-Proto $scheme; } }这段配置里有个容易踩坑的细节proxy_pass http://127.0.0.1:3000/;末尾的斜杠。有斜杠和无斜杠转发规则完全不同。带斜杠/api/user会被转发成/user相当于把/api前缀剥掉。不带斜杠/api/user会被原样转发成/api/user。我第一次用的时候就是没搞懂这个斜杠规则后端接口 404 了半天。你先想希望后端看到什么样的路径再决定加不加斜杠。如果后端是 WebSocket 应用比如即时通信、看板实时更新还需要加上升级头location /ws/ { proxy_pass http://127.0.0.1:3000/ws/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; }WebSocket 要求 HTTP 1.1 和显式的 Upgrade 头部不加这两行WebSocket 连接大概率握手失败。还要注意超时配置。默认的proxy_read_timeout只有 60 秒如果后端处理耗时超过 60 秒前端就会收到 504。做文件上传或导出报表这类接口建议把超时调长proxy_connect_timeout 60s; proxy_read_timeout 300s;5.3 一个请求是 HTTP 时怎么跳到 HTTPS如果你已经配好了 SSL 证书通常会做强制跳转。这个配置独立写一个监听 80 端口的 server 块server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; root /var/www/example.com; index index.html; }return 301是 301 永久重定向后面跟的$host和$request_uri是两个内置变量会拼出完整的原始请求地址。这样用户即使敲了http://example.com/foo也会被原样跳到https://example.com/foo。证书我只用了 Let‘s Encrypt 举例。实际想自定义证书没问题ssl_certificate指公钥证书文件ssl_certificate_key指私钥文件路径换成自己的就行。5.4 场景三多个域名共用一台服务器一台服务器部署多个站点只需要写多个 server 块靠server_name区分。Nginx 会根据请求头里的 Host 字段决定把请求送到哪个 server 块。server { listen 80; server_name a.example.com; root /var/www/site_a; } server { listen 80; server_name b.example.com; root /var/www/site_b; }看起来简单但有个坑如果请求的 Host 和所有server_name都不匹配Nginx 会走向第一个 server 块。也就是说直接访问服务器 IP 的请求总是会落到配置里排在最前面的那个站点上。解决办法是在那个默认 server 块里加一句return 444;直接断开不属于任何已知域名的请求server { listen 80 default_server; server_name _; return 444; }default_server指定这个块为默认块return 444是 Nginx 的特殊响应码直接关闭连接不加任何响应。放在最前面能挡住大量扫描端口的恶意流量。5.5 场景四upstream 做负载均衡如果你有两台以上后端服务器可以用 upstream 把它们组成一个组upstream backend { server 192.168.1.11:8000 weight3; server 192.168.1.12:8000 weight1; server 192.168.1.13:8000 backup; keepalive 32; } server { listen 80; server_name api.example.com; location / { proxy_pass http://backend; } }这里默认用轮询算法weight3是指让第一台服务器承担三倍于第二台的流量。backup那台只有前面两台都挂了才会接管属于灾备角色。keepalive 32;是建立到后端的长连接缓存减少频繁创建 TCP 连接的开销。注意proxy_pass http://backend;后面没有路径这样请求 URI 会原样转发给后端的每一台机器不会被剥掉前缀。负载均衡场景下保持 URI 原样比任何前缀裁剪都更稳妥。6. 装机后必然要过的三关防火墙、权限和 systemd 日志6.1 防火墙放行 80/443装好 Nginx 之后很多人都会遇到“本机 curl 有响应外网死活连不上”的问题。十有八九是防火墙没放行。Debian/Ubuntu 上常见的 ufw 防火墙执行sudo ufw allow Nginx Full这个Nginx Full是 ufw 的应用配置文件会自动放行 80 和 443 两个端口。也可以手动精确放行sudo ufw allow 80/tcp sudo ufw allow 443/tcpCentOS/Rocky 上用的是 firewalldsudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps sudo firewall-cmd --reload还有最后一个关卡也是最容易被忽略的云服务商的安全组。阿里云、腾讯云、AWS 都有自己的安全组规则就算服务器内部防火墙全开了安全组不放行 80 和 443外网照样访问不了。排查这个问题有个标准顺序先curl 127.0.0.1确认 Nginx 在跑再curl 服务器内网IP确认本机网络栈正常最后从外部机器curl 公网IP。前两步通、最后一步不通问题九成出在防火墙或安全组。6.2 权限和 SELinux 拦路虎第一关过去之后第二关是权限。Nginx 跑的是www-data用户或nginx用户但很多时候网站文件是你用 root 账号传上去的默认权限只有 root 能读Nginx 自然读不到。表现为浏览器 403但服务器上一切正常。解决思路是把网站目录的所有权交给当前用户和 Web 用户共同管理sudo chown -R $USER:www-data /var/www/example.com sudo chmod -R 750 /var/www/example.com这样当前用户能写文件www-data 用户组能读取Nginx 就能正常运行。加胶式写法容易出权限问题我之后会在第 7 章讲上生产前的额外加固。CentOS 系还有一个特殊关卡SELinux。很多 CentOS 用户遇到 Nginx 读不到文件、后端连不通都以为是权限问题折腾半天发现是 SELinux 拦着。先看状态getenforce如果输出Enforcing说明 SELinux 正在强制模式。静态文件目录需要设置正确的上下文sudo semanage fcontext -a -t httpd_sys_content_t /var/www(//.*)? sudo restorecon -Rv /var/www反向代理场景更坑SELinux 默认不允许 Nginx 向后端发起网络连接。遇到 proxy_pass 代理后一直报 502就要检查这个布尔值sudo setsebool -P httpd_can_network_connect 1-P是持久化重启后依然生效。我这里没有让你直接关 SELinux因为那是拿安全换省事属于下策。把具体的布尔值和文件上下文放行掉既解决问题又保留防护能力。6.3 systemd 日志怎么看Nginx 跑起来之后看日志是一门基本功。实时查看 systemd 托管的服务日志journalctl -u nginx -f-f是跟随模式会不断刷新新日志。更常用的是直接看 Nginx 自己的日志文件。默认配置下访问日志和错误日志分别在/var/log/nginx/access.log /var/log/nginx/error.log很多人遇到页面异常第一反应是去看应用日志但有时候 Nginx 错误日志里已经写明了原因。比如权限不足、上游超时、SSL 握手失败都会在 error.log 里留下明确的记录。养成先看 error.log 再猜原因的习惯排错速度能提升一倍。错误日志默认格式是普通文本想看慢接口或接口耗时可以用自定义日志格式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;想排查哪个接口响应慢把$request_time加进格式里然后从日志里排序过滤。7. 上生产前的几项调优和加固我的默认改动7.1 隐藏版本号并加上安全响应头刚装完的 Nginx 默认会在响应头里带版本号等于直接告诉别人你用的是哪个版本攻击者可以根据这个版本去查已知漏洞。先把它藏起来server_tokens off;这个指令放在http块里全局生效。再加几个安全响应头放在 server 块里add_header X-Frame-Options SAMEORIGIN always; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy strict-origin-when-cross-origin always;这三个头分别防止点击劫持、禁止浏览器猜测文件 MIME 类型、控制 Referrer 信息泄露范围。属于最基础的安全加固成本极低收益明确。7.2 worker 进程和连接数调优Nginx 默认配置在某些情况下偏保守。我给生产环境的常用修改包括worker_processes auto; worker_rlimit_nofile 65535; events { worker_connections 4096; }worker_processes auto;让 Nginx 按 CPU 核心数自动拉起 worker 进程单核机器也不用纠结设成几。worker_rlimit_nofile提高单进程能打开的文件描述符上限高并发时避免“too many open files”报错。worker_connections 4096是每个 worker 能同时处理的连接数普通中小型站点够用。注意修改worker_rlimit_nofile的时候系统层面的ulimit也需要配合。不然 Nginx 想提高上限也会被系统拦住。检查命令是ulimit -n如果只有 1024先去/etc/security/limits.conf里调整。7.3 上传大小和时间提前配置好Nginx 默认client_max_body_size 1m;也就是说默认不允许超过 1M 的请求体。做带文件上传功能的站点不改这个值前端一传大文件就是 413 Request Entity Too Large。我一般在 http 块里统一放开client_max_body_size 20m; client_body_timeout 60s;20M 对大多数业务够用如果业务要传视频或大压缩包再按需调大。client_body_timeout是两次请求体读操作之间的超时时间连不上或中途断网时这个设置能防止连接被拖死。7.4 gzip 别乱开全类型gzip 算是最常见的性能优化项但很多人直接一行gzip on;就完事了结果把已经压缩过的图片和视频又压了一遍白白浪费 CPU。我建议这样配置gzip on; gzip_comp_level 5; gzip_min_length 1k; gzip_types text/plain text/css application/javascript application/json application/xml image/svgxml;gzip_types明确列出需要压缩的类型文本类、JSON、SVG 都值得压。图片用 jpg、png、webp视频用 mp4这些本身已经有压缩算法Nginx 再压一次收益为负。gzip_min_length 1k的意思是小于 1KB 的响应不压。小文件压缩后体积可能反而变大省下这些无意义操作也是为 CPU 减负。装完之后的一点个人习惯这套流程走完你已经不是那个只会敲apt install nginx的新手了。你会看配置结构、会写 server 块、会处理反向代理和负载均衡也清楚防火墙和 SELinux 会在什么地方埋伏你。我现在每次给新服务器部署 Nginx都是先跑一段固定流程更新系统、装包、改配置、nginx -t、重载、放防火墙、检查 SELinux、确认 80 和 443 端口通、最后看一眼日志有没有异常。整套流程走下来不超过十五分钟但每一步都是在无数次踩坑之后沉淀出来的固定动作。如果你刚开始接触第一次装的时候慢一点没关系多花半小时把每条命令、每个配置项为什么这么做搞清楚。等你亲手把这些步骤完整走完一遍后面再遇到 Nginx 的问题就不会再慌张了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

HelloGitHub 第 44 期月刊精读:34 个入门级开源项目的实用指南 2026/9/30 7:04:05

HelloGitHub 第 44 期月刊精读:34 个入门级开源项目的实用指南

技术博客文档知识库 【免费下载链接】HelloGitHub :octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub. 项目地址: https://gitcode.com/GitHub_Trending/he/HelloGitHub 点击查看 免费下载 本文以 …

阅读更多 →
ERPNext GL Entry 详解:总账分录如何聚合全部会计记录并驱动财务报表 2026/9/30 7:04:05

ERPNext GL Entry 详解:总账分录如何聚合全部会计记录并驱动财务报表

后端企业应用 【免费下载链接】erpnext Free and Open Source Enterprise Resource Planning (ERP) 项目地址: https://gitcode.com/GitHub_Trending/er/erpnext 点击查看 免费下载 导读 GL Entry(General Ledger Entry,总账分录&#xff0…

阅读更多 →
Data Engineer Handbook 第四周实战:状态变化追踪、GROUPING SETS 与窗口函数三种分析模式全解 2026/9/30 7:04:05

Data Engineer Handbook 第四周实战:状态变化追踪、GROUPING SETS 与窗口函数三种分析模式全解

数据工程文档教程 【免费下载链接】data-engineer-handbook This is a repo with links to everything youd ever want to learn about data engineering 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineer-handbook 点击查看 免费下载 本篇技术指南…

阅读更多 →
阿波罗 11 号 AGC 源码转录校对指南:让 Comanche 与 Luminary 代码与原始扫描件逐字一致 2026/9/30 7:03:58

阿波罗 11 号 AGC 源码转录校对指南:让 Comanche 与 Luminary 代码与原始扫描件逐字一致

嵌入式固件 【免费下载链接】Apollo-11 Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules. 项目地址: https://gitcode.com/GitHub_Trending/ap/Apollo-11 点击查看 免费下载 本指南面向所有希望为 Apollo-11 仓库贡献代…

阅读更多 →
PayloadsAllTheThings 之 Oracle SQL 注入实战指南:枚举、报错、盲注到命令执行全流程 2026/9/30 7:03:58

PayloadsAllTheThings 之 Oracle SQL 注入实战指南:枚举、报错、盲注到命令执行全流程

网络安全应用安全渗透测试 【免费下载链接】PayloadsAllTheThings A list of useful payloads and bypass for Web Application Security and Pentest/CTF 项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings 点击查看 免费下载 本文以 Paylo…

阅读更多 →
免费批量下载抖音 TikTok 作品并采集评论数据:DouK-Downloader 完整使用教程 2026/9/30 7:03:58

免费批量下载抖音 TikTok 作品并采集评论数据:DouK-Downloader 完整使用教程

免费批量下载抖音 TikTok 作品并采集评论数据:DouK-Downloader 完整使用教程 【免费下载链接】TikTokDownloader 抖音 / TikTok 平台作品下载/数据采集工具 项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader DouK-Downloader 是一款完全开…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉