使用nginx做反向代理,当后端服务器需要认证时,需要把认证的http header也传到后端服务器上去,配置为:

proxy_set_header Authorization $http_authorization;

这样配置后,服务器会发出一个认证窗口出来,提示用户输入用户名密码。

如果不想让用户输入用户名密码,可用下面的配置:

proxy_hide_header WWW-Authenticate; //隐藏发给用户的认证http header,相当于不提示用户输用户名密码了。
proxy_set_header Authorization "Basic dXNlcjpwYXNzd29yZA==";  //发送httpd 认证 header给后端服务器。

dXNlcjpwYXNzd29yZA==base64(user:pass)得到的。

解释一下上面两个http header:

WWW-Authenticate: 这是GET的时候带的,服务器发给客户端的。表明客户端请求实体应该使用的授权方案

示例:WWW-Authenticate: Basic

Basic是基本的http认证方式,除此之外还有NTLM等,NTLM是微软的,nginx目前不支持。

Authorization 这个是用户输入用户名和密码后,POST到服务器的时候带的。HTTP授权的授权证书

示例:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

阅读全文

load balancer后端nginx封IP的方法

周末发现在个IP恶意访问,我们就想先封掉这个IP地址。

我们的环境是前端有个load balancer,后端有几台WEB服务器。load balancer上不好封IP地址,那就只能配置在后端WEB服务器的nginx上了。

很简单,我很快就配置上去了,如下面这样的:

deny 82.245.163.1;
allow all

阅读全文

在nginx上配置使用bugzilla

配置bugzilla前需要先安装epel库和rpmforge库。

nginx本身不带perl解析的功能,需要用到fcgi-perl,安装:

yum install fcgi-perl

写一个脚本fastcgi服务的脚本:

阅读全文

nginx rewrite 重写之问号

朋友让我帮写一个nginx rewrite,大致如下:

把用户访问的URL:

http://viptest.test.com/media_files/read_pic_example.html?200904/23/40046803_1240465896n5RK.jpg

转到真实的URL:

http://viptest.test.com/attachments/200904/23/40046803_1240465896n5RK.jpg

一看,很简单,很快就写出来了。如下:

rewrite  ^(.)media_files/read_pic_example.html?(.) 1attachments/2  break;

结果他一试不行,404错误,说明跟本就没有rewrite。

阅读全文

朋友为对付一些乱七八糟网站的盗链,于是就在nginx配置文件内写了一个正则来禁止那些域名,他写的是这个样子:

if (http_referer ~* ._([0-9]{2,3}[a-z]{3}.com|ffkkk.net|444nnn.net)) {
return   403;
}

但是用nginx -t来测试nginx配置文件语法的时候报错,提示在[0-9]这里有错。我看了看,正则写的没有问题呀,怀疑是[]的问题,我自己以前没有在ngnix内用过[],就简化了下:

if (http_referer ~ .[0-9].com) {
return   403;
}

阅读全文

nginx上配置正式的https证书

nginx上配置https证书与apache有些不一样,参考:http://wiki.nginx.org/NginxHttpSslModule,如果是自己建一个证书用,方法如下:

Generate Certificates

To generate dummy certficates you can do this steps:

cd /usr/local/nginx/conf
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Configure the new certificate into nginx.conf:

server {
    server_name YOUR_DOMAINNAME_HERE;
    listen 443;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/server.crt;
    ssl_certificate_key /usr/local/nginx/conf/server.key;
}
Restart Nginx.

Now all ready to access using:

https://YOUR_DOMAINNAME_HERE

上面这种自己建的证书用firefox打开会有个提示:

YOUR_DOMAINNAME_HERE 使用了无效的安全证书。该证书仅对下列名称有效:

(错误码: ssl_error_bad_cert_domain)

阅读全文

nginx rewrite 的一些参数

正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配,其中: * -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 举例: abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2 if ($host ~* (.*).domain.com) { set $sub_name $1; rewrite ^/sort/(d+)/?$ /index.

阅读全文

作者的图片

阿辉

容器技术及容器集群等分布式系统研究

容器平台负责人

上海