nginx中目录加密与添加用户认证配置

    有时候为了安全,我们不希望暴漏我们网站的后台地址,所以一般我们都把后台的地址隐藏。比如说一些开源的cms,如果是通过http://www.你的域名/admin.php?m=admin这样访问的话,我们一般把admin.php改成别的不容易被猜测的文件名,但是对于一些cms,则不能这样改,因为有很多地方用到了这个写死的路径,比如wordpress,后台访问的路径一般都是http://www.你的域名/wp-admin/或者http://www.你的域名/wp-login.php,wp-admin和wp-login.php又不方便改,改了就得改原程序文件,这样不方便升级,而且也不知道要改多少。

    所以,这个时候我们就希望可以在访问我们的后台的时候,要先输入用户名和密码,通过了认证才进入到后台地址。下面,我们来以nginx为例,说一下如何给某个目录添加用户名和密码的认证,通过用户名密码认证访问特定web站点目录,给后台目录加密。

    我们是通过nginx的 auth_basic 来实现的。所以我们需要在nginx的虚拟主机配置文件里面设置,对于使用虚拟主机的朋友,就没有办法了。拿wordpress为例说明,wordpress的后台地址是 http://www.你的域名/wp-admin/,还有登录页面  http://www.你的域名/wp-login.php  ,所以我们要对admin的文件目录加密,还是有wp-login.php路径加密。

    【1】设置密码文件。

    首先我们需要设置一个密码文件,密码是要经过htpasswd来生成,我们来个简单的,直接使用php来生成密码。新建一个php文件,输入代码

       //将代码中的两个 123 替换成您的访问密码

 代码如下 复制代码
echo crypt('123', base64_encode('123'));    //得到 MTTuFPm3y4m2o

    我们得到 一个字符串  MTTuFPm3y4m2o,这个字符串就是123加密之后的密钥。

    【2】在服务器上面的/home/mypwd/目录下新建一个文件 pass 的文件,用户名是 test,密码是123

 代码如下 复制代码
cd /home/mypwd/
vi pass

[/php]

    在打开的文件里面输入

 代码如下 复制代码
test:MTTuFPm3y4m2o

 
    test就是用户名,然后就是一个冒号:,然后就到123加密得到的密钥

    然后退出并保存文件

:wq
    这样我们就定义了存用户名和密码的文件

    【3】在nginx的虚拟主机配置文件里面设置

    打开您的站点的配置文件 ,一般路径是安装路径下面的 conf/vhost/目录下。

    打开配置文件,

vi test.你的域名
 
    里面已经有了配置的信息了,在里面加上一下配置

 代码如下 复制代码
location /admin/{
 
auth_basic 'hello,zhoumanhe!';
auth_basic_user_file  /home/mypwd/pass;
}
location /wp-login.php {
auth_basic 'Hi,zhou manhe.welcome back!';
auth_basic_user_file  /home/mypwd/pass;
}

说明一下,auth_basic后面的是提示信息,auth_basic_user_file后面的就是你的那个存放用户名和密码的文件的路径

然后保存,重启一下nginx,如果重启提示有错,可能是配置文件哪里写过了,回去检查一下。如果ok,就测试一下吧!出现这个说明成功了一半。为什么说成功了一半?!!

    【4】处理意外情况

输入用户名和密码试试,进入到后台的登录地址了没有?有一些朋友可能会遇到500的错误,我就一直纠结与这个好久。。。如果配置文件有错,重启的时候会报错的啊,网上查了一下说500有可能是配置文件的重写规则有错,检查了,没错。。。后面我查看了nginx的日志文件,报错是

15868#0: *5606 open() “/home/mypwd/pass” failed (13: Permission denied)…..;

又百度了一下,是这个读取这个文件的权限不够,在linux命令行下面查看了一下nginx的进程

 代码如下 复制代码

ps -aux | grep nginx

发现nginx的master进程是root的用户,但是worker process进程是nobody用户的,而我的nginx是root用户的,默认是用worker进程读文件,虽然我赋予了777权限也还是不行(不懂为什么),所以要吧worker进程改成root的,这样就访问得了了。

打开nginx的配置文件,nginx安装目录的conf/nginx.conf文件,找到#user nobody,或者也有可能是是user nobody,改成user root; 即可。重启nginx试一下,是不是成功了呢

案例
正常的:pass.你的域名,要加密的路径 pass.你的域名/admin,用户名:zhou,密码:123

时间: 2024-07-31 18:49:26

nginx中目录加密与添加用户认证配置的相关文章

Nginx用户认证配置方法详解(域名/目录)_nginx

Nginx可以为某一个域名单独加用户认证,具体做法如下: 1. 生成用户认证的用户名和密码: 复制代码 代码如下: #wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh 根据提示输入: 用户名:密码:文件名: 脚本会自动生成认证文件,auth.conf内容如下: 复制代码 代码如下: /usr/local/nginx/conf/auth.conf 2. 为Nginx添加auth认证配置 下面以某域名下面的auth目录为例,在域

Nginx用户认证配置方法(域名/目录)详解

Nginx可以为某一个域名单独加用户认证,具体做法如下: 1. 生成用户认证的用户名和密码:  代码如下 复制代码 #wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh 根据提示输入: 用户名: 密码: 文件名: 脚本会自动生成认证文件,auth.conf内容如下:  代码如下 复制代码 /usr/local/nginx/conf/auth.conf 2. 为Nginx添加auth认证配置 下面以某域名下面的auth目录为例,

Nginx中的用户认证配置及阻止用户使用代理访问的方法_nginx

nginx用户认证配置( Basic HTTP authentication)ngx_http_auth_basic_module模块实现让访问着,只有输入正确的用户密码才允许访问web内容.web上的一些内容不想被其他人知道,但是又想让部分人看到.nginx的http auth模块以及Apache http auth都是很好的解决方案. 默认情况下nginx已经安装了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 --without-http_auth_

nginx用户认证配置( Basic HTTP authentication)

ngx_http_auth_basic_module模块实现让访问着,只有输入正确的用户密码才允许访问web内容.web上的一些内容不想被其他人知道,但是又想让部分人看到.nginx的http auth模块以及Apache http auth都是很好的解决方案. 默认情况下nginx已经安装了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 --without-http_auth_basic_module . nginx basic auth指令 语法:  

Nginx中禁止使用IP访问网站的配置实例_nginx

国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了.这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟来跟大家一起探讨一下. 国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了.这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟来跟大家一起探讨一下. 如下的配置项,可以设置允许使用I

jquery中插件实现自动添加用户的具体代码_jquery

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head>  <meta http-equiv=

详解Nginx中的geo模块与利用其配置负载均衡的示例_nginx

geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module. ngx_http_geo_module模块可以用来创建变量,其值依赖于客户端IP地址.geo指令语法: geo [$address] $variable { ... } 默认值: - 配置段: http 定义从指定的变量获取客户端的IP地址.默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量

Nginx中防止SQL注入攻击的相关配置介绍_nginx

防止sql注入最好的办法是对于提交后台的所有数据都进行过滤转义. 对于简单的情况,比如包含单引号' , 分号;, <, >, 等字符可通过rewrite直接重订向到404页面来避免. 用rewrite有个前提需要知道,一般用rewrite进行正则匹配只能匹配到网页的URI,也就是url中?前部分,?以后部分是请求参数. 问号后面的请求参数,在nginx用$query_string表 示,不能在rewrite中匹配到,需要用if判断 例如,对于参数中带有单引号的'进行匹配然后定向到错误页面, /

LNMP设置Nginx浏览目录权限

在学习Linux时,Web环境是LNMP,在使用过程中浏览目录时提示没有权限,要打开这个功能需要做以下操作 打开 nginx.conf 配置文件 在 location server 中或 http 代码片段中加入 autoindex on 通过以上两个设置就可以了,不过下面两个参数可以根据自身需求来选择设置 参数:autoindex_exact_size off; 说明:默认为on,显示出文件的确切大小,单位是bytes. 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB 参数:a