是否后悔买了个内存太小,cpu太少的低配服务器?不要烦恼,这就带你变废为宝。
准备工作
- 一台具有公网IP的云服务器
- 一台联网的个人电脑
具体操作
云服务器端操作
1. 开放云服务器层面防火墙端口:443, 80
- 在云服务器控制台中,确保已经在防火墙设置中开放了 443 和 80 端口。这通常可以在云服务提供商的控制台进行设置(如 AWS、阿里云、腾讯云等)。
2. 开放操作系统层面防火墙端口:443, 80
在操作系统层面使用 ufw
来配置防火墙,允许通过端口 80(HTTP)和端口 443(HTTPS):
sudo ufw allow 80/tcp # 开放80端口 (HTTP)
sudo ufw allow 443/tcp # 开放443端口 (HTTPS)
sudo ufw status # 检查防火墙状态,确认端口是否成功配置
注意:默认情况下,
ufw
防火墙通常是关闭的。如果防火墙还没有启用,可以运行sudo ufw enable
来启用它。
3. 验证是否能够访问云服务器
- Ping 云服务器公网 IP(需在云服务器控制台允许 ICMP 协议):
ping 你的服务器公网ip
- 如果不想配置 ICMP 协议,可以使用
curl
测试 HTTP 端口(80)是否开放:
curl http://你的公网服务器ip
4. 下载并配置 Nginx
安装 Nginx
- 更新软件包列表:
sudo apt update
- 安装 Nginx:
sudo apt install nginx
- 启动 Nginx 服务:
sudo systemctl start nginx
- 设置 Nginx 开机自动启动:
sudo systemctl enable nginx
- 检查 Nginx 服务状态:
sudo systemctl status nginx
配置 Nginx
- 默认配置文件的位置:Nginx 的默认配置文件通常位于
/etc/nginx
,你可以根据需要修改它。
- 打开默认配置文件进行编辑:
sudo nano /etc/nginx/nginx.conf
http {
# HTTP 配置块,用于重定向 HTTP 请求到 HTTPS
server {
listen 80; # 监听 80 端口,HTTP 协议
server_name ; 115.120.246.30 # 你的服务器公网 IP 地址或域名
# HTTP 到 HTTPS 的 301 重定向
return 301 https://$host$request_uri;
}
# HTTPS 配置块,用于处理 SSL 加密的请求
server {
listen 443 ssl; # 监听 443 端口,HTTPS 协议
server_name 115.120.246.30; # 你的服务器公网 IP 地址或域名
# SSL 配置
ssl_certificate /etc/nginx/ssl/selfsigned.crt; # SSL 证书文件路径
ssl_certificate_key /etc/nginx/ssl/selfsigned.key; # SSL 证书私钥文件路径
# 配置反向代理
location / {
proxy_pass http://127.0.0.1:8100;#记住这个自定义端口,一会要用
# 设置 HTTP 头,确保代理请求正确传递
proxy_set_header Host $host; # 保持原始请求头中的 Host 信息
proxy_set_header X-Real-IP $remote_addr; # 传递客户端的真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
- 检查 Nginx 配置是否正确:
sudo nginx -t
- 重新加载 Nginx 配置:
sudo systemctl reload nginx
- 打开浏览器,输入云服务器的公网 IP 地址
http://你的公网IP
如果一切配置正确,你会发现浏览器上方地址从http://你的公网IP
变为https://你的公网IP
.
并展示页面
502 Bad Gateway
nginx/1.18.0 (Ubuntu)
个人电脑端操作
1.设置个人电脑防火墙规则,允许某端口(eg.8080)的入站流量
打开防火墙设置,点击入站规则,点击新建规则
- 规则类型:端口
- 应用于:TCP
- 特定端口:(eg.8080)
- 连接符合指定条件时:允许连接
- 何时应用此规则:域,专用,公用
- 设置规则名称:(eg.个人电脑暴露服务端口8080)
2. 建立与云服务器的 SSH 反向隧道,处理来自 443 和 80 端口的流量
SSH 反向隧道是通过 SSH 协议将本地计算机的端口映射到远程服务器上,允许远程服务器通过该隧道访问本地计算机的服务。
你已经完成云服务器端的全部配置,希望将发往云服务器的请求交由你的个人电脑上运行的服务器处理
打开cmd命令行工具,使用以下命令来建立 SSH 反向隧道:
ssh -R 8100:localhost:8080 root@你的云服务器公网ip #建立反向 SSH 隧道
解释:
ssh
: 使用 SSH 协议连接到远程服务器。-R 8100:localhost:8080
: 这是反向隧道的关键部分,说明了:-R
:表示反向隧道。8100:localhost:8080
:将访问云服务器8100端口的请求,通过ssh隧道转发到个人电脑8080端口,由对应服务处理(eg.某某外卖🤔 运行在8080端口)
root@你的云服务器公网ip
: SSH 登录的目标是云服务器的公网 IP 地址,用户名为root