注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

nginx缓存系统的一些需要注意的参数  

2013-06-03 17:06:02|  分类: nginx编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

补-1: nginx端口80重定向到443的例子
 server {
listen 80;
server_name localhost;
location /zabbix { if ($scheme ~ ^http:){ rewrite ^(.*)$ https://$host$1 permanent; } alias /usr/share/zabbix; index index.php; error_page 403 404 502 503 504 /zabbix/index.php; location ~ \.php$ { if (!-f $request_filename) { return 404; } expires epoch; include /etc/nginx/fastcgi_params; fastcgi_index index.php; fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ \.(jpg|jpeg|gif|png|ico)$ { access_log off; expires 33d; } }
}
0. 对于特定目录进行加密认证
只充许固定ip访问网站,并加上密码

 root /opt/htdocs/www;

allow 208.97.167.194;

allow 222.33.1.2;

allow 231.152.49.4;

deny all;

auth_basic “C1G_ADMIN”; 

auth_basic_user_file htpasswd;



注:以下参数可以形成一个专门的参数文件,然后用include在nginx.conf调用就可以了。

一.关注点之一
将有关proxy的定义单独放到一个文件中proxy.conf,在nginx.conf由include调入使用。
proxy.conf的内容可以定义如下:

## Proxy caching options
 proxy_buffering on;                                               #开启缓存响应
 proxy_cache_min_uses 3;                                   #资源被访问多少次会缓存

二.定义缓存目录结构和相关参数:
#缓存目录 子目录的深度(levels=1:2) 指定缓存域以及这个域所占内存大小keys_zone=cache_zone_name:memsize 缓存过期被删除时间 定义最大缓存空间
proxy_cache_path /usr/local/nginx/static_cache/ levels=1:2 keys_zone=static_cache:200m     inactive=1d  max_size=30g;
proxy_cache_path /usr/local/nginx/photo_cache/ levels=1:2 keys_zone=photo_cache:200m   inactive=1d  max_size=60g;
proxy_cache_path /usr/local/nginx/image_cache/ levels=1:2 keys_zone=image_cache:200m  inactive=1d  max_size=60g;
proxy_cache_path /usr/local/nginx/avatar_cache/ levels=1:2 keys_zone=avatar_cache:200m  inactive=1d  max_size=60g;
proxy_cache_path /usr/local/nginx/video_cache/ levels=1:2 keys_zone=video_cache:200m     inactive=1d  max_size=60g;
proxy_cache_valid any 10m;                                                                         #所有相应状态码都缓存10分钟



proxy_ignore_client_abort off;     #客户端放弃请求,nginx也放弃对后端的请求
proxy_intercept_errors on;          #用nginx自己的错误页面响应客户端,而不是用后端程序的错误页面响应
proxy_next_upstream error timeout invalid_header;         #在访问出错,超时和收到不合法的报头的时候去请求server池中的下一个server
proxy_redirect off;               #正常转发客户端请求,不重写地址 ,即代理转发停止
proxy_set_header X-Forwarded-For $remote_addr;       #让后端服务器了解到客户端的真实地址

proxy_connect_timeout 60; #连接后端服务器的超时时间
proxy_send_timeout 60; #转发请求的超时时间
proxy_read_timeout 60; #nginx要为后端服务器的响应等待多长时间

三.::终端代理使用方法::

需要使用代理方问代理服务器的机器上执行以下操作:


1) export http_proxy=http://yourproxyaddress:proxyport
2) gedit ~/.bashrc  
    export http_proxy=http://yourproxyaddress:proxyport
      yourproxyaddress可以是代理服务器ip,也可以是代理服务器域名。

四.缓存重点参数

语法: proxy_no_cache string ...;
默认值:
上下文: http, server, location

定义nginx不将响应写入缓存的条件。如果至少一个字符串条件非空而且非“0”,nginx就不将响应存入缓存:


proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma    $http_authorization;

这条指令可以和proxy_cache_bypass指令一起使用。


语法: proxy_pass URL;
默认值:
上下文: location, if in location, limit_except

设置后端服务器的协议和地址,还可以设置可选的URI以定义本地路径和后端服务器的映射关系。 这条指令可以设置的协议是“http”或者“https”,而地址既可以使用域名或者IP地址加端口(可选)的形式来定义:


proxy_pass http://localhost:8000/uri/;
又可以使用UNIX域套接字路径来定义。
该路径接在“unix”字符串后面,两端由冒号所包围,比如: proxy_pass http://unix:/tmp/backend.socket:/uri/;

