如何在ubuntu上使用nginx设置密码验证(代码片段)

多鱼的夏天 多鱼的夏天     2023-03-14     766

关键词:

介绍

设置 Web 服务器时,您通常希望限制访问网站的某些部分。Web 应用程序通常提供自己的身份验证和授权方法,但如果这些方法不充分或不可用,则可以使用 Web 服务器本身来限制访问。

在本指南中,我们将演示如何在 Ubuntu 上运行的 Nginx Web 服务器上对资产进行密码保护。

先决条件

要开始使用,您需要访问 Ubuntu 服务器环境。您将需要具有特权的非 root 用户sudo才能执行管理任务。

如果您还没有这样做,请输入以下命令在您的计算机上安装 Nginx:

sudo apt-get update
sudo apt-get install nginx

创建密码文件

首先,我们需要创建一个文件来保存我们的用户名和密码组合。您可以使用服务器上可能已经可用的 OpenSSL 实用程序来执行此操作。或者,您可以使用包中包含的专用htpasswd实用apache2-utils程序(Nginx 密码文件使用与 Apache 相同的格式)。在下面选择您最喜欢的方法。

使用 OpenSSL 实用程序创建密码文件

如果您在服务器上安装了 OpenSSL,则可以创建一个密码文件,而无需其他软件包。.htpasswd我们将在配置目录中创建一个名为的隐藏文件/etc/nginx来存储我们的用户名和密码组合。

您可以使用此命令将用户名添加到文件中。我们将demo其用作我们的用户名,但您可以使用任何您喜欢的名称:

sudo sh -c "echo -n 'demo:' >> /etc/nginx/.htpasswd"

接下来,通过键入以下内容为用户名添加加密密码条目:

sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

您可以对其他用户名重复此过程。您可以通过键入以下内容查看用户名和加密密码如何存储在文件中:

cat /etc/nginx/.htpasswd

输出如下:

sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

使用 Apache 实用程序创建密码文件

虽然 OpenSSL 可以为 Nginx 身份验证加密密码,但许多用户发现使用专门构建的实用程序更容易。包中的htpasswd实用程序apache2-utils很好地提供了此功能。

通过键入以下命令在您的服务器上安装apache2-utils软件包:

sudo apt-get update
sudo apt-get install apache2-utils

现在,您可以访问该htpasswd命令。我们可以使用它来创建一个 Nginx 可以用来验证用户的密码文件。为此,我们将.htpasswd在我们的/etc/nginx配置目录中创建一个隐藏文件。

我们第一次使用这个实用程序时,我们需要添加-c创建指定文件的选项。demo我们在命令末尾指定一个用户名(在此示例中)以在文件中创建一个新条目:

sudo htpasswd -c /etc/nginx/.htpasswd demo

您将被要求提供并确认用户的密码。

省略-c您希望添加的任何其他用户的参数:

sudo htpasswd /etc/nginx/.htpasswd another_user

如果我们查看文件的内容,我们可以看到每条记录的用户名和加密密码:

cat /etc/nginx/.htpasswd

输出如下

demo:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

配置 Nginx 密码认证

现在我们有了一个包含 Nginx 可以读取格式的用户和密码的文件,我们需要配置 Nginx 以在提供受保护的内容之前检查该文件。

首先打开您希望添加限制的服务器块配置文件。对于我们的示例,我们将使用default通过 Ubuntu 的 Nginx 包安装的服务器块文件:

sudo nano /etc/nginx/sites-enabled/default

在内部,去掉注释后,该文件应类似于以下内容:

/etc/nginx/sites-enabled/default

server 
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / 
        try_files $uri $uri/ =404;
    

要设置身份验证,您需要决定要限制的上下文。在其他选择中,Nginx 允许您在服务器级别或特定位置内设置限制。在我们的示例中,我们将使用位置块限制整个文档根目录,但您可以修改此列表以仅针对 Web 空间中的特定目录:

