最近项目中涉及到旧老项目迁移,需要在nginx上做些配置,所以简单学习了下,好记性不如烂笔头,先记下来。

rewrite

首先查看下nginx是否支持rewrite:

./nginx -V

不支持说明安装nginx时候缺少pcre,需要重新安装nginx:

#安装pcre
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz
tar -zxvf pcre-8.34.tar.gz
cd pcre-8.34
./configure
make
make install
#安装nginx
cd nginx-1.0.12
./configure --conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/usr/local/src/pcre-8.34 \
make
make install
#启动nginx
./nginx
#重启nginx
./nginx –s reload 

示例

比如现有如下的nginx配置:

worker_processes  24;
#worker_cpu_affinity 0000000000000001;worker_rlimit_nofile 65535;error_log  logs/error.log  crit;pid        logs/nginx.pid;events {use   epoll; worker_connections  2048000;
}http {include       mime.types;default_type  application/octet-stream;charset utf-8;sendfile        on;tcp_nopush     on;tcp_nodelay     on;keepalive_timeout  60;client_max_body_size        10m; client_body_buffer_size     128k; upstream log {  server 192.168.80.147:8338;}server {listen       6061;server_name  192.168.71.51;location / { proxy_pass                  http://log;
           proxy_redirect              off; proxy_set_header            Host $host; proxy_set_header            Remote_Addr $remote_addr; proxy_set_header   X-REAL-IP  $remote_addr; proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout       90; proxy_send_timeout          90; proxy_read_timeout          90; proxy_buffer_size           4k; proxy_buffers               4 32k; proxy_busy_buffers_size     64k; proxy_temp_file_write_size 64k;} error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}log_format  log  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access_log.log  log;#设定查看Nginx状态的地址   location /NginxStatus {  #stub_status on;   access_log on;   auth_basic "NginxStatus";   #auth_basic_user_file conf/htpasswd;   }}
}

现在需要作如下的重定向:

192.168.71.51/log.aspx –> 192.168.80.147:8338/log192.168.71.51/do.aspx –> 192.168.80.147:8338/do192.168.71.51/uplog.aspx –> 192.168.80.147:8338/log

可以如下配置:

