Jerry's ink

Back

在构建和部署 Web 服务时,Nginx 作为轻量、高性能的 HTTP 服务器和反向代理工具,几乎是所有运维的必备利器。而对于云服务器资源有限的情况,还可以通过 frp 结合 Nginx 实现内网穿透,让你在本地跑服务、远程部署,灵活又高效

这篇文章将带你从 Nginx 的原理入手,逐步实践从部署 Nginx 到结合反代和 frp 打通内外网络,构建完整 Web 服务,并自动签发 HTTPS 证书

Nginx原理#

Nginx 全称 Engine X,是一款高性能、事件驱动的 Web 服务器与反向代理服务器。它最擅长处理静态内容与高并发连接,工作机制如下:

  • 事件驱动:采用 epoll/kqueue 实现高效异步 I/O

  • 模块化架构:支持通过模块扩展功能,如限速、防火墙、反代、缓存等

  • 反向代理:客户端请求并不直接访问目标服务,而是先到 Nginx,由它将请求“反向”转发到实际服务(如 Node.js、Python、PHP 等)上

Initializing...

Nginx的安装与使用(以Debian为例)#

安装Nginx#

sudo apt-get update
sudo apt-get install nginx -y
bash

启动与状态检查#

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
bash

访问服务器公网 IP,若出现 Welcome to nginx,说明部署成功

构建反代+静态网站配置示例#

由于目前大多数网页服务都跑的是后端服务(即Node.js、Python、PHP),所以只介绍反向代理的配置方法

假设我们有一个域名jerry.crystelf.top

我们可以通过以下步骤使Nginx将访问本域名的流量转发到内网的目标端口上,这里假设我们的服务跑在127.0.0.1:3000

配置Nginx文件#

sudo nano /etc/nginx/sites-available/jerry.crystelf.top.conf # 编辑配置文件,可以直接粘贴到文本编辑器
bash

以下为jerry.crystelf.top的完整Server块配置:

创建软链接启用站点#

sudo ln -s /etc/nginx/sites-available/jerry.crystelf.top.conf /etc/nginx/sites-enabled/jerry.crystelf.top.conf
bash

创建网站目录#

sudo mkdir -p /var/www/jerry.crystelf.top
sudo chown -R www-data:www-data /var/www/jerry.crystelf.top
bash

测试并重载#

sudo nginx -t && sudo systemctl reload nginx
bash

当云服务器资源不足:使用 FRP 本地运行服务 + 内网穿透#

为什么用 FRP?#

有时候,云服务器性能不足、不便部署繁重服务,可以在本地机器运行 Web 服务,然后通过FRP穿透本地内网,将服务暴露到公网服务器上

frp工作原理#

  • frpc 运行在内网客户端,连接公网服务器的 frps
  • 公网服务器监听某个端口(如 7000),将访问转发回本地服务
  • 与 Nginx 配合,即可使用域名访问内网服务

FRP 配置示例#

公网服务器(frps.ini)

[common]
bind_port = 7000
token = password
ini

其中token为验证密钥,自行修改

本地机器(frpc.ini):

[common]
server_addr = your.server.ip
server_port = 7000
token = password
 
[web]
type = tcp
local_port = 3000
remote_port = 2000
ini

其中

  • [web]为你给这个隧道起的名字
  • type为连接类型,一般使用tcp进行连接
  • local_port为本地运行服务的端口
  • remote_port为你想要映射到公网服务器的什么端口

frp启动命令:#

# 启动 frps
./frps -c ./frps.ini
  
# 启动 frpc
./frpc -c ./frpc.ini
 
bash

使用 Certbot 自动申请 HTTPS 证书#

为了让网站支持 HTTPS,我们可以使用 Let's Encrypt 提供的免费证书,搭配 certbot 工具一键申请并自动续期

# 安装 certbot
sudo apt-get install certbot python3-certbot-nginx -y

# 自动配置并签发证书
sudo certbot --nginx

# 测试自动续期
sudo certbot renew --dry-run
bash

总结#

本文介绍了使用 Nginx 部署网站和反代服务的方法,并结合 frp 实现了内网穿透的场景,最后引入 Certbot 实现 HTTPS 支持

无论你是在云服务器上部署静态网站,还是通过本地运行配合反代,Nginx + FRP 是一套高效灵活的 Web 架构方案

使用Nginx配合网页反代及内网穿透快速构建web内容
http://localhost:4321/blog/technique/nginx-website-deployment
Author Jerryplusy
Published at December 20, 2025