Nginx 教程:从入门到能上线

Nginx 是一款高性能 Web 服务器,也常被用作反向代理、负载均衡器、静态资源服务器和 HTTPS 网关。它的特点是占用资源少、并发能力强、配置清晰,非常适合部署网站、API 服务和前端项目。

一、安装 Nginx

在 Ubuntu / Debian 上:

bash 复制代码
sudo apt update
sudo apt install nginx

在 CentOS / Rocky Linux 上:

bash 复制代码
sudo dnf install nginx

在 macOS 上:

bash 复制代码
brew install nginx

启动并查看状态:

bash 复制代码
sudo systemctl start nginx
sudo systemctl status nginx

设置开机自启:

bash 复制代码
sudo systemctl enable nginx

浏览器访问服务器 IP,如果看到 Nginx 欢迎页,说明安装成功。

二、常用目录

不同系统路径略有差异,Linux 上常见结构如下:

text 复制代码
/etc/nginx/nginx.conf              # 主配置文件
/etc/nginx/conf.d/                 # 子配置目录
/etc/nginx/sites-available/        # 可用站点配置,部分系统有
/etc/nginx/sites-enabled/          # 已启用站点配置,部分系统有
/var/www/html/                     # 默认静态资源目录
/var/log/nginx/access.log          # 访问日志
/var/log/nginx/error.log           # 错误日志

修改配置后,先检查语法:

bash 复制代码
sudo nginx -t

确认无误后重载配置:

bash 复制代码
sudo systemctl reload nginx

三、核心配置结构

Nginx 配置大致分为几层:

nginx 复制代码
events {
    worker_connections 1024;
}

http {
    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/html;
            index index.html;
        }
    }
}

常见含义:

text 复制代码
events:连接相关配置
http:HTTP 服务配置
server:一个虚拟主机
location:匹配请求路径
listen:监听端口
server_name:域名
root:静态文件目录
index:默认首页文件

四、部署静态网站

假设你的前端构建产物在:

text 复制代码
/var/www/example

配置 Nginx:

nginx 复制代码
server {
    listen 80;
    server_name example.com;

    root /var/www/example;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

try_files 对单页应用很重要,比如 Vue、React、Angular。它可以让 /user/1 这种前端路由也正确返回 index.html。

五、反向代理后端服务

假设后端服务运行在本机 3000 端口:

nginx 复制代码
server {
    listen 80;
    server_name api.example.com;

    location / {
        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;
    }
}

这样用户访问:

text 复制代码
http://api.example.com

实际请求会被 Nginx 转发到:

text 复制代码
http://127.0.0.1:3000

六、配置 HTTPS

推荐使用 Certbot 自动申请 Let's Encrypt 证书。

安装:

bash 复制代码
sudo apt install certbot python3-certbot-nginx

申请证书:

bash 复制代码
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会自动修改 Nginx 配置,并添加 HTTPS 相关规则。

检查自动续期:

bash 复制代码
sudo certbot renew --dry-run

七、负载均衡

Nginx 可以把请求分发到多个后端服务:

nginx 复制代码
upstream backend {
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

server {
    listen 80;
    server_name api.example.com;

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

默认是轮询策略,也就是请求依次分发到不同服务器。

八、常用命令

bash 复制代码
sudo nginx -t                    # 检查配置
sudo systemctl start nginx        # 启动
sudo systemctl stop nginx         # 停止
sudo systemctl restart nginx      # 重启
sudo systemctl reload nginx       # 平滑重载
sudo tail -f /var/log/nginx/error.log   # 查看错误日志

九、常见问题

如果页面打不开,优先检查:

bash 复制代码
sudo nginx -t
sudo systemctl status nginx
sudo tail -f /var/log/nginx/error.log

如果返回 403 Forbidden,通常是目录权限或缺少首页文件。

如果返回 502 Bad Gateway,通常是后端服务没有启动,或者 proxy_pass 地址写错。

如果配置修改后不生效,确认是否执行了:

bash 复制代码
sudo systemctl reload nginx

十、总结

Nginx 最常用的三种场景是:

text 复制代码
静态网站部署
反向代理后端服务
HTTPS 入口网关

掌握 server、location、root、try_files、proxy_pass 这几个核心配置后,就已经能完成大多数实际部署工作。真正上线时,再配合日志、HTTPS、限流、缓存和负载均衡,就可以搭建稳定可靠的 Web 服务入口。

相关推荐
分布式存储与RustFS35 分钟前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
陈希1231 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
@兽血沸腾2 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
讯捷蓝达8 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落10 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
陈希12310 小时前
Nginx 从入门到能扛事:反向代理、负载均衡与 HTTPS 实战
nginx·https·负载均衡
lisanmengmeng11 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮11 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹12 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_12 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes