ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

云服务器从购买到Nginx部署:新手完整实操指南

云服务器从购买到Nginx部署:新手完整实操指南 印象里我第一次买云服务器在购买页面上来回纠结了快两个小时生怕点错一个选项就多扣一笔钱。买完之后又陷入下一个问题怎么连上去连上去之后装nginx光一个安装包就折腾了一晚上搜索引擎开了十几个标签页最后还是靠各路博客拼凑出完整步骤。所以这篇内容我不打算绕弯子目标只有一个帮新手把“买服务器—连服务器—装nginx”这条链路走通每一步给你可以直接照抄的命令、配置和操作顺序顺带把我踩过的坑也放进来能少走一点是一点。这篇文章适合三种人第一次买云服务器、还在选型和下单阶段犹豫的人已经买到服务器但连不上、卡在SSH连接这一步的人以及服务器能连上但不知道nginx怎么装、装完不知道怎么配置的人。老手可以直接跳到第四节、第五节看编译安装和配置思路新手建议从头到尾过一遍全程大概需要一两个小时跟着操作就能把一台能对外服务的nginx服务器跑起来。1. 买服务器之前先把这三件事想清楚购买云服务器本身不难难的是在下单之前把需求想清楚。很多人买完才发现内存不够用、地域选错了、系统镜像不是自己熟悉的这时候换配置、换系统、迁移数据每一项都是额外成本。1.1 配置怎么选CPU、内存、带宽和硬盘的关系云服务器的常规配置参数有四个CPU核数、内存大小、带宽、硬盘容量。很多新手只看CPU核数但实际运行中内存往往才是最先卡脖子的。跑一个纯nginx静态网站1核1G都够用nginx本身的内存占用可以控制在几十兆但如果你打算在上面装Java、Tomcat、MySQL、Redis这一套那内存预算至少要按4G起步。我的个人建议使用场景参考配置说明纯静态网站、nginx学习、轻量脚本1核2G最低配也能跑带宽选小一点没问题个人博客、小型Web应用2核4G最稳妥的新手起步配置小型团队内部系统、生产环境4核8G预留涨业务的空间不至于频繁迁移高并发、对外API服务8核16G以上建议多台单机堆配置性价比很低后续应该考虑集群带宽是另一个容易被忽略的坑。带宽决定网站对外访问的速度但它和运行性能无关只影响流量进出。个人项目选固定带宽3M到5M就够用了如果用户规模大、视频图片多流量计费模式会更划算但新手阶段很难预估流量我建议先选固定带宽用量稳定后再切换计费方式。硬盘容量相对简单系统盘40G到60G足够应付Linux系统和nginx后续如果磁盘不够云平台一般支持在线扩容。不过扩容操作需要在控制台里做还要扩展分区建议买的时候就稍微留宽裕一点。1.2 地域怎么选延迟、备案和访问速度的取舍地域选择这个问题很多人会直觉地选“离自己近”的节点。对国内用户来说选国内节点比如北京、上海、广州等地域确实延迟低但买国内节点意味着如果要在上面绑定域名提供网站服务通常需要完成网站备案流程这个过程需要预留时间。海外节点比如香港、新加坡等不需要备案购买后即开即用但跨地域网络访问可能会存在一些延迟波动。我的建议是如果只是自己学习、测试、跑个API服务优先选国内节点就近购买延迟低、连接稳定如果是为了快速上线一个不需要备案的站点或者面向海外用户提供服务再考虑香港或海外节点。这里还有个细节选地域时尽量考虑云平台的数据中心分布同一个地域内不同可用区可用区A、B、C之间的内网是互通的但跨地域走公网流量是要计费的。多台服务器如果要做内网互通比如nginx和后端应用分离部署就一定要选同一个地域。1.3 系统镜像Ubuntu还是CentOS系统镜像的选择直接影响后面每一步操作。现在主流云平台都支持Ubuntu、CentOS/AlmaLinux、Rocky Linux、Debian、Windows Server等系统镜像。我的推荐优先级是Ubuntu 22.04 LTS 或 24.04 LTS。原因是apt包管理工具对新手非常友好nginx、vim、git这些常用软件一条命令就能装好而且网上遇到问题时搜到的教程绝大多数都是基于Ubuntu/Debian体系的。CentOS 7已经在2024年停止维护新购机器不建议再选。如果你所在的团队习惯用RHEL系那就选Rocky Linux或AlmaLinux它们是CentOS停服后的主流替代方案包管理工具是yum/dnf命令示例我会在后续内容中同时给出Ubuntu和CentOS两套。总的来说新手首选Ubuntu遇到问题的排查成本最低。2. 购买流程实操从注册到开机配置想清楚之后购买流程本身可以控制在十分钟内。现在国内主流云平台包括阿里云、腾讯云、华为云等操作流程大同小异这里按通用流程讲。2.1 注册、实名认证与新用户优惠购买云服务器的第一步是注册云平台账号这是必须的。注册时需要绑定手机号并完成实名认证个人认证一般提交身份证信息后很快就能通过。实名认证是购买国内节点的前置条件这一步躲不掉。在正式下单之前务必先看看新用户优惠。各大云平台对“首次购买”或“学生认证”用户通常有力度不小的折扣一台一年期的入门服务器可能只需要几十到一百多元。学生认证通常还支持免费领取试用实例。别急着直接原价下单先确认自己有没有可用的优惠资格能省下不少预算。账号安全方面建议开启两步验证并且不要把账号密码和支付密码设成同一个。云服务器是暴露在公网的东西你的账号就是这台机器的钥匙保护账号比保护服务器本身还重要。2.2 下单页面的关键选项逐个拆解云平台服务器购买页面上需要关注的选项有这么几个付费方式、实例规格、地域、镜像、公网IP、带宽和安全组。付费方式上新手学习用途选按量付费比较好可以随时释放避免买了包年套餐却闲置。如果确定要长期运行包年包月通常有折扣。我的习惯是先用按量付费测试几天确认运行稳定后再根据实际业务决定是否转为包年。公网IP一定要勾选“分配公网IP”不勾的话服务器只有内网地址外面根本连不上。这个选项有些平台默认选中有些需要手动勾下单前仔细看一眼摘要信息。安全组的初始规则各个平台不一样正常情况下会默认放行22端口SSH连接端口但后文要用的80端口HTTP和443端口HTTPS基本都需要手动添加。安全组本质上是云平台层面的防火墙它比服务器内部的防火墙优先级更高后面讲连接和访问问题时还会反复提到它。登录方式推荐密钥对密钥文件保存在本地登录时不需要输入密码安全性更高。如果用密码登录一定要设置一个高强度密码大小写字母数字特殊字符组合长度不低于12位新手最容易在这里偷懒。2.3 购买完成后第一件要做的事下单完成后云平台会提示你查看服务器详情。先把这几项记下来公网IP地址、操作系统用户名Ubuntu系统默认用户名通常是root也可以创建普通用户、安全组规则列表。如果选择的是密码登录部分平台会在后台重置一次密码这时记下的是初始密码首次登录建议立刻改掉。如果选择的是密钥登录把私钥文件下载到本地并妥善保存私钥一旦丢失登录凭证就没了。我强烈建议购买后马上去安全组页面确认22端口已开放然后一次性把80和443端口也放行规则加上。因为安装nginx后就要立即用这端口事后想起再去补规则又要多花几分钟而且容易因为没放行导致的访问失败而误以为nginx配置错了。3. 连接云服务器从SSH到终端工具服务器本质上是一台放在机房里的Linux电脑你需要在本地终端里用SSH协议连上它然后执行命令。SSH连接是后面所有操作的前提这一块内容对纯新手来说可能是最容易卡住的点。3.1 Linux和Mac自带终端连接方法如果你的电脑是Linux或Mac系统直接打开终端Terminal,执行下面的命令ssh root你的服务器公网IP如果用户名不是root比如Ubuntu部分镜像默认用户是ubuntu就换成ssh ubuntu你的服务器公网IP第一次连接时系统会提示确认服务器指纹类似这样The authenticity of host x.x.x.x (x.x.x.x) cant be established.输入yes回车即可。接着会让你输入密码输密码时屏幕上不会显示任何字符这是正常现象输完直接按回车。连接成功后会看到类似rootyour-server:~#的命令行提示符说明已经进到服务器里了。如果是密钥登录命令格式多一个参数ssh -i ~/.ssh/my-key.pem root你的服务器公网IP这里有一个非常容易踩的坑私钥文件权限太宽会导致SSH拒绝使用。解决办法是把私钥文件权限改成600chmod 600 ~/.ssh/my-key.pem3.2 Windows系统怎么连Windows 10及以上版本的系统自带OpenSSH客户端可以直接在PowerShell或Windows Terminal里执行ssh root你的服务器公网IP如果你不想记命令或者需要管理多台服务器推荐用图形化SSH工具比如Xshell个人免费版、FinalShell、Putty。这类工具的核心功能一样填好主机IP、端口默认22、用户名选对认证方式密码或密钥点击连接就进去了。Xshell类的工具优势在于会话管理。把每台服务器的IP、用户名、密钥保存下来以后连接就是点一个条目的事不用重复输入。服务器数量多的时候效率差异特别明显。Windows下连接时如果用了密钥Xshell需要在“用户身份验证”里选择PublicKey方式并加载私钥文件密码验证和密钥验证不能混用。如果连不上优先检查用户名是否正确、密钥格式是否为OpenSSH格式。3.3 第一次连接失败按这个顺序排查SSH连接失败是新手遇到最多的问题。我按照出现频率排个序对照排查即可。排查项怎么检查解决方法安全组未放行22端口去云控制台查看安全组规则添加入方向规则协议TCP端口22来源0.0.0.0/0用户名不对回忆镜像类型Ubuntu常见ubuntu用户用root试一次或确认镜像默认用户名密码/密钥不对检查有没有漏字符、大小写去控制台重置密码或重新关联密钥IP地址写错核对控制台公网IP公网IP可能变化释放后重买会变本地网络问题换手机热点试一下有些网络对22端口有限制但概率很低国内还有一些情况是本地宽带运营商对22端口做限制如果换了热点能连上而家里宽带连不上那问题就不在服务器端只能换连接端口或者加一层跳板机不过初学者遇到这种情况的比例不高。4. 安装nginx包管理器安装和编译安装两条路连上服务器之后接下来的核心任务就是安装nginx。nginx的安装方式主要有两种用系统包管理器安装和源码编译安装。大多数场景下推荐你用包管理器方式零依赖、一条命令搞定编译安装更适合有特殊模块需求、需要定制参数的老手。4.1 用apt/yum一条命令搞定安装Ubuntu/Debian系统执行sudo apt update sudo apt install nginx -yRocky/AlmaLinux/CentOS系统执行sudo yum install nginx -y安装完成后nginx会自动注册为系统服务。启动并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx查看运行状态sudo systemctl status nginx如果看到active (running)说明nginx已经起来了。这种安装方式的好处是配置文件统一放在/etc/nginx/目录下日志在/var/log/nginx/干净的目录结构方便后续维护。要用到更新也比较省心sudo apt upgrade nginx或者sudo yum update nginx系统包管理器安装的nginx版本可能不是最新的但这不一定是坏事。官方源的版本经过充分测试稳定性和兼容性有保障生产环境追求的是稳定而非追新。这也是我优先推荐包管理器安装的根本原因。4.2 编译安装nginx什么时候需要、怎么操作编译安装nginx的典型场景是需要某个官方预编译版本不含的模块比如某些第三方流量治理模块或者需要指定安装路径、加入非标准编译参数。如果只是一般的Web服务、反向代理、负载均衡包管理器的nginx都支持没有必要编译。编译安装的完整流程如下以nginx 1.24.0为例。先安装编译工具和依赖库sudo apt install -y gcc make libpcre3-dev zlib1g-dev libssl-dev下载源码包并解压wget https://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0配置编译参数。这是最核心的一步--prefix指定安装目录--with-http_ssl_module开启HTTPS支持./configure --prefix/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module然后编译并安装make -j$(nproc) sudo make install启动编译安装的nginx/usr/local/nginx/sbin/nginx编译安装踩过几次坑之后的经验第一./configure阶段如果报缺失依赖不要硬着头皮继续先回去把依赖包装齐第二编译参数一旦确定后续想加模块还需要重新编译所以在configure阶段就尽量把所有会用到的模块一次性加齐第三编译安装的nginx不会自动注册为systemd服务要开机自启就得手写一个service文件对新手来说这一步比较容易出错。如果你的Linux环境是纯内网、无法访问外网下载源码包就只能找一台同架构的机器下载好源码包再拷贝进去而且得确认依赖库齐全。这类内网离线安装场景比较特殊操作前先确认目标机器架构和操作系统版本。4.3 验证nginx是否正常工作安装完成不管用哪种方式都要验证一次。服务器本机执行curl http://127.0.0.1如果返回一坨HTML里面能看到Welcome to nginx!字样说明nginx本体已经正常工作了。接下来在本地浏览器地址栏输入http://你的服务器公网IP如果能看到nginx欢迎页说明公网链路也通了。如果本机curl能用但浏览器打不开问题几乎都出在安全组或服务器防火墙没放行80端口排查方向放在那里。开放80端口sudo ufw allow 80如果用的是CentOS系自带firewalldsudo firewall-cmd --permanent --add-port80/tcp sudo firewall-cmd --reload同时也得回云控制台确认安全组里80端口已放行这个我在前面已经强调过再次提醒的原因是云平台安全组和服务器内部防火墙是两层独立机制任何一层挡住外面都访问不到。5. nginx配置实战从静态网站到反向代理nginx装好只是起点配置才是日常打交道最多的环节。nginx的配置体系不复杂把核心文件结构和几个常用场景讲清楚你就能应付大多数需求。5.1 nginx.conf结构拆解不要被配置文件吓到用包管理器安装的nginx主配置文件在/etc/nginx/nginx.confUbuntu系统还会额外包含/etc/nginx/sites-enabled/下的站点配置文件。打开nginx.conf内容看起来很长但核心结构只有三层main层全局配置、events层事件模型、http层HTTP服务配置。user www-data; worker_processes auto; events { worker_connections 768; } http { sendfile on; include /etc/nginx/mime.types; access_log /var/log/nginx/access.log; server { listen 80; server_name _; root /var/www/html; } }关键参数逐个解释worker_processes autonginx的工作进程数设auto会让它自动匹配CPU核心数。worker_connections单进程最大并发连接数数值越高并发能力越强。server一个server块代表一个虚拟主机配置监听端口、域名、根目录都在这一层。locationserver块内部的路径匹配规则不同的URL路径可以走不同的处理逻辑。新手不要想着一次看懂所有指令。实际使用时记住改配置后一定要先测试语法再重载。测试指令是sudo nginx -t语法通过会显示syntax is ok不通过会指出第几行哪个参数有问题这是个救命命令。5.2 部署一个静态网站最常用的server块写法假设你自己写了一个HTML页面放在服务器/var/www/mysite/index.html要让nginx把这个目录作为网站根目录对外提供服务。Ubuntu系统推荐在/etc/nginx/sites-available/mysite里创建配置文件server { listen 80; server_name example.com www.example.com; root /var/www/mysite; index index.html; location / { try_files $uri $uri/ 404; } }然后创建软链接到sites-enabledsudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginxCentOS/Rocky系统通常直接在/etc/nginx/conf.d/mysite.conf创建配置文件内容一样。如果你有主域名和二级域名比如主站是example.com博客是blog.example.com那就配置两个server块一个server块对应一个域名server { listen 80; server_name example.com; root /var/www/mysite; } server { listen 80; server_name blog.example.com; root /var/www/blog; }前提是域名已经解析到这台服务器的公网IP。这里可以看到server_name就是域名匹配的关键nginx收到HTTP请求后会根据请求头里的Host字段来决定走哪个server块这也是多域名共用一台服务器的基本原理。nginx的index指令决定访问根路径时默认返回哪个文件。try_files $uri $uri/ 404的作用是如果文件不存在依次尝试目录索引都没有就返回404。这个配置能避免直接暴露目录结构是静态站安全性的基础。5.3 反向代理配置nginx的看家本领静态网站只是nginx能力的冰山一角真正让nginx在架构中不可替代的是反向代理能力。简单说反向代理就是nginx对外接收请求再转发给内部的后端服务比如Java进程、Node.js服务并把后端返回的结果传回给客户端。一个典型的反向代理配置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; } }这里的含义是访问api.example.com的所有请求nginx都转发给本机8080端口上运行的后端服务。proxy_set_header那一串是告诉后端“原始的请求是谁发出来的”否则后端看到的所有请求都来自127.0.0.1无法区分真实用户来源这会直接影响日志采集和业务逻辑。反向代理解决的典型问题有三个第一后端服务只监听内网端口不直接暴露公网降低被扫描攻击的风险第二多个后端服务可以共用一个域名端口通过不同路径或域名分发第三为横向扩展做准备后面可以加一个upstream配置实现多台后端自动负载均衡。举一个多个应用共存的例子服务器上同时跑着8080端口的一个Java服务和3000端口的一个Node.js服务nginx可以这样配置server { listen 80; server_name app.example.com; location /java/ { proxy_pass http://127.0.0.1:8080; } location /node/ { proxy_pass http://127.0.0.1:3000; } }这样一个公网入口就把多个内部服务暴露出去了。很多“nginx代理”相关的需求本质就是这种配置。你在搜索里看到的nginx代理、nginx反向代理相关教程核心逻辑都是这里展开的。6. 常见问题排查与避坑实录这一节写的都是安装配置nginx过程中我会遇到、也会经常在社群里看到别人问的问题。每个问题都对应一个真实场景排查思路按优先级排好。6.1 端口被占用nginx启动失败的常见原因执行启动命令后看到报错nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)这说明80端口已经被其他进程占用了。最常见的占用者是Apache如果你之前装过宝塔面板、phpstudy之类的集成环境80端口几乎必被占用。先用下述命令查是谁占用了端口sudo lsof -i:80或者sudo netstat -tulpn | grep :80看到占用进程的PID后确认是Apache就先停掉并禁用开机自启sudo systemctl stop apache2 sudo systemctl disable apache2如果是其他进程根据自己的情况决定是否停用。如果这台服务器上必须保留这个占用80端口的程序还可以把nginx的监听端口改成没有冲突的端口但这样对外访问URL里就得带端口号。Windows本地安装nginx时也常遇到端口被占用的问题报错可能类似nginx: [emerg] createfile() d:/phpstudy_pro/www/admin2.com/nginx.htaccess这通常和站点路径权限、配置文件指向的目录不存在有关。Windows下排查时要特别注意路径不能带中文、不能带空格站点目录的读写权限要给足出了这类问题先检查路径配置再检查目录权限。6.2 配置改动后如何平滑重载nginx -t必须养成习惯nginx配置改动后不需要重启进程重启会造成瞬间断连正确做法是重载配置。重载前先测试语法sudo nginx -t语法测试通过后执行sudo systemctl reload nginx或者sudo nginx -s reload平滑重载的原理是nginx主进程收到重载信号后用新配置启动一组新工作进程再将旧的请求处理完、把旧工作进程优雅退出。所以重载过程中已经建立的连接不会中断对在线业务完全无感。这是我最想强调的一个操作习惯任何时候改完配置文件先nginx -t再 reload。我曾经有一次改完location规则直接reload结果配置文件有漏写的分号导致整个nginx服务起不来网站直接挂了。从那以后再也没跳过语法测试这一步。6.3 80端口已经放行浏览器还是访问不了这个问题看似简单排查链路却长容易让人绕晕。顺序如下第一先在本机curl确认nginx本身没问题curl http://127.0.0.1 curl http://你的服务器公网IP第二检查服务器内部防火墙。Ubuntu看ufw状态sudo ufw status如果ufw是active状态且没有放行80端口执行sudo ufw allow 80CentOS/Rocky看firewalldsudo firewall-cmd --list-all第三检查云平台安全组。回控制台查看入方向规则确认TCP 80端口已经放行。有些平台创建服务器时默认只放行22、3389端口80和443都要手动添加。第四检查域名解析。如果你是用域名访问先解析确认能ping通再确认解析的是这台服务器的公网IP。DNS解析生效需要时间刚添加的解析记录可能最长要等几个小时。还有一个容易忽略的点如果你买的是按流量计费且带宽已用尽也会出现浏览器访问不了的情况此时去控制台看监控图表确认公网出流量是否已经打满。6.4 日志排查nginx报错信息的查看方法nginx出问题时不要瞎猜去看日志。访问日志和错误日志是两个文件访问日志/var/log/nginx/access.log记录每一次HTTP请求。错误日志/var/log/nginx/error.log记录启动报错、配置报错、上游连接失败等。比如反向代理配置后访问返回502先看错误日志sudo tail -f /var/log/nginx/error.log看到connect() failed (111: Connection refused) while connecting to upstream说明nginx转发时后端端口没有服务在监听去确认后端应用是否启动即可。日志是定位问题最快的方式比反复试配置高效得多。我把上面的排查逻辑整理成一个速查表现象排查方向常见根因连接超时安全组、防火墙22/80/443端口未放行502 Bad Gateway后端服务状态后端未启动或端口没对上403 Forbidden目录权限、index文件网站目录无读取权限404 Not Foundroot路径、try_files文件路径不对或未上传301重定向循环server_name配置多个server块强匹配冲突我个人在实际操作中的体会是云服务器加nginx这套组合本身没有太难的技术点但每一环都可能因为一两个细节翻车。购买时的地域和配置没选对后续要付出迁移成本SSH钥匙权限不对连登录都进不去nginx配置漏一个分号服务直接罢工。这个领域不存在什么“一次学会终身受用”的快捷键养成“改前备份、改后测试、出问题看日志”这三个习惯比记多少命令都管用。如果你接下来想继续深入推荐按这个方向走先给nginx配一个HTTPS证书把网站从HTTP升级到HTTPS然后试试把静态资源用nginx的gzip压缩和缓存头配置优化一遍再往后可以了解nginx的upstream模块用两台后端服务做一次最简单的负载均衡。每一步都能在现有环境里直接动手不用额外买服务器。把今天这台机器的价值榨干你就已经超过了大多数停留在“看过教程”阶段的同行。
返回列表