Nginx 反向代理 + 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 解决进程存活的可靠性问题。两件事配好,一台普通云服务器上的个人项目就能长期稳定运行,不必每天上去看进程还在不在。
- 点赞
- 收藏
- 关注作者
评论(0)