用 Nginx 在一台 2 核 4G 的搭建云服务器上跑起一个静态站点,前后花了不到二十分钟。项目这不是实例什么高深操作,但每次帮朋友弄,搭建总有人卡在权限或者防火墙那一步。项目下面这份记录基于 Ubuntu 22.04,实例其他发行版换一下包管理命令就行。搭建
先连上机器。项目我习惯用 ssh 密钥,实例密码登录太容易被扫。搭建ssh root@你的项目服务器IP,进去之后第一件事是实例更新软件源。别跳过这步,搭建旧版本的项目 Nginx 有时候会带一些奇怪的默认配置。apt update && apt upgrade -y,实例等它跑完。如果内核更新了,记得 reboot,不然有些模块加载会出问题。
装 Nginx 就一行:apt install nginx -y。装完 systemctl status nginx 看一下,绿色 running 就没毛病。这时候在浏览器敲服务器 IP,应该能看到默认的欢迎页。看不到?多半是云服务商的安全组没放行 80 端口。我见过有人折腾半小时 Nginx 配置,最后发现是阿里云控制台里没加入站规则。先去把 80 和 443 开了,再回来继续。
默认站点目录在 /var/www/html。你可以直接把文件丢进去,但我不建议动这个目录。新建一个自己的站点目录更干净,比如 /var/www/example.com。用 mkdir -p 建好,然后写一个测试页:echo "<h1>It works</h1>" > /var/www/example.com/index.html。注意权限,Nginx 的 worker 进程默认以 www-data 用户运行,所以目录至少要让 www-data 有读取权限。我一般用 chown -R www-data:www-data /var/www/example.com,省事。
接下来配 server block。在 /etc/nginx/sites-available/ 下新建一个文件,名字随意,比如 example.com。内容大致这样:
server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html; location / { try_files $uri $uri/ =404; } } 然后做个软链接到 sites-enabled:ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/。默认的 default 站点如果不需要,可以删掉软链接,不然它可能抢请求。执行 nginx -t 检查语法,没问题就 systemctl reload nginx。reload 比 restart 温和,不会断掉已有连接。
域名还没解析?那就在本地 hosts 文件里加一行 服务器IP example.com 先测试。等 DNS 生效后再用真实域名访问。HTTPS 这块,certbot 最省心。装 apt install certbot python3-certbot-nginx -y,然后 certbot --nginx -d example.com -d www.example.com。它会自动改配置、申请证书、设置续期。唯一要注意的是 80 端口必须能从公网访问,否则 HTTP-01 验证会失败。
有个小坑我踩过:Nginx 的日志默认在 /var/log/nginx/access.log 和 error.log。如果站点 502,先看 error.log,十有八九是后端服务没起来或者权限不对。静态站点很少 502,但如果是反代到 Node 或 Python 应用,这个日志就是第一手线索。
整套下来,核心就三件事:装 Nginx、放文件、配 server block。防火墙和 DNS 是外部因素,但往往比 Nginx 本身更耗时间。我的建议是先在本地用 curl -I 确认返回 200,再去折腾域名和证书。顺序对了,少走弯路。