如果解析一个域名得到多个地址,所有的地址都会以轮转的方式被使用。当然,也可以使用服务器组来定义地址。

请求URI按下面规则传送给后端服务器:

一个实例:

                        fastcgi_pass	unix:/var/run/php5-fpm.sock;

如果proxy_pass使用了URI,当传送请求到后端服务器时,规范化以后的请求路径与配置中的路径的匹配部分将被替换为指令中定义的URI:
location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

如果proxy_pass没有使用URI,传送到后端服务器的请求URI一般客户端发起的原始URI,如果nginx改变了请求URI,则传送的URI是nginx改变以后完整的规范化URI:
location /some/path/ {
    proxy_pass http://127.0.0.1;
}

在1.1.12版以前,如果proxy_pass没有使用URI,某些情况下,nginx改变URI以后,会错误地将原始URI而不是改变以后的URI发送到后端服务器。

某些情况下,无法确定请求URI中应该被替换的部分:


使用正则表达式定义路径。

这种情况下,指令不应该使用URI。


在需要代理的路径中,使用rewrite指令改变了URI,但仍使用相同配置处理请求(break):
location /name/ {
    rewrite    /name/([^/]+)    /users?name=$1    break;
    proxy_pass http://127.0.0.1;
}

这种情况下,本指令设置的URI会被忽略,改变后的URI将被发送给后端服务器。
后端服务器的地址,端口和URI中都可以使用变量:
proxy_pass http://$host$uri;
甚至像这样:
proxy_pass $request;
四.重定向

语法: proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
默认值:
proxy_redirect default;
上下文: http, server, location

设置后端服务器“Location”响应头和“Refresh”响应头的替换文本。 假设后端服务器返回的响应头是 “Location: http://localhost:8000/two/some/uri/”,那么指令

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

将把字符串改写为 “Location: http://frontend/one/some/uri/”。

replacement字符串可以省略服务器名:

proxy_redirect http://localhost:8000/two/     /;

此时将使用代理服务器的主域名和端口号来替换。如果端口是80,可以不加。

default参数指定的默认替换使用了locationproxy_pass指令的参数。因此,下面两例配置等价:

location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect default;

location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect http://upstream:port/two/ /one/;

而且因为同样的原因,proxy_pass指令使用变量时,不允许本指令使用default参数。

replacement字符串可以包含变量:

proxy_redirect http://localhost:8000/ http://$host:$server_port/;

redirect字符串从1.1.11版本开始也可以包含变量:

proxy_redirect http://$proxy_host:8000/ /;

同时,从1.1.11版本开始,指令支持正则表达式。使用正则表达式的话,如果是大小写敏感的匹配,redirect以“~”作为开始,如果是大小写不敏感的匹配,redirect以“~*”作为开始。而且redirect的正则表达式中可以包含命名匹配组和位置匹配组,而在replacement中可以引用这些匹配组的值:

proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
proxy_redirect ~*/user/([^/]+)/(.+)$      http://$1.example.com/$2;

除此以外,可以同时定义多个proxy_redirect指令:

proxy_redirect default;
proxy_redirect http://localhost:8000/  /;
proxy_redirect http://www.example.com/ /;

另外,off参数可以使所有相同配置级别的proxy_redirect指令无效:

proxy_redirect off;
proxy_redirect default;
proxy_redirect http://localhost:8000/  /;
proxy_redirect http://www.example.com/ /;

最后,使用这条指令也可以为地址为相对地址的重定向添加域名:

proxy_redirect / /;

六.nginx的认证模块

     模块ngx_http_auth_basic_module 允许使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。

也可以通过 地址来限制访问。 使用satisfy 指令就能同时通过地址和密码来限制访问。

配置范例

location / {
    auth_basic           "closed site";
    auth_basic_user_file conf/htpasswd;
}

指令

语法: auth_basic string | off;
默认值:
auth_basic off;
上下文: http, server, location, limit_except

开启使用“HTTP基本认证”协议的用户名密码验证。 指定的参数被用作 。 参数off可以取消继承自上一个配置等级 auth_basic 指令的影响。

语法: auth_basic_user_file file;
默认值:
上下文: http, server, location, limit_except

指定保存用户名和密码的文件,格式如下:

# comment
name1:password1
name2:password2:comment
name3:password3

密码应该使用crypt()函数加密。 可以用Apache发行包中的htpasswd命令来创建此类文件。


 
  评论这张
 
阅读(257)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017