阿里云Linux云服务器搭建Nginx:从零到生产级部署完全指南 📅 2026/6/24 11:03:03 前言为什么选择在阿里云ECS上搭建Nginx在当今的互联网技术生态中Nginx已然成为Web服务器领域的事实标准。无论是个人博客、企业官网还是高并发的API网关、微服务架构Nginx都凭借其事件驱动的异步非阻塞架构以极低的资源消耗支撑着海量的并发连接。阿里云ECS弹性云服务器作为国内市场份额领先的云基础设施为开发者提供了稳定、灵活、可弹性伸缩的计算资源。将Nginx部署在阿里云ECS上既能享受云服务器的高可用性与按需付费的经济性又能充分发挥Nginx在高性能Web服务方面的卓越能力。本文将从零开始完整记录在阿里云Linux云服务器上搭建Nginx的全过程。内容涵盖ECS实例的选购与初始化、安全组配置、Nginx的安装与配置、虚拟主机与多站点部署、反向代理与负载均衡、HTTPS加密配置、性能优化与安全加固以及生产环境下的日志管理与进程守护。无论你是刚接触云服务器的新手还是希望规范化部署流程的开发者这份指南都将帮助你避开常见的部署陷阱快速构建一个稳定可靠的生产级Web服务环境。需要先登录阿里云控制台点击阿里云控制台第一章ECS实例准备与环境初始化1.1 实例选型不花冤枉钱选择ECS实例是搭建Nginx的第一步也是最容易被配置焦虑带偏的一步。许多新手一上来就追求高配结果资源长期闲置造成不必要的成本浪费。正确的做法是按实际负载选型不要提前为以后可能用上的性能付费。对于个人博客、小型API服务或学习测试环境推荐从以下配置起步学习/测试/轻量服务选择阿里云 u2i 经济型实例2核4G内存月成本极低完全能够满足Nginx的基础运行需求。有一定并发需求的生产环境推荐 c9i 企业级实例2核至4核采用英特尔至强6处理器单核性能提升约20%支持AMX矩阵加速和TDX机密计算。地域选择上建议优先选择离目标用户群较近的区域。国内项目推荐华东1杭州或华北2北京网络延迟较低。操作系统方面本文的演示环境基于Alibaba Cloud Linux 3阿里云自研的优化版Linux同时兼容CentOS 7/8及Ubuntu 20.04/22.04等主流发行版。1.2 安全组配置云服务器的第一道防线很多新手拿到服务器后的第一件事就是SSH上去装软件——这个顺序是错误的。安全组是云服务器的第一道防火墙决定了哪些流量能进、能出。默认的安全组通常只开放了22端口SSH我们需要额外放开HTTP和HTTPS所需的端口。在阿里云控制台依次进入ECS → 实例 → 安全组 → 配置规则添加入方向规则端口22SSH协议TCP授权对象建议限制为你的固定IP地址避免暴露在公网遭受暴力破解。若IP不固定后续可通过fail2ban等工具做登录防护。端口80HTTP协议TCP授权对象 0.0.0.0/0用于对外提供Web服务。端口443HTTPS协议TCP授权对象 0.0.0.0/0用于提供加密的HTTPS访问。安全组配置是云服务器特有的网络隔离机制在操作系统防火墙之前生效。配置完成后这些端口才真正对外部网络开放。1.3 SSH连接与系统初始化安全组配置完成后通过SSH连接到服务器ssh root你的公网IP首次登录后建议按顺序完成以下三件事第一步更新系统包# Alibaba Cloud Linux / CentOS / RHEL yum update -y # Ubuntu / Debian apt update apt upgrade -y第二步创建普通用户避免长期使用root账户useradd -m -s /bin/bash deploy passwd deploy usermod -aG wheel deploy # CentOS系列 # 或 usermod -aG sudo deploy # Ubuntu系列第三步配置SSH密钥登录可选但强烈推荐将本地公钥添加到服务器的 ~/.ssh/authorized_keys 文件中实现免密码安全登录。第二章Nginx安装两种方式任你选Nginx的安装主要有两种方式使用系统包管理器yum/apt快速安装以及从源码编译安装。前者简单高效适合大多数场景后者提供了更大的灵活性可以按需启用或禁用特定模块。2.1 方式一使用包管理器安装推荐包管理器安装是最快捷的方式系统会自动处理依赖关系并配置好基础服务。Alibaba Cloud Linux 3 / CentOS 8 及更高版本# 添加官方Nginx仓库 tee /etc/yum.repos.d/nginx.repo -EOF [nginx-stable] namenginx stable repo baseurlhttps://nginx.org/packages/centos/8/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue EOF # 安装Nginx dnf -y install nginxCentOS 7# 添加EPEL仓库 yum -y install epel-release # 安装Nginx yum -y install nginxUbuntu / Debianapt update apt install nginx -y安装完成后Nginx通常不会自动启动Ubuntu除外需要手动启动并设置为开机自启systemctl start nginx systemctl enable nginx systemctl status nginx通过浏览器访问服务器公网IP看到Nginx欢迎页面即表示安装成功。2.2 方式二从源码编译安装进阶场景当需要特定版本的Nginx或需要启用某些默认未包含的第三方模块时源码编译是更好的选择。以下是在CentOS 7上编译安装的完整步骤第一步安装编译依赖yum install -y gcc make pcre-devel zlib-devel openssl-develgccC语言编译器编译Nginx的必需品。make构建工具用于执行Makefile。pcre-devel提供正则表达式支持Nginx的rewrite模块依赖此库。zlib-devel提供gzip压缩支持。openssl-devel提供HTTPS支持如果不需要SSL可以省略但强烈建议安装。第二步下载并解压源码包wget https://nginx.org/download/nginx-1.26.2.tar.gz tar -zxvf nginx-1.26.2.tar.gz cd nginx-1.26.2第三步配置编译参数./configure \ --prefix/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-http_slice_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-threads \ --with-pcre \ --with-zlib关键参数说明--prefix指定安装目录默认为 /usr/local/nginx。--with-http_ssl_module启用HTTPS支持。--with-http_v2_module启用HTTP/2协议支持。--with-http_stub_status_module启用状态监控页面。--with-http_gzip_static_module启用静态gzip预压缩支持。第四步编译并安装make make install安装完成后可执行文件位于 /usr/local/nginx/sbin/nginx配置文件位于 /usr/local/nginx/conf/nginx.conf。第五步启动Nginxcd /usr/local/nginx/sbin ./nginx验证进程ps -ef | grep nginx看到 master process 和 worker process 即表示启动成功。第三章Nginx核心配置文件深度解析无论通过哪种方式安装理解Nginx的配置文件结构都是后续所有配置工作的基础。以下以包管理器安装的默认路径/etc/nginx/为例进行说明。3.1 配置文件目录结构/etc/nginx/ ├── nginx.conf # 主配置文件 ├── conf.d/ # 额外配置文件目录所有.conf文件会被自动加载 ├── sites-available/ # 所有可用站点配置文件 ├── sites-enabled/ # 已启用的站点配置软链接指向sites-available ├── mime.types # MIME类型映射表 └── modules/ # 动态模块目录这种目录结构的核心设计思想是模块化配置。主配置文件 nginx.conf 通过 include 指令引入其他目录下的配置文件。sites-available 与 sites-enabled 的分离设计尤其巧妙所有站点配置写在 sites-available 中通过创建符号链接到 sites-enabled 来激活或停用某个站点便于管理和切换。3.2 主配置文件详解nginx.conf以下是一个典型的 nginx.conf 核心配置片段user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; use epoll; multi_accept on; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }核心指令说明user指定运行Nginx工作进程的用户默认为nginx增强安全性。worker_processes auto自动根据CPU核心数设置工作进程数量。worker_connections 1024每个工作进程的最大并发连接数。use epollLinux下使用epoll事件模型高效处理大量并发连接。sendfile on启用零拷贝技术提升静态文件传输效率。keepalive_timeout 65长连接超时时间减少TCP握手开销。第四章虚拟主机与多站点配置虚拟主机Virtual Host是Nginx最基础也最常用的功能之一它允许在一台服务器上托管多个网站每个网站拥有独立的域名、文档根目录和配置。在Nginx中虚拟主机通过 server 块来实现。4.1 创建第一个站点第一步创建站点目录与测试页面mkdir -p /var/www/example.com/html chown -R $USER:$USER /var/www/example.com/html chmod -R 755 /var/www echo h1Hello from Example.com!/h1 /var/www/example.com/html/index.html第二步创建站点配置文件vim /etc/nginx/sites-available/example.com输入以下内容server { listen 80; server_name example.com www.example.com; root /var/www/example.com/html; index index.html index.htm; location / { try_files $uri $uri/ 404; } }第三步激活站点ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/第四步测试并重载配置nginx -t systemctl reload nginx第五步配置本地hosts或DNS解析将域名指向服务器IP访问即可看到测试页面。4.2 多站点配置的最佳实践当需要托管多个站点时建议为每个站点创建独立的配置文件放在 /etc/nginx/conf.d/ 目录下Nginx会自动加载所有 .conf 文件。例如/etc/nginx/conf.d/ ├── site1.conf ├── site2.conf └── site3.conf每个配置文件包含一个完整的 server 块分别指定不同的 server_name 和 root 路径。这种方式清晰明了便于管理和维护。第五章反向代理与负载均衡实战反向代理是Nginx最强大的功能之一。在反向代理模式下Nginx接收客户端的请求然后将请求转发给后端的应用服务器如Tomcat、Node.js、Gunicorn等并将后端服务器的响应返回给客户端。这种架构带来了诸多好处隐藏后端服务器真实IP、负载均衡、SSL终结、缓存加速等。5.1 配置反向代理假设后端有一个Java应用运行在8080端口我们希望将所有请求代理到这个后端服务server { listen 80; server_name api.example.com; location / { proxy_pass http://127.0.0.1:8080; 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指定后端服务器的地址。proxy_set_header在转发请求时添加或修改请求头确保后端服务器能获取到客户端的真实IP和协议信息。5.2 配置负载均衡当后端有多个应用服务器时可以通过 upstream 模块实现负载均衡upstream backend_servers { # 默认轮询策略 server 192.168.1.10:8080 weight3; server 192.168.1.11:8080 weight2; server 192.168.1.12:8080 backup; } server { listen 80; server_name app.example.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }负载均衡策略说明轮询默认请求按顺序轮流分配到各后端服务器。weight权重策略权重越高分配到的请求越多适用于后端服务器性能不均的场景。backup标记为备用服务器仅当其他服务器不可用时才接收请求。ip_hash基于客户端IP的哈希分配确保同一客户端的请求始终分配到同一台服务器适用于需要会话保持的场景。第六章HTTPS配置免费SSL证书申请与部署在当今的互联网环境中HTTPS已经成为网站的基本配置。HTTP协议以明文方式传输数据面临着信息泄露、内容篡改、中间人攻击等严重安全风险。主流浏览器会对未启用HTTPS的网站标记为不安全直接影响用户访问意愿和SEO排名。6.1 阿里云免费SSL证书申请阿里云为每个账号每年提供20张免费的个人测试证书DV单域名有效期90天足以满足个人博客和测试环境的需求。申请步骤登录阿里云控制台在顶部搜索框输入SSL证书或数字证书管理服务。在左侧导航栏选择证书管理 → SSL证书管理点击个人测试证书原免费证书页签。点击立即购买保持默认选项完成0元支付。点击创建证书填写需要绑定证书的域名如 example.com系统会自动包含 www.example.com。选择验证方式自动DNS验证推荐或手动DNS验证。等待签发完成通常1~15分钟下载证书选择Nginx格式。6.2 在Nginx中部署SSL证书第一步上传证书文件到服务器将下载的证书文件.pem和.key上传到服务器建议放在 /etc/nginx/ssl/ 目录下mkdir -p /etc/nginx/ssl # 使用scp或rsync将证书文件上传到该目录第二步修改Nginx配置server { listen 443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.pem; ssl_certificate_key /etc/nginx/ssl/example.com.key; # SSL协议与加密套件优化 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; root /var/www/example.com/html; index index.html index.htm; location / { try_files $uri $uri/ 404; } } # HTTP自动跳转HTTPS server { listen 80; server_name example.com www.example.com; return 301 https://$server_name$request_uri; }第三步测试并重载配置nginx -t systemctl reload nginx访问 https://example.com 即可验证HTTPS是否生效。6.3 Lets Encrypt自动化证书方案除了阿里云提供的免费证书也可以使用Lets Encrypt配合Certbot实现证书的自动化申请与续期# 安装Certbot apt install certbot python3-certbot-nginx -y # Ubuntu # 或 yum install certbot python3-certbot-nginx -y # CentOS # 自动申请并配置证书 certbot --nginx -d example.com -d www.example.com # 测试自动续期 certbot renew --dry-run第七章性能优化与安全加固7.1 性能优化核心参数Nginx的性能优化主要集中在以下几个方面工作进程与连接数优化worker_processes auto; worker_rlimit_nofile 65535; events { worker_connections 65535; use epoll; multi_accept on; }静态文件缓存优化location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg)$ { expires 30d; add_header Cache-Control public, immutable; access_log off; log_not_found off; }Gzip压缩优化gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xmlrss application/rssxml image/svgxml;7.2 安全加固最佳实践1. 限制请求大小防止缓冲区溢出攻击client_max_body_size 10M; client_body_buffer_size 128k;2. 隐藏Nginx版本信息server_tokens off;3. 配置访问限流# 在http块中定义限流区域 limit_req_zone $binary_remote_addr zonemylimit:10m rate10r/s; # 在location块中应用限流 location /api/ { limit_req zonemylimit burst20 nodelay; proxy_pass http://backend_servers; }4. 配置防盗链location ~* \.(jpg|jpeg|png|gif)$ { valid_referers none blocked example.com *.example.com; if ($invalid_referer) { return 403; } }5. 添加安全响应头add_header X-Frame-Options SAMEORIGIN always; add_header X-Content-Type-Options nosniff always; add_header X-XSS-Protection 1; modeblock always;第八章日志管理与监控8.1 日志格式定制Nginx的日志配置通过 log_format 和 access_log 两个指令完成log_format json_combined {time_local:$time_local, remote_addr:$remote_addr, remote_user:$remote_user, request:$request, status:$status, body_bytes_sent:$body_bytes_sent, http_referer:$http_referer, http_user_agent:$http_user_agent, http_x_forwarded_for:$http_x_forwarded_for, request_time:$request_time}; access_log /var/log/nginx/access.log json_combined;采用JSON格式的日志便于后续导入ELK或阿里云日志服务SLS进行集中分析与可视化。8.2 日志切割与轮转使用Linux自带的 logrotate 工具管理Nginx日志# /etc/logrotate.d/nginx /var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 0640 nginx adm sharedscripts postrotate [ -f /var/run/nginx.pid ] kill -USR1 cat /var/run/nginx.pid endscript }8.3 状态监控页面启用 stub_status 模块实时查看Nginx运行状态location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }访问 http://服务器IP/nginx_status 即可看到活跃连接数、请求总数等关键指标。第九章Systemd进程守护与开机自启对于生产环境确保Nginx在服务器重启后能够自动恢复运行至关重要。使用systemd可以实现进程守护与开机自启。包管理器安装的Nginx通常已自动配置好systemd服务。如果是源码编译安装需要手动创建systemd服务文件vim /etc/systemd/system/nginx.service输入以下内容[Unit] DescriptionThe NGINX HTTP and reverse proxy server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStartPre/usr/local/nginx/sbin/nginx -t ExecStart/usr/local/nginx/sbin/nginx ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s QUIT $MAINPID PrivateTmptrue [Install] WantedBymulti-user.target启用并启动服务systemctl daemon-reload systemctl enable nginx systemctl start nginx systemctl status nginx第十章常见问题排查与故障处理10.1 端口被占用现象启动Nginx时报错 bind() to 0.0.0.0:80 failed (98: Address already in use)。解决方案# 查看80端口占用情况 netstat -tlnp | grep 80 # 杀掉占用进程或修改Nginx配置文件中的监听端口10.2 配置文件语法错误现象重载配置时提示语法错误。解决方案nginx -t该命令会检查配置文件的语法正确性并指出具体错误位置。10.3 远程无法访问现象本地curl可以访问但外部浏览器无法打开。排查步骤检查安全组是否开放了对应的端口80/443。检查服务器防火墙firewalld/iptables/ufw是否放行了端口。检查Nginx是否监听在正确的IP地址上0.0.0.0而非127.0.0.1。# CentOS/RHEL防火墙配置 firewall-cmd --add-port80/tcp --permanent firewall-cmd --reload # Ubuntu UFW防火墙配置 sudo ufw allow Nginx Full sudo ufw status10.4 动态库缺失现象启动时报错 error while loading shared libraries: libpcre.so.1。解决方案ldconfig结语至此我们完整地走过了在阿里云Linux云服务器上搭建Nginx的全流程——从ECS实例的选型与安全组配置到Nginx的安装与核心配置再到虚拟主机、反向代理、负载均衡、HTTPS加密、性能优化、安全加固、日志管理以及Systemd进程守护。每一步都提供了可直接运行的命令和完整的配置示例。Nginx的强大远不止于此——它还可以作为WebSocket代理、TCP/UDP负载均衡器、缓存服务器等。掌握本文的基础之后你可以进一步探索Nginx的更多高级特性结合阿里云生态中的负载均衡SLB、对象存储OSS、云监控CloudMonitor等产品构建更加健壮、弹性的云原生Web架构。最后提醒一点在生产环境中部署任何更改之前务必先在测试环境验证并做好配置文件的备份。定期更新系统和Nginx版本及时修复已知安全漏洞是保障服务长期稳定运行的关键。常见问题与解答问1Nginx和Apache应该选哪个答Nginx采用事件驱动异步非阻塞架构在高并发场景下内存占用更低、性能更好尤其适合静态文件服务、反向代理和负载均衡。Apache采用多进程/多线程模型模块丰富兼容性好。静态内容为主或需要高并发的场景推荐Nginx需要复杂.htaccess配置的传统应用可选择Apache。问2Nginx配置文件修改后如何生效答修改配置文件后先执行nginx -t检查语法是否正确然后执行systemctl reload nginx平滑重载配置。reload 方式不会中断正在处理的请求是最佳实践。问3阿里云免费SSL证书到期了怎么办答阿里云个人测试证书有效期为90天到期后不支持续费需要重新申请。每个账号每年有20张免费额度到期前重新申请并部署即可。也可以使用Lets Encrypt配合Certbot实现自动化申请和续期。问4Nginx如何实现动静分离答在Nginx配置中将静态资源图片、CSS、JS等的请求直接由Nginx处理使用 root 或 alias 指定本地路径将动态请求如 .php、.jsp 或特定API路径通过 proxy_pass 转发给后端应用服务器处理。问5如何查看Nginx的访问日志和错误日志答访问日志默认位于 /var/log/nginx/access.log错误日志位于 /var/log/nginx/error.log。可使用tail -f /var/log/nginx/access.log实时查看访问情况或使用grep、awk等工具进行日志分析。问6Nginx源码编译和包管理器安装有什么区别答包管理器安装简单快捷自动处理依赖适合大多数场景。源码编译安装更灵活可以指定安装目录、按需启用或禁用模块、使用特定版本适合需要定制化功能的进阶场景。