阿里云服务器配置反向代理

阿里云服务器配置反向代理

  • admin admin
  • 2026-09-13
  • 4783
  • 0

阿里云服务器配置反向代理是指通过Nginx等反向代理软件接收公网客户端请求,并将请求按规则转发到后端应用服务,再把后端返回内容响应给客户端,从而隐藏真实服务地址、统一访问入口并实现安全防护。反向代理的作用与部署准备反向代理位于客户端与后端服务器之间,客户端...

优惠价格:¥ 0.00
当前位置:首页 > 阿里云高防服务器 > 阿里云服务器配置反向代理
详情介绍

阿里云服务器配置反向代理是指通过Nginx等反向代理软件接收公网客户端请求,并将请求按规则转发到后端应用服务,再把后端返回内容响应给客户端,从而隐藏真实服务地址、统一访问入口并实现安全防护。

反向代理的作用与部署准备

反向代理位于客户端与后端服务器之间,客户端只与代理服务器通信,不知道后端真实IP和端口,在阿里云ECS上部署反向代理前,需要准备一台运行Linux系统的ECS实例,例如Alibaba Cloud Linux、Ubuntu 20.04或CentOS 7.9,通过阿里云控制台安全组规则放行80和443端口,后端应用端口如8080、3000、9000等不需要对公网开放,只允许代理服务器本机或内网访问,创建实例后使用SSH登录服务器,并确认系统软件源可用。

安装Nginx

Ubuntu或Debian系统执行:

阿里云服务器配置反向代理  第1张

sudoaptupdate
sudoaptinstallnginx-y

CentOS或Alibaba Cloud Linux执行:

sudoyuminstallepel-release-y
sudoyuminstallnginx-y

安装完成后启动服务并设置开机自启:

sudosystemctlenablenginx--now
sudosystemctlstatusnginx

使用nginx -v查看版本,确认安装成功,此时访问服务器公网IP应看到Nginx默认页面。

基础反向代理配置

Nginx配置文件通常位于/etc/nginx/nginx.conf,可以在/etc/nginx/conf.d/目录下新建.conf文件,例如创建/etc/nginx/conf.d/app.conf

server{
listen80;
server_nameexample.com;
location/{
proxy_passhttp://127.0.0.1:8080;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_set_headerX-Forwarded-Proto$scheme;
}
}

proxy_pass指定后端服务地址,可以是本机进程、内网其他ECS或容器服务。proxy_set_header用于传递客户端真实信息,否则后端只能看到代理服务器IP,保存后执行sudo nginx -t检查语法,再执行sudo systemctl reload nginx重载配置。

按路径转发与路径重写

当同一域名需要代理多个后端服务时,使用location匹配路径:

location/api/{
proxy_passhttp://192.168.1.10:9000/api/;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
}
location/admin/{
proxy_passhttp://192.168.1.20:8080/admin/;
proxy_set_headerHost$host;
}

注意proxy_pass末尾是否带斜杠会影响URI拼接,如果proxy_pass http://backend/api/;且请求为/api/user?id=1,后端收到的URI仍为/api/user?id=1;如果proxy_pass http://backend;则后端收到完整原始URI,如需去掉前缀,可配合rewrite指令:

location/api/{
rewrite^/api/(.*)$/$1break;
proxy_passhttp://192.168.1.10:9000;
}

这样请求/api/login转发到后端为/login

WebSocket反向代理

对于实时通信应用,需在反向代理中支持WebSocket协议升级:

location/ws/{
proxy_passhttp://127.0.0.1:8081;
proxy_http_version1.1;
proxy_set_headerUpgrade$http_upgrade;
proxy_set_headerConnection"upgrade";
proxy_set_headerHost$host;
proxy_read_timeout3600s;
}

proxy_read_timeout要设置足够长,避免连接空闲被断开。

HTTPS与SSL终止

在生产环境中,应在Nginx层面启用HTTPS,内部后端仍使用HTTP通信,可以将阿里云SSL证书上传至服务器,例如/etc/nginx/ssl/example.com.pem/etc/nginx/ssl/example.com.key,然后配置:

server{
listen443ssl;
server_nameexample.com;
ssl_certificate/etc/nginx/ssl/example.com.pem;
ssl_certificate_key/etc/nginx/ssl/example.com.key;
ssl_protocolsTLSv1.2TLSv1.3;
ssl_ciphersHIGH:!aNULL:!MD5;
location/{
proxy_passhttp://127.0.0.1:8080;
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-Protohttps;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
}
}
server{
listen80;
server_nameexample.com;
return301https://$host$request_uri;
}

这样所有HTTP请求自动跳转HTTPS,Nginx完成后端响应的加密与解密,称为SSL终止。

负载均衡配置

当后端应用部署在多台服务器上时,可以使用upstream定义服务器组:

upstreambackend_pool{
server192.168.1.10:8080weight=3max_fails=2fail_timeout=30s;
server192.168.1.11:8080weight=1max_fails=2fail_timeout=30s;
server192.168.1.12:8080backup;
}
server{
listen80;
server_nameexample.com;
location/{
proxy_passhttp://backend_pool;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
}
}

weight设置权重,backup表示备用节点,只有主节点不可用时才接收流量,还可以使用ip_hash让同一客户端始终访问同一后端:

upstreambackend_pool{
ip_hash;
server192.168.1.10:8080;
server192.168.1.11:8080;
}

缓存与响应压缩

反向代理可以缓存后端响应,降低后端压力,在http块中定义缓存路径:

proxy_cache_path/var/cache/nginxlevels=1:2keys_zone=my_cache:10mmax_size=1ginactive=60muse_temp_path=off;

然后在serverlocation中启用:

location/static/{
proxy_cachemy_cache;
proxy_cache_valid2003041h;
proxy_cache_key"$scheme$request_method$host$request_uri";
proxy_passhttp://backend_pool;
add_headerX-Cache-Status$upstream_cache_status;
}

开启gzip压缩可减少传输体积:

gzipon;
gzip_typestext/plaintext/cssapplication/jsonapplication/javascriptapplication/xml;
gzip_min_length1024;

安全加固

反向代理层需要做好安全配置,隐藏Nginx版本号:

server_tokensoff;

限制请求体大小,防止大文件攻破:

client_max_body_size20m;

仅允许指定域名访问,防止Host头攻破:

server{
listen80default_server;
server_name_;
return444;
}

在阿里云安全组中,只开放80和443端口,后端端口只允许内网网段访问,可以使用命令限制访问频率:

limit_req_zone$binary_remote_addrzone=api_limit:10mrate=10r/s;

location中应用:

location/api/{
limit_reqzone=api_limitburst=20nodelay;
proxy_passhttp://backend_pool;
}

日志与故障排查

Nginx默认访问日志位于/var/log/nginx/access.log,错误日志位于/var/log/nginx/error.log,可以在server块中自定义日志格式,记录真实客户端IP:

log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
access_log/var/log/nginx/example.com.access.logmain;

查看日志:

sudotail-f/var/log/nginx/example.com.access.log

常见错误包括502 Bad Gateway,表示后端服务未启动或端口不通;504 Gateway Timeout表示后端响应超时,可调整proxy_read_timeout403 Forbidden可能由权限或安全组引起,排查时先确认后端服务在本机可访问:

curl-Ihttp://127.0.0.1:8080

再检查Nginx配置和防火墙:

sudonginx-t
sudoss-tlnp|grepnginx

阿里云安全组规则变更后通常立即生效,无需重启实例。

十一、测试反向代理

配置完成后,使用curl验证:

curl-Ihttp://example.com
curl-XPOSThttp://example.com/api/login-H"Content-Type:application/json"-d'{"username":"test"}'

查看返回头中的X-Cache-StatusServer等字段,浏览器访问时可按F12查看网络请求,确认X-Forwarded-For等头信息是否正确传递,也可以用ab进行简单压测:

ab-n1000-c100http://example.com/

观察请求失败率和响应时间,从而判断反向代理与后端服务是否稳定。

0