nginx为目录或网站加上密码认证 [转]

本文详细介绍了如何使用NGINX为网站、目录甚至特定文件设置密码认证,包括使用.htpasswd命令创建密码文件,以及通过脚本实现密码生成的方法。此外,文章还提供了基于网站和目录的认证配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx可以为网站或目录甚至特定的文件设置密码认证。密码必须是crypt加密的。可以用apache的htpasswd来创建密码。

格式为:

  1. htpasswd -b -c site_pass username password

site_pass为密码文件。放在同nginx配置文件同一目录下,当然你也可以放在其它目录下,那在nginx的配置文件中就要写明绝对地址或相对当前目录的地址。

如果你输入htpasswd命令提示没有找到命令时,你需要安装httpd。如果是centos可以执行如下来安装,

  1. yum install httpd

如果你不想安装httpd的话,可以使用perl脚本来实现(代码如下:)

  1. #! /usr/bin/perl -w   
  2. #filename: add_ftp_user.pl   
  3. use strict;   
  4. #   
  5. print "#example: user:passwd\n";   
  6. while (<STDIN>) {   
  7.     exit if ($_ =~/^\n/);   
  8.     chomp;   
  9.     (my $usermy $pass) = split /:/, $_, 2;   
  10.     my $crypt = crypt $pass, '$1$' . gensalt(8);   
  11.     print "$user:$crypt\n";   
  12. }   
  13. sub gensalt {   
  14.     my $count = shift;   
  15.     my @salt = ('.', '/', 0 .. 9, 'A' .. 'Z', 'a' .. 'z');   
  16.     my $s;   
  17.     $s .= $salt[rand @saltfor (1 .. $count);   
  18.     return $s;   
  19. }  

为脚本赋予可执行权限:

  1. chmod o+x add_user.pl

脚本使用方法:

  1. ./add_user.pl
  2. user:password

把生成的用户名密码粘贴到/usr/local/nginx/conf/vhost/nginx_passwd文件中即可

如果是为了给网站加上认证,可以直接将认证语句写在nginx的配置server段中。

如果是为了给目录加上认证,就需要写成目录形式了。同时,还要在目录中加上php的执行,否则php就会被下载而不执行了。

例如:基于整个网站的认证,auth_basic在php解释之前。

  1. server   
  2. {   
  3.     listen 80;   
  4.     server_name www.92csz.com 92csz.com;   
  5.     root /www/92csz.com;   
  6.     index index.html index.htm index.php;   
  7.     auth_basic "input you user name and password";   
  8.     auth_basic_user_file /usr/local/nginx/conf/vhost/nginx_passwd;   
  9.     location ~ .php$   
  10.     {   
  11.         fastcgi_pass 127.0.0.1:9000;   
  12.         fastcgi_index index.php;   
  13.         include fastcgi_params;   
  14.     }   
  15.     location ~ /\.ht   
  16.     {   
  17.         deny all;   
  18.     }   
  19.     access_log /logs/92csz.com_access.log main;   
  20. }  

针对目录的认证,在一个单独的location中,并且在该location中嵌套一个解释php的location,否则php文件不会执行并且会被下载。auth_basic在嵌套的location之后。

  1. server   
  2. {   
  3.     listen 80;   
  4.     server_name www.92csz.com 92csz.com;   
  5.     root /www/92csz.com;   
  6.     index index.html index.htm index.php;   
  7.     location ~ ^/admin/.*   
  8.     {   
  9.     location ~ \.php$   
  10.     {   
  11.         fastcgi_pass 127.0.0.1:9000;   
  12.         fastcgi_index index.php;   
  13.         include fastcgi_params;   
  14.     }   
  15.     auth_basic "auth";   
  16.     auth_basic_user_file /usr/local/nginx/conf/vhost/auth/admin.pass;   
  17.     }   
  18.     location ~ .php$   
  19.     {   
  20.         fastcgi_pass 127.0.0.1:9000;   
  21.         fastcgi_index index.php;   
  22.         include fastcgi_params;   
  23.     }   
  24.     location ~ /\.ht   
  25.     {   
  26.         deny all;   
  27.     }   
  28.     access_log /logs/92csz.com_access.log main;   
  29. }  

这里有一个细节,就是location ~ ^/admin/.* {…} 保护admin目录下的所有文件。如果你只设了/admin/ 那么直接输入/admin/index.php还是可以访问并且运行的。 ^/admin/.* 意为保护该目录下所有文件。当然,只需要一次认证。并不会每次请求或每请求一个文件都要认证一下。

### 如何在 Nginx 上部署 Django 应用 要在 Nginx 上成功部署 Django 应用,通常需要完成以下几个方面的配置: #### 1. 安装必要的软件 为了运行 Django 应用程序,需要安装 Python 和虚拟环境工具。此外还需要 Gunicorn uWSGI 来作为 WSGI 服务器来处理 HTTP 请求。 ```bash sudo apt update && sudo apt upgrade -y sudo apt install python3-pip python3-venv nginx -y pip3 install --upgrade pip ``` #### 2. 创建 Django 项目 假设已经有一个名为 `myproject` 的 Django 项目,并且它位于 `/home/user/myproject/` 路径下[^1]。 #### 3. 设置虚拟环境并安装依赖项 进入项目的根目录并设置虚拟环境: ```bash cd /home/user/myproject/ python3 -m venv myproject_env source myproject_env/bin/activate pip install django gunicorn psycopg2-binary ``` #### 4. 测试本地服务 确保 Django 项目能够正常运行。可以通过以下命令测试: ```bash python manage.py runserver 0.0.0.0:8000 ``` 访问 IP 地址加上端口 (如 http://<your-server-ip>:8000),确认应用能正常启动。 #### 5. 使用 Gunicorn 运行应用程序 Gunicorn 是一种常用的 WSGI 服务器,用于将 Django 应用暴露给外部网络。 ```bash gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application ``` 这一步是为了验证 Gunicorn 是否可以正确加载 Django 应用。 #### 6. 配置 Nginx 反向代理 编辑 Nginx 配置文件以反向代理请求至 Gunicorn。打开站点配置文件: ```bash sudo nano /etc/nginx/sites-available/myproject ``` 添加如下内容: ```nginx server { listen 80; server_name your_server_ip; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/user/myproject/; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } } ``` 启用该配置并通过链接激活: ```bash sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx ``` #### 7. 启动 Gunicorn 并设置为后台服务 创建 systemd 服务以便于管理 Gunicorn 实例: ```bash sudo nano /etc/systemd/system/gunicorn.service ``` 写入以下内容: ```ini [Unit] Description=gunicorn daemon for myproject After=network.target [Service] User=user Group=www-data WorkingDirectory=/home/user/myproject ExecStart=/home/user/myproject/myproject_env/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock myproject.wsgi:application [Install] WantedBy=multi-user.target ``` 保存退出后执行以下命令使服务生效: ```bash sudo systemctl start gunicorn sudo systemctl enable gunicorn ``` #### 数据库注意事项 如果使用 MySQL 数据库,则需特别关注数据库用户的权限问题。推荐使用 root 用户进行初始开发阶段的调试工作,因为其他自定义用户可能会引发错误码 1045(认证失败)。root 密码可以在控制面板中找到更改[^1]。 #### 总结 通过上述步骤,应该能够在 Linux 系统上利用 Nginx 成功部署一个基于 Django 构建的应用程序。务必检查防火墙规则以及 SELinux 设置以免影响连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值