在此位置块中,使用该auth_basic指令打开身份验证并选择在提示输入凭据时向用户显示的领域名称。我们将使用该auth_basic_user_file指令将 Nginx 指向我们创建的密码文件:

/etc/nginx/sites-enabled/default

server 
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / 
        try_files $uri $uri/ =404;
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    

完成后保存并关闭文件。重启 Nginx 以实现你的密码策略:

sudo service nginx restart

您指定的目录现在应该受密码保护。

确认密码认证

要确认您的内容受到保护,请尝试在 Web 浏览器中访问您的受限内容。您应该看到如下所示的用户名和密码提示:

如果您输入正确的凭据,您将被允许访问内容。如果您输入错误的凭据或点击“取消”,您将看到“需要授权”错误页面:

结论

您现在应该拥有为您的站点设置基本身份验证所需的一切。请记住,密码保护应该与 SSL 加密相结合,这样您的凭据就不会以纯文本形式发送到服务器。

如何在ubuntu上使用nginx设置密码验证(代码片段)

...Web服务器本身来限制访问。在本指南中,我们将演示如何在Ubuntu上运行的NginxWeb服务器上对资产进行密码保护。先决条件要开始使用,您需要访问Ubuntu服务器环境。您将需要具有特权的非root用户sudo才能执行管理任务。如... 查看详情

如何在 Ubuntu 上使用公钥和密码设置 SFTP

】如何在Ubuntu上使用公钥和密码设置SFTP【英文标题】:HowtoSetupSFTPwithPublickeyandPasswordonUbuntu【发布时间】:2019-06-2611:36:56【问题描述】:我在使用“公钥”和“密码”两因素身份验证设置“仅限SFTP”登录时遇到困难。我在Ubuntu16... 查看详情

如何在ubuntu上通过nginx设置http认证

参考技术A需要htpassword来创建和生成加密的用户用于基础认证(BasicAuthentication)。通过以下命令安装apache2-utils。sudoapt-getinstallapache2-utils创建用户名和密码在Nginx托管的网站目录下生成一个.htpasswd文件。如下的命令可以创建文件... 查看详情

在 Ubuntu 上使用 nginx 设置 PHPMyAdmin 只下载文件

】在Ubuntu上使用nginx设置PHPMyAdmin只下载文件【英文标题】:SetupPHPMyAdminwithngnixonUbuntuonlydownloadsfiles【发布时间】:2021-03-1013:33:23【问题描述】:我需要解决一个问题。我有公共地址的ngnix,我需要通过ip在本地网络中使用phpmyadmin... 查看详情

如何在foxmail里收发zohomail的邮件(代码片段)

...来绑定各种邮箱,集中收发各个邮箱的邮件。本文将介绍如何设置在Foxmail里代收发ZohoMail海外企业邮箱的邮件。1.登录到Foxmail账户处,邮箱类型,选择其他。接下来是设置邮箱账户。邮箱账户是自己想收发邮件的账户地址,密码... 查看详情

如何在ubuntu安装mysql

工具原料:电脑+abuntu在ubuntu系统下安装mysql方法如下:ubuntu上安装mysql用以下命令可以完成。sudoapt-getinstallmysql-serverapt-getisntallmysql-clientsudoapt-getinstalllibmysqlclient-dev一、验证原有主机上是否安装mysql:这里主要是运行sudonetstat-tap|gr... 查看详情

kibana安全——设置访问账号密码(代码片段)

...有访问的权限控制,如果需要设置访问的账号密码,可以使用nginx配置代理来发布kibana。本次实验基于《海量日志下的日志架构优化:filebeat+logstash+kafka+ELK》,kibana是部署在test102服务器上,因此在test102服务器上安装一个nginx来发... 查看详情

如何在登录表单php上使用密码验证

】如何在登录表单php上使用密码验证【英文标题】:Howtousepasswordverifyontheloginformphp【发布时间】:2019-11-2420:32:58【问题描述】:我使用了一个对SQL注入开放的登录表单,我正在尝试使用准备好的语句来修复它。我不知道代码有什... 查看详情

