一台服务器跑多个网站?Nginx 反向代理十分钟上手
一台服务器跑多个网站?Nginx 反向代理十分钟上手
新手上云常遇到一个问题:服务器只有一个 80 端口,却想同时跑博客、API 和一个静态小站,端口后面再挂一串数字既难记又难看。这时候就该请出 Nginx 反向代理:用户只访问域名,Nginx 在后面按规则把请求分发到不同的服务。
反向代理到底是什么
正向代理是替客户端出门,反向代理是替服务器接客。浏览器访问 blog.example.com,Nginx 收到请求后,根据域名或路径把它转发到本机 3000 端口的博客程序;访问 api.example.com,则转发到 8000 端口的后端接口。对外只暴露 80/443 两个端口,后面的服务端口全部藏在内网,安全性和整洁度都上了一个台阶。
三步搭起来
第一步安装,Ubuntu/Debian 一条命令:sudo apt install nginx,装完 systemctl status nginx 确认它在运行,浏览器访问服务器 IP 能看到欢迎页就说明底子没问题。
第二步写配置。在 /etc/nginx/sites-available/ 新建一个文件,比如 mysite,核心就几行:
server {
listen 80;
server_name blog.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server_name 决定这条规则匹配哪个域名,proxy_pass 是真正的后端地址。那两个 proxy_set_header 别漏:不传 Host,后端拿到的域名就不对;不传 X-Real-IP,后端日志里看到的全是 127.0.0.1,排障时会很痛苦。
第三步启用并重载:sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/,先 sudo nginx -t 检查语法,看到 successful 再 sudo systemctl reload nginx。reload 不会中断已有连接,比 restart 温柔得多,生产环境优先用它。
常见坑
- 改完配置没生效:先查
nginx -t,再确认域名解析到了这台服务器,最后看是不是浏览器缓存。 - 502 Bad Gateway:Nginx 本身没问题,是后端没起来或端口写错了,先
curl 127.0.0.1:3000确认后端能通。 - 一个域名配了多条规则:Nginx 按 server_name 精确匹配,配错域名请求会落到默认站点上。
掌握这套模板后,再加 HTTPS 也只是多几行证书配置的事:域名分流、动静分离、负载均衡,都是从这几行长出来的。先把一个站点的代理跑通,再慢慢加第二个、第三个,一台服务器撑起多个小项目完全够用。
- 点赞
- 收藏
- 关注作者
评论(0)