……
server {listen       6061;server_name  192.168.71.51;rewrite  ^(.*)(?i)uplog.aspx(.*)$  $1log$2  break;rewrite  ^(.*)(?i)log.aspx(.*)$  $1log$2  break;rewrite  ^(.*)(?i)do.aspx(.*)$  $1do$2  break;location / { proxy_pass                  http://log;
           proxy_redirect              off; proxy_set_header            Host $host; proxy_set_header            Remote_Addr $remote_addr; proxy_set_header   X-REAL-IP  $remote_addr; proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout       90; proxy_send_timeout          90; proxy_read_timeout          90; proxy_buffer_size           4k; proxy_buffers               4 32k; proxy_busy_buffers_size     64k; proxy_temp_file_write_size 64k;}
……

关于这里的rewrite配置主要说明以下几点:

  1. rewrite用法: rewrite 正则 替换 标志位
  2. 第一行配置和第二行配置顺序不能颠倒,因为nginx会从上往下依次rewrite(break在这里不起作用);
  3. (?!)表示忽略大小写匹配(网上说的是~*,但好像不起作用,我的nginx版本是1.0.12);
  4. $1,$2表示前面正则表达式匹配到的部分;
  5. rewrite可以在server里也可以在location里,nginx会首先执行server里的rewrite,然后才会执行location,意味着location的是重写后的url,之后还会执行location里的rewrite,最后nginx还会拿结果去执行剩下的location。

关于nginx的rewrite详细用法可以参考详细参考文档:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/(很详细)

根据url参数location

实际开发中经常有根据请求参数来路由到不同请求处理者的情况,根据POST请求参数需要些nginx插件,这里主要简单介绍下如何根据GET参数来路由。

还是上面的配置文件。比如我们希望访问http://192.168.71.51:6061/do1.aspx?t=1212&c=uplog当url中的参数c为config或uplog的时候(忽略大小写)我们路由到其他地方:

首先增加一个upstream,比如:

……
upstream other {  server 192.168.71.41:2210;}
……

然后在location里增加如下的判断即可:

……
location / { if ( $query_string ~* ^(.*)c=config\b|uplog\b(.*)$ ){proxy_pass                  http://other;
       }
……

关键是标红的行,$query_string表示url参数,后面是标准的正则匹配,需要的注意的是nginx中if有很多限制,语法很苛刻,具体参看上面的文档。

很简单却很实用的配置,希望能帮到正在找这方面信息的同学。

转载于:https://www.cnblogs.com/zhanjindong/p/3531733.html

nginx rewrite和根据url参数location相关推荐

  1. nginx php跳转url参数,NGINX 中把url中的内容当初参数处理

    作用:把url为:127.0.0.1/index.php/a/b/c 这样处理 把 post参数: /a/b/c到127.0.0.1/index.php nginx 配置如下: server { li ...

  2. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  3. nginx rewrite规则语法

    在新主机的迁移过程中,最大的困难就是WP permalink rewrite的设置. 因为旧主机是用的Apache, 使用的是WP本身就可以更改的.htaccess,没有太大的难度.而这次在VPS上跑 ...

  4. 很强的nginx rewrite研究(强烈推荐…

    在新主机的迁移过程中,最大的困难就是WP permalink rewrite的设置. 因为旧主机是用的Apache, 使用的是WP本身就可以更改的.htaccess,没有太大的难度.而这次在VPS上跑 ...

  5. nginx rewrite规则语法(关于break和last分析得很好)

    在新主机的迁移过程中,最大的困难就是WP permalink rewrite的设置. 因为旧主机是用的Apache, 使用的是WP本身就可以更改的.htaccess,没有太大的难度.而这次在VPS上跑 ...

  6. Nginx Rewrite研究笔记

    原文出自:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 在新主机的迁移过程中,最大的困难就是WP permalink rewrite的设置 ...

  7. Fwd: Nginx Rewrite研究笔记

    这是yanzeng同学送给我的学习nginx笔记,在这里备份一下.特此声明:版权归yanzeng同学所有,嘿嘿 index 可以放在http/server/location中,当请求为目录时用来设置返 ...

  8. 让人扎心的Nginx rewrite跳转及Location

    目录 一.Nginx跳转的实现方式 一.rewrite概述 一.rewrite跳转实现 二.常用的Nginx正则表达式 三.rewrite的优先级 四.rewrite的flag标记 二.locatio ...

  9. nginx rewrite 参数和例子

    nginx rewrite 参数和例子 推荐参考地址: Mailing list ARChives 官方讨论区 http://marc.info/?l=nginx Nginx 常见应用技术指南[Ngi ...

最新文章

  1. 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
  2. jenkins清除、修改admin主账号的密码
  3. MSB8036 The Windows SDK version 10.0 was not found. Install the required version of Windows SDK o
  4. 梯度直方图(HOG,Histogram of Gradient)
  5. Java正常关闭资源的方式
  6. C++11多线程---互斥量、锁、条件变量的总结
  7. Oracle报错01756,oracle导入数据报错处理
  8. javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方式
  9. 2010年c语言上机题库,2010年计算机c语言上机题库.doc
  10. 大学生个人网站作业 超简单DIV CSS个人网页成品 简单个人网站作业模板 HTML个人网页设计下载 简约黑白色个人主页
  11. 基于范德蒙矩阵的Erasure code技术详解
  12. 数据大屏产品介绍PPT_精品推荐 | 产品介绍、公司宣传、解决方案 | 可编辑PPT(收藏)...
  13. DNS NoteBook
  14. vscode ubuntu18.04安装失败
  15. 史上最美八大隶书,你都临过吗?
  16. 408计算机考研后期规划-10月起
  17. 汇编语言实验八核心考点
  18. 计算机视觉-图像的SIFT特征(尺度空间)
  19. 输入电阻值,计算出并联电阻、串联电阻
  20. Java实现一个单号生成工具类

热门文章

  1. 离奇的梦境,能够防范大脑过拟合
  2. 科普 | 同一个世界,地图有这么多不同的表达!
  3. 生物,AI,心理:目前的大脑/认知/意识/AGI/DRL模型
  4. 是否顺应互联网大脑的发育趋势决定科技企业兴衰
  5. “深绿” 及 AlphaGo 对指挥与控制智能化的启示
  6. AI洞观 | 戴上红帽 看IBM冲杀云计算市场
  7. 人工智能恶意使用报告:预测、预防和缓解
  8. 全球自动驾驶汽车发展指数哪家强?美德领衔,中国第七
  9. Netflix 官方技术博客:个性化分发与推荐,走在前列的 Netflix 是怎么做的?
  10. 异构智能吴韧:物联网是“伪命题”?智联网才是未来