nginx 是一款高性能的开源 Web 服务器软件,也可以用于反向代理、负载均衡等,并且具有高性能、低内存消耗等优点。
本文我们主要讲解关于nginx的反向代理功能,并在服务器上实现如下功能:
•反向代理其他后台服务
•通过域名访问后台服务
前期准备:
•一台云服务器(ubuntu20.04 LTS)
•一个可用的域名
注意:
本文中因服务器上已经提前安装了nginx,所以第二章(安装nginx)中使用的系统是一个全新的本地ubuntu系统来演示,因此其ip地址为局域网地址。
第三章(nginx反向代理配置)中,使用的系统为云服务器ubuntu系统,其ip地址为公网地址,并且已经使用了域名进行了解析。
若使用的是CentOS等其他系统,则部分管理命令和操作命令可能不相同,但nginx配置和使用逻辑基本相同。
1.更新系统软件包
sudo apt update
2.安装nginx
sudo apt install nginx -y
-y选项代表安装过程中的询问默认为yes
安装完成后,可以检查系统中是否多了两个目录文件,/etc/nginx/和/var/www/html,其中:
/etc/nginx/:包含 NGINX 的配置文件,主要用于配置 nginx 服务器的行为,包括监听的端口、反向代理设置、SSL/TLS 配置等。
/var/www/html: nginx默认的网站根目录,这里存放了HTML页面、JS文件等资源。
在本文中,我们主要讲解nginx的反向代理功能,所以/var/www/html作为nginx的web服务器功能目录,我们暂时不进行任何修改。
3.验证nginx是否安装成功
启动nginx服务,并添加为系统启动时自启动:
sudo systemctl start nginx
sudo systemctl enable nginx
查看nginx服务当前状态:
sudo systemctl status nginx
通过检查状态可以看出当前nginx服务状态为正在running运行,并且已经enabled添加到了开机自启动,通过下方输出的日志也可以看出已经启动成功。
在浏览器使用服务器ip地址进行访问ngxin的web服务器功能:
192.168.3.168:80
或
192.168.3.168 #默认访问80端口
至此可以证明nginx已经安装成功。
在反向代理功能中,需要了解nginx配置文件中/etc/nginx/sites-available和/etc/nginx/sites-enabled两个目录:
sites-available:这个目录包含了所有可用的虚拟主机配置文件。每个文件通常对应一个虚拟主机(一个网站)的配置。在这里你可以存放所有已经创建的虚拟主机配置文件,无论是否启用。
sites-enabled:这个目录包含了当前启用的虚拟主机配置文件的符号链接。在 nginx启动时,它只会读取 sites-enabled 目录中的配置文件。
通俗来讲:虚拟主机是指同一个物理服务器上运行的不同网站或服务,available目录存放了我们想要代理的虚拟主机的配置文件,但这些配置文件是否启用取决于我们是否将其链接到了enabled目录中,因为nginx服务只会读取enabled目录来进行设置,这种做法使得添加、编辑和禁用虚拟主机配置变得更加简单和安全。
本次演示将使用nginx为emqx的管理控制台服务(EMQX Dashboard,端口18083)完成反向代理功能。(若没有emqx服务,也可以用于其他任何应用程序和服务,道理相同)
(1)云服务器上已经安装并启动了emqx服务,并且通过ip+端口能够正常访问EMQX管理控制台
(2)服务器ip已绑定域名,且域名已完成了DNS解析
这里需要用到二级域名,所以对域名直接进行了二级域名泛解析
(3)新增虚拟主机配置文件
例如,这里我们使用的域名为keeshow.cn,我们想将emqx管理控制台服务通过mqtt.keeshow.cn来访问。
新增/etc/nginx/sites-available/mqtt.keeshow.cn配置文件,配置内容为:
server {
listen 80;
listen [::]:80;
server_name mqtt.keeshow.cn;
client_max_body_size 1024m;
location / {
proxy_pass http://127.0.0.1:18083;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server块:定义了一个虚拟主机,用于处理特定的域名和端口的请求。
listen:80:监听 IPv4 地址上的端口 80(HTTP 默认端口),[::]:80:监听 IPv6 地址上的端口 80。这样可以同时处理 IPv4 和 IPv6 的 HTTP 请求。
server_name:指定该虚拟主机响应的域名。只有请求的 Host 头匹配 mqtt.keeshow.cn 时,才会使用这个 server 块。
client_max_body_size:设置客户端请求体的最大允许大小为 1024MB。这在需要上传大文件时有用,防止请求因为过大被拒绝。
location 块:定义了对根路径(/)的请求的处理方式。
proxy_pass:将所有到达 mqtt.keeshow.cn 的请求代理到本地的 127.0.0.1:18083。代表 nginx接收到请求后,将它转发给运行在本地端口 18083 的 EMQX Dashboard。
proxy_set_header:请求头设置相关。
HOST $host:将客户端请求的 Host 头传递给后端服务器。$host 变量代表客户端请求的主机名。
X-Forwarded-Proto $scheme:将客户端使用的协议(HTTP或 HTTPS)传递给后端服务器。$scheme 变量表示请求的协议。
X-Real-IP $remote_addr:将客户端的真实IP 地址传递给后端服务器。$remote_addr 变量表示客户端的 IP 地址。
X-Forwarded-For $proxy_add_x_forwarded_for:将客户端的原始 IP 地址和所有代理的 IP 地址传递给后端服务器。$proxy_add_x_forwarded_for 变量包含客户端的 IP 地址以及所有代理服务器的 IP 地址。
创建完成后,查看sites-available目录可以看到新增的配置文件,同理,如果需要新增其他配置文件,也需要创建在该目录中。
(4)链接虚拟主机配置文件
链接sites-available目录中的配置文件链接到sites-enabled目录中:
sudo ln -s /etc/nginx/sites-available/mqtt.keeshow.cn /etc/nginx/sites-enabled/
该链接会在sites-enabled目录中生成一个软连接,并指向了sites-available目录中的原始配置文件,同理,我们也能在这里看到其他已代理服务的链接,他们都来自于sites-available目录。
完成配置后,检查配置有无语法错误:
sudo nginx -t
(5)重启nginx
#重新加载nginx配置文件
sudo systemctl reload nginx
#重新启动nginx
sudo systemctl restart nginx
(6)通过域名访问
完成以上步骤后,代表已经配置好了nginx的反向代理,再通过域名访问EMQX管理控制台服务,能够正常访问。
nginx作为反向代理服务器,它的反向代理功能可以帮助将客户端的请求转发到后端的多个服务器或服务上,并将后端服务器的响应返回给客户端。
当使用域名进行反向代理时,客户端只能看到域名,而无法直接看到后端服务器的真实IP地址。这样可以隐藏后端服务器的真实IP地址,增强了安全性和隐私保护。
其他文章阅读推荐: