我尝试使用 Nginx 进行基本身份验证

目录
你好,我是肯。
上次我们使用 Apache 设置了基本身份验证。在我的上一篇博文中,我提到过我也会使用 nginx 进行基本身份验证,所以这篇文章我想介绍一下如何使用 nginx 设置基本身份验证。和往常一样,我将使用 Vagrant 来演示从安装 nginx 到设置虚拟主机以及配置基本身份验证的所有步骤。希望您能一直看到最后。
本次使用的环境和版本
VirtualBox 版本 6.1
Vagrant 版本 2.2.19
centos/7
nginx 版本 nginx/1.23.1
本博客的目标和流程
这次的目标
本博客的目标是对 nginx 中配置的虚拟主机页面应用基本身份验证。
设置步骤
- 编辑 vagrantfile 并启动 vagrant
- 使用 vagrant ssh 进入服务器
- 安装 nginx
- 设置虚拟主机
- 应用基本身份验证
我会大致解释以上步骤,所以如果您已经知道某些步骤,可以跳过!
让我们通过 SSH 登录到使用 Vagrant 启动的虚拟服务器。
为了使用 vagrant ssh,我们还将在这里实现我们为 Apache 基本身份验证所做的设置。
编辑 vagrantfile 文件,以在本地环境中启用互联网连接。
以下是一个 Vagrantfile 示例,其中包含以下设置:
您只需要连接即可
config.vm.network "private_network", ip: "192.168.43.20"
具体如下。
# -*- mode: ruby -*- # vi: set ft=ruby : # 所有 Vagrant 配置如下。Vagrant.configure 中的“2”# 配置配置版本(我们支持旧版本以保持向后兼容性)。除非您清楚自己在做什么,否则请勿更改。Vagrant.configure("2") do |config| # 每个 Vagrant 开发环境都需要一个 box。您可以在 https://vagrantcloud.com/search 搜索 box。config.vm.box = "centos/7" # 创建一个端口转发映射,允许从主机上的端口访问虚拟机中的特定端口。在下面的示例中,# 访问“localhost:8080”将访问虚拟机上的 80 端口。 # 注意:这将启用对已打开端口的公共访问。config.vm.network "forwarded_port", guest: 80, host: 8080 # 创建一个私有网络,允许主机使用特定 IP 地址访问虚拟机。config.vm.network "private_network", ip: "192.168.43.20" end
编辑完成后,运行 vagrant up。
流浪汉向上
vagrant up 完成后,使用 vagrant ssh 连接。
vagrant ssh
正如你所料,这与之前关于使用 Apache 基本身份验证的文章完全相同。
抱歉,但我认为最好还是加上这部分,所以如果好心人能忽略它,直接说声谢谢就太好了……
如果您能登录,说明这一步成功了。接下来,我们来安装nginx。
让我们安装 nginx
上次安装 Apache 的时候,我直接就安装了 httpd,根本没考虑其他问题,但 nginx 可没那么简单。如果你直接尝试安装它,它会告诉你根本没有这个组件。所以,在开始安装之前,我们先来了解一下安装的流程。
- 请注意,本文假设您已执行了 yum update 命令。
首先,我们来创建一个nginx仓库。
sudo vi /etc/yum.repos.d/nginx.repo
现在您已经打开了 nginx.repo,请在编辑器中输入以下设置。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
写完以上内容后,使用 :wq 保存。
现在我们来安装nginx。
sudo yum install nginx
安装完成。如果没有问题,请启动nginx。
sudo systemctl start nginx
最后,输入 http://localhost:8080,如果出现通常的 nginx 页面,则 nginx 的安装和启动就完成了。

接下来,我们来创建一个虚拟主机。
让我们创建一个虚拟主机(*有点繁琐)
首先,为虚拟主机创建文档根目录。(虚拟主机有时也写作 vhost。)
*由于这次我们使用的是 CentOS,默认情况下 sites-available 和 sites-enabled 目录不存在,因此我们需要创建它们。但是,如果您使用的是基于 Debian 的操作系统,根据 Apache 的约定,它们已经存在,因此无需创建 sites-available 和 sites-enabled 目录。
mkdir -p /var/www/vhosts/example.com/public_html
创建完成后,转到 public_html 目录并创建 index.html 文件。
sudo vi index.html
按所需内容输入,然后按 :wq 保存。
在 Nginx 中,要配置虚拟主机,需要创建名为 sites-available 和 sites-enabled 的目录,并在这两个目录下配置虚拟主机。这两个目录稍后会进行符号链接。首先,创建上述两个目录。
mkdir /etc/nginx/sites-available
再创建一个
mkdir /etc/nginx/sites-enabled
创建好这两个目录后,创建虚拟主机的配置文件。
在这种情况下,域名是 example.com,所以文件名将是 example.com.conf。
描述将写成如下形式:
server { listen 80; servername example.com; location / { root/var/www/vhosts/example.com/public_html; index index.html index.php; } }
编写完成后,使用 :wq 保存。然后,创建指向 sites-available 目录和 sites-enabled 目录的符号链接。
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
为了让 nginx 读取上述设置,我们将把它们写入 nginx.conf 文件中。
以下是需要写的内容。
包含 /etc/nginx/sites-enabled/*;
将此内容写入 nginx.conf 文件的末尾。
用户 nginx;工作进程数 1;错误日志 /var/log/nginx/error.log 警告;进程 ID /var/run/nginx.pid;事件 { 工作连接数 1024; } http { 包含 /etc/nginx/mime.types;默认类型 application/octet-stream;日志格式 main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';访问日志 /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;包含 /etc/nginx/sites-enabled/*;#添加部分 include /etc/nginx/conf.d/*.conf; }
配置完成后,我们可以进行语法检查了。
nginx -t
如果看到“语法正确”和“配置文件成功”的消息,则可以确定没有问题。最后,重启 nginx 以使设置生效。
sudo systemctl restart nginx
别忘了编辑 hosts 文件。
任何 IP 地址示例.com
将此内容添加到 hosts 文件中并保存。
*除非以管理员权限运行,否则设置不会生效。因此,在打开 hosts 文件之前,请先以管理员权限运行记事本或类似编辑器。
现在,如果您在浏览器中搜索 http://example.com,并且显示了您在设置过程中输入的信息,则说明设置已完成。

虚拟主机设置完成后,最后一步是设置基本身份验证。
让我们对已设置的虚拟主机应用基本身份验证。
使用 Apache 时,ht 工具已经安装,所以不会有问题。但是,使用 nginx 时,ht 工具没有安装,因此无法使用 htpasswd 命令。所以,我们首先需要安装这些工具。
sudo yum install httpd-tools
安装完成后,使用 htpasswd 命令准备基本身份验证。
htpasswd -c /var/www/vhosts/example.com/.htpasswd 用户名
注册你喜欢的任何用户名和密码。
为了确保万无一失,请确认您已创建正确的用户名和密码。
cat /var/www/vhosts/example.com/.htpasswd
如果显示了您设置的用户名和哈希值,则说明设置已正确完成。
最后,要启用基本身份验证,请将 auth_basic 和 auth_basic_user_file 添加到 example.com.conf。
server { listen 80; servername example.com; location / { root /var/www/vhosts/example.com/public_html; index index.html index.php; auth_basic auth_nginx_test; auth_basic_user_file /var/www/vhosts/example.com/.htpasswd; } }
写入完成后,请重启 nginx。如果启用了基本身份验证,系统会提示您输入用户名和密码。
至此,nginx 中的基本身份验证配置完成。
7