Apache与Nginx用户认证

作者:Ajian 发布时间:June 9, 2009 分类:Apache,Nginx

前言:有时一个小小的认证可以帮到不少的忙 如:电子商务的网站做的测试站等 各种监控软件 不希望别人去看到等 对这种不需要太高性能 只要功能的完全可以用用户认证完成。

一、Apache认证

认证的类型:Basic

Digest摘要

认证方法:A、容器认证:<Directory> ……</Directory>

B、隐藏文件认证创建.htaccess文件

方法一、容器认证

A、进入配置文件vi /etc/httpd/conf/httpd.conf

B、配置:大约在531行附近配置如下:

<Directory “/var/www/html/mrtg”>

AllowOverride None##不允许通过隐藏认证,即通过容器认证

AuthType Basic##认证类型为Basic

AuthName“ajian”##认证名字为Ajian

AuthUserFile/var/www/passwd/pass##pass为认证密码文件,指定密码文件存放的位置。

Requirevalid-user##有效用户(注意大小写,因为Word的原因有些大小写有变化)

</Directory>

C、创建目录mkdir-p/var/www/passwd

进入目录cd /var/www/passwd

D、创建Apache用户htpasswd-cpassajian##pass为密码文件Ajian为用户

更改Pass文件的使用权给Apachechown apache.apache pass

附:再在Pass文件中添加一个用户:htpasswdpasstt##添加一个TT的用户到Pass文件中

E、重启服务并测试

方法二、通过隐藏认证

和上面差不多不过配置不一样

Httpd主配置文件

<Directory “/var/www/html/mrtg”>

AllowOverrideAuthConfig

</Directory>

创建隐藏文件并放到要通过认证的目录

Eg:vi/var/www/html/mrtg

AuthTypeBasic

AuthName“Ajian”

AuthUserFile/var/www/passwd/pass

Require valid-user

二、Nginx 登录认证

如果要进行登录认证访问,在nginx.conf中的虚拟主机配置:
auth_basic  "web test";
auth_basic_user_file  /www/htpasswd.conf;

注意:1、 auth_basic_user_file 最好用绝对路径
然后编辑htpasswd.conf文件,

需要用Apache的htpasswd命令生成:
# /usr/local/apache/bin/htpasswd -nb user 123456
user:0MIByk5HqBep

将输出的导入到htppasswd.conf中:
user:0MIByk5HqBepY

注意:1、这个文件跟nginx的用户要同权限

Nginx 错误重定向细节

作者:Ajian 发布时间:April 17, 2009 分类:Nginx

Nginx的错误重定向也有些需求,就按实例来说明下。

1、最简单的重定向404页面(404.html为自定义的页面)

error_page  404  /404.html;

2、需要重定向4** 5** 的所有的页面(error.html为自定义页面)

方法1、  error_page 402 403 404 500 502 503 504 /error.html;

方法2、(征集,是否有完全满足所有的4** 5** 不用单独一个个列出来的写法)

3、重定向请求错误的php页面

如果是一般的文件上面的都可以解决,但是如果是PHP的,就会出no input file specified.

需要再配置文件nginx.conf 中 fastcgi  位置加上   fastcgi_intercept_errors on;

PS:特别注意的是404.html(自定义的文件)文件页面大小要超过512k,不然会被ie浏览器替换为ie默认的错误页面。(听别人说的,没有尝试过)

nginx配置rewrite实例[原创]

作者:Ajian 发布时间:February 4, 2009 分类:Nginx

之前网站用的是jsp的网页,后来又改成用apache + php的,为了防止搜索过来原来老的jsp路径都可以访问就在apache上做了rewrite,现在apache无法承受压力,将apache改成nginx,遇到的问题就是如何将apache的rewrite改成nginx的语法实现。
通过在google上的搜索总结几点如下,因为要实现我们网站的rewrite很麻烦所以折腾了很久。
一、伪装动态的地址为静态地址
这种是最常用和最简单的,所谓的动态地址即带有参数的URL
如:真实访问地址是http://www.test.com/a.php?b=test 但想通过rewrite实现地址的静态化,方便用户访问想改为http://www.test.com/test.html
Apache:
RewriteEngine On
RewriteRule /test.html /a\.php\?b=test [L]
Nginx:
rewrite "/test.html" /a.php?b=test last

其实nginx的rewrite比apache更简单了,至少要写的东西少些,另外注意1、Nginx伪装地址需要双引号
2、真实地址不需要\ 来转义
3、[L] 改为last
4 、Apache可以放到.htaccess中,nginx不行
二、复杂的地址伪装
这个其实跟上还是一样的、只是运用复杂的正则表达式和通用的变量来完成使rewrite规则一条就适应所有的。

三、带参数的地址伪装
rewrite都有一个特点,不管是apache还是nginx,就是用上面的方法rewrite规则的伪装的地址上不能传递参数,会把?当成与此同时表达式。当然肯定是有解决的办法,我们的网站就是面临这种问题
如:想让用户输入http://www.test.com/a.jsp?Model=3500c 而访问http://www.test.com/b.php?id=10
这个转换是即没有规律又要传递参数的
Apache:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^Model=3500c$
RewriteRule ^a\.jsp$ b\.php\?id=10 [L]
Nginx:
if ( $query_string = "Model=3500c" ){
rewrite ^ /b.php?id=10 last;
}

像这种传递参数的只能用rewrite的变量和if语句来做,相对来说nginx还是比较简单的,如果想实现更多的功能查看下面的nginx rewrite参数,通过组合肯定可以都实现。

nginx rewrtie参数

正则表达式匹配,其中:

* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

文件及目录匹配,其中:

* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行

flag标记有:

* last 相当于Apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向
* permanent 返回301永久重定向

一些可用的全局变量有,可以用做条件判断

$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri