WSL 是 Windows 自带的 Linux 子系统。它比传统的虚机启动更快,占用系统资源更少,非常利于我们开发基于 Linux 系统的各种应用。本文基于 Ubuntu 20 介绍如何使用 NGINX 实现反向代理功能。
什么是反向代理?
反向代理是一个可以把系统请求分发给后台系统的工具。在现在的微服务时代,我们的系统由各种子服务组成。在同一台机器上每个服务暴露出不同的端口和路径。
为了让客户端能统一从一个端口访问到我们的后台服务,我们可以使用反向代理来从一个统一的入口通过路径 (Path)、头标记(header)等把请求路由到不同的微服务。
NGINX 可以帮助我们实现反向代理功能。
安装 WSL 上的 NGINX
输入以下命令更新 APT 安装源
sudo apt-get update
使用以下服务安装 NGINX
sudo apt-get install nginx -y
你会看到类似于下面的输出内容
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libfwupdplugin1
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 nginx-common nginx-core
Suggested packages:
libgd-tools fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 nginx nginx-common nginx-core
0 upgraded, 13 newly installed, 0 to remove and 47 not upgraded.
Need to get 1218 kB of archives.
启动 NGINX 服务
WSL 使用 service 命令启动和停止服务。
我们先看看 NGINX 的服务状态,使用如下命令:
service --status-all
你会看到一个列表,其中 NGINX 的前面是 “-” 号,表示 NGINX 还是停止状态。
[ - ] nginx
输入以下命令启动服务:
sudo service nginx start
在浏览器中输入 http://localhost 可以看到以下网页。
设置一个反向代理
使用 nano 打开 nginx 的配置文件
sudo nano /etc/nginx/sites-available/default
假设我们有一个在 http://localhost:3000/ui 上的服务。我们可以给 nginx 增加一条如下的配置,这样我们就可以直接通过 http://localhost/ui 来访问这个服务了。
location /ui {
proxy_pass http://localhost:3000/ui;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
上面的 proxy_buffering 是可选项。如果没有这个选项,nginx会提供缓存加速功能。为了避免缓存让我们看不到更新内容,这里我们关掉了缓存服务。
下面的 proxy_set_header X-Real-IP $remote_addr, 让后台服务能够得到真实的 ip 地址。
最后记得重启 nginx 服务:
sudo service nginx restart
排错
如果配置 nginx 的过程中遇到问题,可以使用如下命令查看 nginx 的日志。
cat /var/log/nginx/error.log
结论
本文简要介绍了如何在 Windows WSL 中安装 nginx,以及如何配置一个反向代理。