Nginx 静态站点部署实践总结

记录一次在阿里云 ECS 上部署 Nginx 静态站点的完整过程,包含配置、SELinux、防火墙等踩坑点。

背景

在 Rocky Linux 9 上部署一个静态站点,使用 Nginx 作为 Web 服务器。整个过程涉及软件安装、配置编写、服务管理等环节。

安装

dnf install -y nginx
nginx -v

配置文件

站点配置放在 /etc/nginx/conf.d/ 目录下:

server {
    listen       80;
    server_name  example.com;
    root         /var/www/example;
    index        index.html;

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

    location ~* \.(jpg|png|css|js)$ {
        expires 7d;
        add_header Cache-Control "public";
    }
}

踩坑记录

1. SELinux 拦截

如果 SELinux 是 Enforcing 状态,Nginx 访问 /var/www/ 外的目录会被拒绝:

# 查看状态
getenforce

# 方案一:设置目录上下文
semanage fcontext -a -t httpd_sys_content_t "/var/www/example(/.*)?"
restorecon -Rv /var/www/example

# 方案二:放行 Nginx 访问网络
setsebool -P httpd_can_network_connect 1

2. 防火墙与安全组

服务器内部防火墙开放了端口,但云厂商的安全组是独立的一层,必须单独放行,否则公网访问不了。

# firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

# 验证端口监听
ss -tunlp | grep :80

性能参考

静态页面在回环压测下:

并发 QPS P99
100 约 20000 14ms

实际公网性能瓶颈通常是带宽,而不是 Nginx 本身。17KB 的页面在 10Mbps 带宽下理论上限约 70 QPS。

小结

  • 静态站点用 Nginx 托管,资源消耗极低,1.6G 内存的机器绰绰有余
  • SELinux 和云安全组是最容易忽略的两处
  • 图片多的站点建议接 CDN,比升带宽划算