Nginx 反向代理入门:从安装到 HTTPS 配置
很多服务跑起来之后,第一件事不是写更多代码,而是给它前面加一层 Nginx:统一入口、屏蔽端口、顺手把 HTTPS 也接上。本文用最短的路径,把反向代理从安装做到可用。
一、为什么需要反向代理
应用通常监听在 3000、8080 这类内网端口上,直接暴露给用户既不美观也不安全。反向代理站在用户和应用之间:用户只访问 80/443 端口,Nginx 再按规则把请求转发给后端。这样做有三个直接好处:入口统一、后端可以随时换端口甚至换机器而不影响用户、还能在代理层顺手做缓存、限流和 TLS。
二、安装与启动
以 Ubuntu 为例,一条命令即可安装:
sudo apt update && sudo apt install nginx
sudo systemctl enable nginx --now
装好后访问服务器 IP,能看到 Nginx 欢迎页即表示服务已跑起来。主配置文件在 /etc/nginx/nginx.conf,站点配置建议放在 /etc/nginx/sites-available/,再软链接到 sites-enabled,改动后用 nginx -t 检查语法再重载。
三、第一个反向代理配置
假设后端服务跑在 3000 端口,最小配置只需要一个 server 块:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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 是转发的核心;下面三行请求头非常关键,不加的话后端拿到的客户端 IP 永远是 127.0.0.1,日志和限流都会失真。
四、用 upstream 做负载均衡
后端不止一台时,用 upstream 把多台机器编成一组,Nginx 默认按轮询分发:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
一台挂了,Nginx 会自动跳过它;扩容时加一行 server 再重载即可,整个过程用户无感知。
五、HTTPS 配置要点
生产环境必须上 HTTPS。拿到证书后,在 443 端口的 server 块里指定证书路径,并把 80 端口的请求永久重定向到 HTTPS:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
证书到期前记得续期,Let's Encrypt 的 certbot 可以自动化这一步。
六、三个常见坑
第一,WebSocket 应用要在 location 里加 proxy_http_version 1.1 和 Upgrade 相关头,否则握手会被降级。第二,上传大文件记得调大 client_max_body_size,默认 1MB 很容易 413。第三,代理后拿到的协议是 http 还是 https,取决于 X-Forwarded-Proto,后端生成绝对链接时要以这个头为准,否则会出现 https 页面混入 http 资源的问题。
结语
反向代理的配置看着多,真正每天用到的就是上面这几块:proxy_pass 转发、请求头透传、upstream 负载均衡、HTTPS 重定向。先把最小配置跑通,再按需加缓存和限流,远比一开始就抄一份大而全的配置稳妥。
- 点赞
- 收藏
- 关注作者
评论(0)