拓冰建站拓冰建站
首页 / 资讯中心 / 正文

云服务器选购与nginx部署实操:从SSH连接到反向代理配置

1. 买云服务器前先把需求和成本算清楚很多人一上来就问“哪家云服务器便宜”“哪家配置够用”但实际踩过一遍之后我的建议是先别急着下单先回答三个问题——你买它做什么、你打算跑多久、你的预算到底是买断还是月付。这个问题听起来很基础但它直接决定了你的选择路径。如果你只是想学 nginx、折腾 Linux、部署一个个人网站那最低配的 1核2G 就够用了如果你要跑 Tomcat MySQL nginx 反向代理甚至部署大模型推理服务那 CPU、内存、带宽的配置规划就得重新考虑。热搜词里频繁出现“阿里云服务器”“华为云服务器”“免费云服务器”说明很多人正在经历的就是“看着便宜就买了结果跑不起来又不会退”的阶段。我个人的经验是第一次买服务器不要盯着“新用户 99 元一年”这种羊毛看。要把续费价格一并算明白因为大部分新客优惠只限首年第二年恢复原价很多教程不会提醒你这一点。你买之前先列个表新购价格、续费价格、带宽大小、是否有公网 IP、是否包含安全组规则管理这些信息在云厂商的产品页上都能找到只是比较分散。另外地域选择也很关键。如果你面向大陆用户选华东、华北这类主流地域没问题如果你有备案需求那服务器必须在境内节点如果只是自己练手可以选香港或海外节点省去备案流程但访问速度会有波动。很多人买完服务器连不上卡就卡在“地域选错 安全组没放行 系统镜像不熟”这三个连环问题上。选购配置时我的建议是学习用途1核2G40G SSD按量付费或年付都行带宽选 1M 到 3M 足够正经部署网站2核4G起步带宽 5M加一个独立 IP跑后端服务或容器化应用2核4G以上考虑数据盘单独购买部署大模型或 AI 推理4核16G起且要看 GPU 实例不是普通云服务器能解决的再说系统镜像的选择。新手无脑选 Ubuntu 22.04 LTS或者 Debian 12不要选 CentOS。不是 CentOS 不好而是 CentOS 8 已经停止维护相关软件源大量失效装 nginx 时折腾镜像源就能劝退一半新手。Ubuntu 的 apt 源维护稳定nginx 也有官方 PPA整个过程顺畅得多。如果你买的是华为云服务器系统里自带镜像市场建议选带“公共镜像”标签的 Ubuntu不要选市场里的第三方带面板镜像因为你不知道里面预装了什么后续排查问题会很头疼。2. 从注册到下单一次完整的云服务器购买流程梳理当你确定好配置、地域、系统之后购买流程其实大同小异我用阿里云举例走一遍华为云、腾讯云的操作路径基本类似你照着找对应按钮就行。第一步是注册账号并完成实名认证。这一步是硬性的不完成实名买不了国内节点的服务器。个人实名认证只需身份证信息一般几分钟就能通过企业实名会多一步对公打款验证个人学习用途完全不需要。第二步进入产品页选择“云服务器 ECS”或“轻量应用服务器”。这里我多说一句轻量应用服务器和云服务器 ECS 是两种东西。轻量服务器的特点是配置固定、自带流量包、管理面板简单适合搭网站、跑个人项目ECS 更接近一台“完整的云上电脑”网络、磁盘、安全组都可以细粒度配置适合深入折腾 nginx、自定义网络环境的人。如果你是照着这篇教程走我更推荐 ECS因为 nginx 的学习过程会涉及大量端口、安全组、防火墙的配置ECS 的可控性更好。第三步是选规格和付费方式。地域选离你最近的可用区选哪个都行实例规格按我之前说的配置选。付费方式有包年包月和按量付费两种新手我建议先按量付费跑几天确认环境没问题了再转包年包月这样不会因为误操作产生不必要的浪费。当然如果你已经确定要长期用直接包年也行但要看清续费价格。第四步是网络和安全组设置。这里有个新手最容易忽略的配置项安全组规则。它相当于云服务器外层的防火墙默认情况只放行 22 端口SSH和 3389 端口Windows 远程桌面其他端口全部拒绝。你后续要访问 nginx 的 80、443 端口必须在这里手动添加规则。很多人的“服务器买了但网页打不开”问题九成是没放行 80 端口而不是 nginx 装错了。第五步是设置登录方式。云厂商一般提供两种密钥对和密码。密钥对是公钥加密登录安全性更高但需要你保留好私钥文件一旦丢失就只能重置实例。密码登录简单直观适合新手。我的建议是如果你用的是自己的电脑选密钥对如果经常换设备就选密码但密码强度一定要够不要用 123456 这种。下单完成后你会在实例列表看到一台“运行中”的服务器上面有公网 IP、内网 IP、操作系统等基本信息。这时候先别急着连接先做一件事重置一下系统密码或确认你的密钥对已经下载保存。因为我踩过好几次坑系统初始化默认密码和你在控制台输入的有时候不是同一个重置一次可以避免“密码错误导致连不上”的尴尬。按照这个流程走完你手里就有了一台运行中的云服务器、一个公网 IP、一套登录凭证。这些是后续所有操作的基础。3. SSH 连接从本地到云端的第一条通道服务器买回来接下来要解决的核心问题是怎么连上去。这里的“连上去”指的就是 SSHSecure Shell——一种加密的网络协议用来在本地终端和远程服务器之间建立安全通道。你可以把它理解成一条加密隧道你输入的命令、服务器返回的结果都在这条隧道里传输中途没法被窃听或篡改。Windows 用户连接 SSH 有几种工具选择我分别说下适用场景PowerShell 或 CMD 自带 SSH不需要装任何东西直接输入ssh root公网IP然后输入密码即可。适合临时用一下、不想装额外软件的情况。Xshell老牌终端工具标签页管理舒服支持密钥、颜色主题适合经常要开多个会话的人。FinalShell国产工具自带服务器状态监控CPU、内存、流量还能直接传文件对新手比 Xshell 更友好一点。VS Code Remote-SSH如果你后面要改 nginx 配置、写前端代码强烈推荐这个。它能把远程服务器目录直接挂载到本地编辑器改配置像改本地文件一样方便还能集成终端。无论用哪个工具首次连接时你都会看到Are you sure you want to continue connecting (yes/no)?的提示这表示 SSH 正在确认服务器的公钥指纹。直接输入yes回车即可它会自动把服务器信息记录到本地的 known_hosts 文件里后续再连接就不会再问。连接命令的基本格式是ssh root你的公网IP如果是 Ubuntu 系统镜像默认用户名是root或ubuntu具体看你购买时的镜像说明用哪一个登录后都有 sudo 权限问题不大。如果提示密码错误不要急着重试回忆一下你是否重置过密码、密钥是否和实例绑定正确。连续输错五次以上部分云厂商会触发临时锁定策略到时候得等几分钟才能继续。连接失败是最常见的问题我根据经验把原因和检查点整理成一张表现象最可能原因检查方法连接超时安全组未放行 22 端口控制台检查安全组入方向规则密码错误未重置密码或输入错控制台重置实例密码后重启密钥错误私钥文件权限过大或选错密钥Windows 用ssh -i指定私钥路径用户名错误镜像默认用户不是 root查看云厂商镜像说明连接被拒SSH 服务未启动用 VNC 登录控制台检查 sshd 状态这里特别提一下 VNC 登录。当 SSH 完全连不上时不要慌云厂商控制台基本都提供“远程连接/VNC”入口它能让你像坐在服务器前一样操作不需要网络通道。这个功能是你最后的兜底手段很多新手不知道它存在出了问题第一反应是工单找客服白白浪费半天时间。记住VNC 永远是你排查 SSH 问题的第一后备方案。如果你在连接过程中发现敲命令明显卡顿可以看一下是不是本地网络到服务器节点间的线路问题这种问题不是你能解决的换个时间或换个网络试试。但如果是输入命令后长时间无响应大概率是服务器负载过高用 VNC 进去top看一眼再说。4. nginx 的安装镜像源、两种安装方式和常见报错连接上服务器之后新手的第一站基本都是“装 nginx”。nginx 是一个高性能的 Web 服务器和反向代理服务器它最擅长的三件事托管静态文件、把请求转发给后端应用、做负载均衡和 HTTPS 终结。你可以先不用理解所有概念装好跑起来回头再看这些名词会豁然开朗。安装 nginx 前有一个非常影响体验的问题软件源。国内云服务器自带的 apt 源默认连接到官方源下载速度经常只有几 KB甚至直接超时。热搜词里的“nginx mirror超时时间”“国内镜像nginx下载”说的都是这个问题。解决方法是把源换成国内镜像比如华为云、阿里云、腾讯云都提供了各自的 apt 镜像源。配置 Ubuntu 的 apt 源操作如下# 备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 编辑源文件将 http://archive.ubuntu.com 替换为镜像站地址 sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list # 更新索引 sudo apt update这只是阿里云镜像站的做法华为云服务器可以直接用华为云自己的镜像源访问速度更快地址在云厂商的文档中心都能查到。执行完apt update后你会感觉到下载速度质的提升这一步别省。源搞定之后nginx 安装就有两条路线可选路线一apt 直接安装推荐新手sudo apt install nginx -y装完会自动注册系统服务启动并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx sudo systemctl status nginx看到active (running)就说明成功了。然后你在浏览器输入服务器公网 IP就能看到 nginx 的默认欢迎页。如果这时候网页里显示的是Welcome to nginx!说明你的 80 端口安全组也已经放行第一步全通。路线二源码编译安装适合要定制模块的人源码编译安装的好处是可以精确控制编译参数、选择模块、指定安装目录坏处是编译时间长、依赖多、升级麻烦。但一旦你学会源码编译以后自己加第三方模块比如用 nginx 源码处理特殊协议会顺利很多。基本步骤# 安装依赖 sudo apt install build-essential libpcre3-dev zlib1g-dev libssl-dev -y # 下载源码注意去 nginx.org 下载最新稳定版 wget https://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0 # 编译配置 ./configure --prefix/usr/local/nginx --with-http_ssl_module --with-http_v2_module # 编译并安装 make -j2 sudo make install--prefix指定安装目录--with-http_ssl_module是给后面配置 HTTPS 用的。编译完成后二进制文件在/usr/local/nginx/sbin/nginx启动命令是sudo /usr/local/nginx/sbin/nginx源码安装的 nginx 不会自动注册系统服务需要你手动写一个 systemd unit 文件或者直接用nginx -s信号控制这一点和 apt 版的体验差异明显。如果你不想折腾 systemd可以直接把 nginx 的启动命令放在/etc/rc.local里也能实现开机自启但更规范的做法还是写 unit 文件。安装完还有一个高频问题麒麟系统离线安装 nginx。热搜词里有这个说明不少人在国产化系统上折腾过。离线安装的思路很简单在一台同架构且有网络的机器上把 nginx 及其依赖的 deb 包全部下载下来拷贝到目标机器然后dpkg -i *.deb安装。或者更直接的办法下载 nginx 源码离线编译编译阶段需要的 pcre、zlib、openssl 库也得一并拷贝过去用./configure通过--with-pcre../pcre-xxx这类参数指定本地源码路径。但要注意架构问题x86 和 ARM 的包不能混用。安装完成后我个人强烈建议做三件收尾事确认 80/443 端口被安全组放行并且服务器本地防火墙ufw 或 firewalld没有拦截把 nginx 的 access log 和 error log 路径搞清楚出问题第一时间翻日志看一下nginx -v和nginx -V的区别——小写 v 只看版本号大写 V 能看到编译参数后面排查模块问题时有大用5. 装完 nginx 别急着庆祝先看这几个使用场景nginx 装上欢迎页能打开只是万里长征第一步。接下来要看你想拿它干什么。我把 nginx 最经典的四个使用场景拆开来讲每个场景配合配置代码你照着改就能跑。5.1 托管一个静态网站/前端项目这是最基础、最无脑的用法。把自己写的 HTML 页面或构建出来的前端 dist 目录传到服务器上让 nginx 直接把文件返回给浏览器。apt 安装版的默认站点配置在/etc/nginx/sites-available/default你可以基于它改。假设你把前端文件放在/var/www/mysitenginx 配置的核心 server 块server { listen 80; server_name yourdomain.com; root /var/www/mysite; index index.html; location / { try_files $uri $uri/ 404; } }改完配置执行nginx -t检查语法没问题再systemctl reload nginx。try_files的作用是先尝试按请求路径找文件找不到就尝试加/当目录访问再找不到就返回 404。前端项目用了 history 路由模式的你得把try_files改成try_files $uri $uri/ /index.html;否则刷新页面会白屏——这是我踩过最多次的坑。5.2 反向代理到后端服务nginx 最常见的生产角色是反向代理。它监听公网端口把请求转发给内网某个端口上的后端服务比如 Tomcat、Spring Boot、Node.js、Flask 等。这样你不需要把后端端口直接暴露到公网也方便做 HTTPS、负载均衡、限流等统一控制。配置模板server { listen 80; server_name api.yourdomain.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_pass是核心它把匹配到的请求转发给指定地址。Host头要带上否则后端拿到错误的 Host 可能影响路由判断X-Real-IP和X-Forwarded-For是为了让后端知道你真正的客户端 IP否则后端看到的全是 127.0.0.1。这三个 header 是代理场景的标配写错任何一个排查起来都够喝一壶。5.3 配置主域名和二级域名很多人的服务器不止一个站点主域名放官网二级域名放博客或 API。nginx 的server_name就负责路由不同的域名到不同的配置块。server { listen 80; server_name yourdomain.com; root /var/www/main; } server { listen 80; server_name blog.yourdomain.com; root /var/www/blog; }这里的关键是DNS 解析也得配合好。你需要在域名服务商那里添加一条 A 记录把blog.yourdomain.com指向你的服务器公网 IP。nginx 只负责收到请求后查 Host 头匹配DNS 不生效的话请求根本到不了 nginx。热搜词里有“nginx 配置主域名和二级域名”很多人的配置方式是对的但排错半天最后发现是 DNS 没加。老规矩先dig blog.yourdomain.com看解析是否正确再查 nginx。5.4 给站点加 SSL 证书HTTPS现在浏览器对 HTTP 的容忍度越来越低不加密的网站在功能和体验上都受限制。给 nginx 加 HTTPS 的方式主要有两种用云厂商的免费证书或者用 Lets Encrypt。如果你不想花时间云厂商控制台直接申请免费证书下载 nginx 类型证书文件包含.pem和.key两个文件然后在 nginx 里配置server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/cert/yourdomain.pem; ssl_certificate_key /etc/nginx/cert/yourdomain.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; root /var/www/yourdomain; }然后配置一个 80 端口的跳转server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; }证书有效期一般是 1 年到期前记得续期。Lets Encrypt 的证书有效期只有 90 天但可以用 certbot 自动续期省得记挂着sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d yourdomain.comcertbot 会自动修改 nginx 配置并加载证书整个过程基本傻瓜化。我个人的建议是能自动续期就自动续期手动续证书太容易出现“早上起来网站证书过期”的尴尬。5.5 多站点配置的最佳实践6. 故障排查把最常踩的坑连成一条排除链路nginx 装好、配置也写好接下来大家一定会遇到五花八门的报错。我不列几十个案例只把新手最常遇到的几个现象和对应的排查路径讲清楚。6.1 场景一页面返回 403 Forbidden403 的意思是“客户端请求有效但服务器拒绝访问”在 nginx 场景里最常见的原因是root 目录没有索引文件或权限不足。比如配置里指定了root /var/www/mysite; index index.html;但该目录下实际没有 index.htmlnginx 找不到可返回的东西就回 403。权限问题也常见nginx 的 worker 进程默认以www-data用户运行如果目录权限是 777 后仍然 403查一下目录属主和 nginx worker 用户是否匹配。排查链路# 1. 先看错误日志这一步能省一半时间 tail -f /var/log/nginx/error.log # 2. 检查目录权限 ls -la /var/www/mysite sudo chown -R www-data:www-data /var/www/mysite # 3. 验证直接访问文件是否正常 curl -I http://127.0.0.1/index.html6.2 场景二反向代理报 502 Bad Gateway502 的意思很简单nginx 把请求转给后端了但后端没回应。它一定发生在proxy_pass场景。你先确认后端服务是否真的在监听端口ss -tlnp | grep 8080 curl http://127.0.0.1:8080如果后端是通的再看proxy_pass的地址写的是http://127.0.0.1:8080还是http://localhost:8080别小看这个差别有些后端会绑定在 IPv6 的::1上而 localhost 解析结果可能走 IPv4导致连不上。然后通过error.log确认后端返回的具体响应码有的 502 其实是后端进程输出日志导致 stderr 堆积异常、连接表满了引发的这时候看后端日志可比看 nginx 日志更有用。6.3 场景三修改配置却无效这是所有 nginx 使用者的必经之路。你在/etc/nginx/nginx.conf里改了配置但浏览器访问效果没变。原因大概率是你没有 reload或者 reload 的并不是你改的那个配置文件。nginx 的配置结构是分层的系统级配置文件在/etc/nginx/nginx.conf站点配置在/etc/nginx/sites-available/和/etc/nginx/sites-enabled/很多发行版默认只 includesites-enabled下的文件你如果只改了sites-available内容没创建软链接等于改了个寂寞。命令养成立刻执行的肌肉记忆nginx -t nginx -s reloadnginx -t只检查语法不生效reload会让 master 进程重新加载配置。不要用nginx -s stop再start那会中断现有连接生产环境会闪断。6.4 平滑升级和卸载之前热词里出现“nginx平滑升级”这里简单说一下。nginx 支持信号控制当你想换新版本时只需要给旧进程发送USR2信号它会拉起新进程并行工作然后发送WINCH信号优雅关闭旧 worker 进程。这个操作可以做到升级过程零中断但前提是新旧版本共享同一个编译参数和 configure 选项否则可能出幺蛾子。卸载 nginx 这件事也有讲究。如果你要彻底卸载 apt 版除了apt remove nginx还要把配置文件一起清掉sudo apt remove --purge nginx nginx-common nginx-full sudo apt autoremove如果是源码编译安装的卸载就更麻烦你需要先停掉 nginx然后手动删除安装目录再清理对应的 systemd unit 文件或/etc/rc.local里的启动记录。很多人的服务器里残留着好几个 nginx 版本80 端口被一个旧进程占着新配置永远不生效排查半天才发现是“两个 nginx 共存的灵异事件”。nginx 的连接模型、模块机制、配置语法本身还有大量进阶内容可以展开但对于从零起步的读者来说把上面这套路径完整走一遍你对“云服务器 nginx”这两个概念就有了真切的体感。后面再遇到更复杂的问题至少知道往哪个方向查、日志文件在哪、VNC 兜底入口怎么进这比死记硬背几十条命令有用得多。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门