Nginx 反向代理 + systemd 守护:让个人服务稳定跑在云服务器上

举报
yd_274341061 发表于 2026/11/08 14:07:40 2026/11/08
【摘要】 从反向代理配置、多服务路径分发、HTTPS 签发到 systemd 自动拉起,给出一套云服务器上个人服务稳定运行的完整配法与上线检查顺序。

服务器买回来,本地跑起来的 Node 或 Python 服务并不能直接对外用:端口要暴露、进程会挂、重启就没了。这篇讲两件事——用 Nginx 做反向代理把服务收口到 80/443,用 systemd 让服务挂了自动拉起、开机自启。

一、为什么一定要加反向代理

直接把 Node 的 3000 端口暴露到公网,有三个问题:一是端口一变,小程序和 App 的配置都得跟着改;二是没法多服务共存,一个端口只能挂一个程序;三是 HTTPS、跨域、限流这些安全与运维能力全得自己写。

Nginx 站在最前面,外部只看到 80/443,内部按路径或域名分发到不同服务,服务的增减对使用者透明。

二、安装与配置结构

apt install nginx 或 yum install nginx,装完 systemctl status nginx 看状态。站点配置放在 /etc/nginx/conf.d/ 下,每个服务一个 .conf 文件,便于单独修改与回滚。

三、一个 Node 服务的代理配置

假设 Node 服务监听 127.0.0.1:3000,配置如下:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        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_http_version 1.1 是为了支持长连接与 WebSocket;X-Forwarded-For 让后端能拿到真实客户端 IP,不传这个头,后端日志里的来源全是 127.0.0.1。后端监听地址别写成 0.0.0.0,只绑 127.0.0.1,外部就只能通过 Nginx 访问,防火墙少开一个口子。

四、多个服务共存

同一台机器跑网站、API、小程序后端,按路径分发:

location /api/ {
    proxy_pass http://127.0.0.1:8080/;
}
location /web/ {
    proxy_pass http://127.0.0.1:3000/;
}

注意 proxy_pass 结尾有没有斜杠,语义完全不同:带斜杠会把 /api/ 前缀剥掉再转发,不带则原样透传。这是最容易踩的坑之一。

五、加 HTTPS

证书拿到后,一条命令就够:certbot --nginx -d your-domain.com。它会自动改配置、加 301 跳转、配置续期定时任务。

六、systemd 让服务自己活着

手敲 node app.js 最致命的不是麻烦,而是进程挂了你不知道。写一个 unit 文件 /etc/systemd/system/myapp.service:

[Unit]
Description=My Node App
After=network.target

[Service]
Type=simple
User=deploy
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/server.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

三个关键点:Restart=always 挂了自己拉起;User=deploy 别用 root 跑业务;Environment 把环境变量写进来,避免依赖 shell 会话。

启用:systemctl daemon-reload && systemctl enable --now myapp。之后看日志用 journalctl -u myapp -f。

七、上线检查顺序

1. 后端服务先在本机 curl 127.0.0.1:3000 确认通
2. Nginx 配置改完先 nginx -t,通过再 reload
3. 外网 curl 域名,确认响应码与内容
4. 停掉后端进程,确认 systemd 自动拉起
5. 重启服务器,确认服务与 Nginx 都自启

八、小结

反向代理解决对外访问的规范问题,systemd 解决进程存活的可靠性问题。两件事配好,一台普通云服务器上的个人项目就能长期稳定运行,不必每天上去看进程还在不在。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。