Jenkins 服务在节点 js 构建期间完全停止,在 Ubuntu 上使用 nginx 设置获得 502 错误网关

】Jenkins服务在节点js构建期间完全停止,在Ubuntu上使用nginx设置获得502错误网关【英文标题】:Jenkinsservicestopscompletelyduringanodejsbuild,gettinga502badgatewaywithannginxsetuponUbuntu【发布时间】:2016-03-0911:12:14【问题描述】:我已经在UbuntuVPS... 查看详情

如何在 Linux 上使用 pyodbc 对 Active Directory 帐户使用用户/密码身份验证

】如何在Linux上使用pyodbc对ActiveDirectory帐户使用用户/密码身份验证【英文标题】:Howtouseuser/passwordauthforActiveDirectoryaccountwithpyodbconlinux【发布时间】:2019-11-0107:06:28【问题描述】:我必须在linux上使用pyodbc连接到SQLServer。该帐户是... 查看详情

如何使用 cloudformation 在 AWS cognito 上设置验证属性?

】如何使用cloudformation在AWScognito上设置验证属性?【英文标题】:HowtosetverificationattributesonAWScognitowithcloudformation?【发布时间】:2021-05-3122:47:02【问题描述】:我正在尝试在具有cloudformation的cognito用户池上设置验证属性,并且我... 查看详情

在openstack中使用ubuntu的cloudimages如何设置密码(代码片段)

在Ubuntu官方提供的Cloudimages镜像下载后,可以直接上次到Openstack使用。但是这些镜像,如果你拿来直接生成实例,就一定要在创建实例的时候分配密钥对,才能用ssh直接进入实例,而且也不知道实例的密码,无法进行sudo操作。&nb... 查看详情

如何在两个不同帐户之间设置无密码身份验证

】如何在两个不同帐户之间设置无密码身份验证【英文标题】:Howtosetupthepasswords-lessauthenticationbetweentwodifferentaccounts【发布时间】:2016-07-1008:01:06【问题描述】:我们能否在两台机器的两种不同用途之间设置无密码身份验证。例... 查看详情

如何在 docker-compose 上使用 nodejs 在 mongoDB 上设置身份验证?

】如何在docker-compose上使用nodejs在mongoDB上设置身份验证?【英文标题】:HowtosetupauthenticationonmongoDBondocker-composewithnodejs?【发布时间】:2021-12-1205:49:07【问题描述】:我想在使用我的nodejs应用程序连接到mongoDB数据库时设置基本身... 查看详情

如何使用 nginx 设置安全的 websocket

】如何使用nginx设置安全的websocket【英文标题】:Howtosetupsecurewebsocketswithnginx【发布时间】:2019-04-1600:07:05【问题描述】:我有一个在端口9000上运行的网络服务器,我想让它在端口80上可用,并且我想在端口9021上提供一个websocket... 查看详情

如何在 Amazon EC2 上使用 Gunicorn 设置 Nginx 代理缓冲?

】如何在AmazonEC2上使用Gunicorn设置Nginx代理缓冲?【英文标题】:HowcanIsetupNginxProxyBufferingwithGunicornoverAmazonEC2?【发布时间】:2013-05-2009:11:25【问题描述】:我的Django应用程序托管在AmazonEC2上。Gunicorn在同一台机器上运行并提供我拥... 查看详情

如何在 ubuntu 14.04 上使用 nginx 和 gunicorn 部署 django 1.8 应用程序

】如何在ubuntu14.04上使用nginx和gunicorn部署django1.8应用程序【英文标题】:howtodeploydjango1.8applicationwithnginxandgunicornonubuntu14.04【发布时间】:2016-08-0612:27:10【问题描述】:您好,我正在开发我的第一个Web应用程序,我也使用过django... 查看详情

nginx浏览器开启密码验证

...关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证。只有让用户输入正确的用户名和密码才能正常访问。效果如下:在nginx下,提供了ngx_http_auth_basic_module模块实现让用户只有输入正确的用户名密码才允许访... 查看详情