Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84078
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 217
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-24 17:05
文章分类
文章存档

2016年(2)

2015年(31)

我的朋友

分类: LINUX

2015-08-28 10:08:15


在nginx中配置proxy_pass时,如果是按照^~匹配路径时

要注意proxy_pass后的url最后的/

当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走

如果没有/,则会把匹配的路径部分也给代理走

点击(此处)折叠或打开

  1. location ^~ /static_js/
  2. {
  3. proxy_cache js_cache;
  4. proxy_set_header Host js.test.com;
  5. proxy_pass http://js.test.com/;
  6. }
如上面的配置,如果请求的url是 /> 会被代理成 /> 而如果这么配置:

点击(此处)折叠或打开

  1. location ^~ /static_js/
  2. {
  3. proxy_cache js_cache;
  4. proxy_set_header Host js.test.com;
  5. proxy_pass http://js.test.com;
  6. }
则会被代理到 /> 当然,我们可以用如下的rewrite来实现/的功能

点击(此处)折叠或打开

  1. location ^~ /static_js/
  2. {
  3. proxy_cache js_cache;
  4. proxy_set_header Host js.test.com;
  5. rewrite /static_js/(.+)$ /$1 break;
  6. proxy_pass http://js.test.com;
  7. }
见配置,摘自nginx.conf 里的server 段:

点击(此处)折叠或打开

  1. server {
  2. listen 80;
  3. server_name abc.163.com ;
  4. location / {
  5. proxy_pass http://ent.163.com/ ;
  6. }
  7. location /star/ {
  8. proxy_pass http://ent.163.com ;
  9. }
  10. }
里面有两个location,我先说第一个,/ 。其实这里有两种写法,分别是:

点击(此处)折叠或打开

  1. location / {
  2. proxy_pass http://ent.163.com/ ;
  3. }
  4.  
  5. location / {
  6. proxy_pass http://ent.163.com ;
  7. }
出来的效果都一样的。

第二个location,/star/。同样两种写法都有,都出来的结果,就不一样了。

点击(此处)折叠或打开

  1. location /star/ {
  2. proxy_pass http://ent.163.com ;
  3. }
当访问 的时候,nginx 会代理访问到 ,并返回给我们。

点击(此处)折叠或打开

  1. location /star/ {
  2. proxy_pass http://ent.163.com/ ;
  3. }
当访问 的时候,nginx 会代理访问到 ,并返回给我们。

这两段配置,分别在于, proxy_pass ; 这个”/”,令到出来的结果完全不同。

前者,相当于告诉nginx,我这个location,是代理访问到 这个server的,我的location是什么,nginx 就把location 加在proxy_pass 的 server 后面,这里是/star/,所以就相当于 。如果是location /blog/ ,就是代理访问到 blog/。

后者,相当于告诉nginx,我这个location,是代理访问到的, == ,可以这样理解。改变location,并不能改变返回的内容,返回的内容始终是 。 如果是location /blog/ ,那就是 http://abc.163.com/blog/ == 。

这样,也可以解释了上面那个location / 的例子,/ 嘛,加在server 的后面,仍然是 / ,所以,两种写法出来的结果是一样的。

PS: 如果是 location ~* ^/start/(.*)\.html 这种正则的location,是不能写”/”上去的,nginx -t 也会报错的了。因为,路径都需要正则匹配了嘛,并不是一个相对固定的locatin了,必然要代理到一个server。

阅读(672) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~