nginx location中多个if里面proxy_pass的方法_nginx

来源:脚本之家  责任编辑:小易  

这样的用法,当bai然只能到第一du个的,要这zhi样用在http节点中加入这个,daoserver的具体值内你自已改upstream cjdby{ server pigoss; server tianyuan; }在server节点中,容只保留一下location,然后把proxy_pass改成这样proxy_pass http://cjdby;其它的set_header不变更多追问追答追问我是想设置 htt p://1 . c om /1 ht t p:1 . c om /2 这样的 怎么设置啊?追答upstream cjdby{ server 1.com/1; server 1.com/2; }proxy_pass还是与上面相同你试试改成这样行不行追问估计不行~~我好像试过,我明天再用这方法试试~~谢谢啊~果然不行 说 有非法字符,当你设置两个 location / 时,当62616964757a686964616fe59b9ee7ad9431333332633032然只会匹配第一个了。 你的意思是不是要配置两个域名?server { listen 80; server_name w w w .1. c o m; location / { proxy_pass h tt p://p ig oss;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}server { listen 80; server_name w w w .2 c o m; location / { proxy_pass htt p://2;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}追问我是想设置 htt p://1 . c om /1 ht t p:1 . c om /2 这样的 怎么设置啊?www.zgxue.com防采集请勿采集本网。

1、首先我们回顾一下nginx中location的相关知识

“/index.php”请求同样先被字符location “/” 匹配,然后才被正则表达式“笔记:nginx是让客户端程序找到文件的目录位置。具体如何处理这个得让后端来

1)location的匹配指令: ~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大小写 ^~    #^~表示普通字符匹配,不是正则匹配。如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 =      #进行普通字符精确匹配 @     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

proxy_pass网址后是可以带路径的,但是带路径的话涉及到的规则比较复杂。 如下所示: (1)如果包含路径,则匹配某个location的正常uri成功的部分则会被proxy_pass中指定的路径部分代替,例如: location /name/ { proxy_pass http://127.0.0.1/

2)location 匹配的优先级(与location在配置文件中的顺序无关)

server_name 域名; location /路径1/ {}location /路径2/ {} 就可以 : 域名/路径1/ 域名/路径2/ 这样来访问了。

1.= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。

不可以,Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了。 下面我就来说说server_name的使用吧: server_name的匹配顺序 Nginx中的server_name指令主要

2.普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。

多个目录去掉PHP执行权限 代码如下 复制代码 location ~ /(attachments|upload)/.*.(php|php5)?$ { deny all; } 将attachments、upload这二个目录的PHP执行权限去掉。 附,完整的虚拟主机配置: 代码如下 复制代码 server{ listen 80; server_na

3.^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。

4.最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

2、nginx多个if里面proxy_pass:

server {listen 127.0.0.1:80; set $test A; set $testB B; location / { if ($test ~* "A") { proxy_pass http://www.so.com; break; } if ($testB ~* "B") { proxy_pass http://www.sogou.com; #break; } }}

希望满足某个条件的时候,走某个proxy_pass。但是如果多个if都满足,比如上例中的情况:在第一个if中没有break的时候,就会执行下面的;为了第一个匹配上之后就执行proxy_pass,可以加上break。(在nginx中貌似没有if else这样的指令)

3、判断参数进行不同的proxy_pass:

rewrite只能通过url路径进行匹配,不能进行参数匹配,所以如果要实现参数的判断需要用$arg_parameter。

location / { root html; index index.html index.htm index.php; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Connection ""; if ( $query_string ~* "usg=0" ) { proxy_pass http://local_workera; } if ( $query_string ~* "usg=1" ) { proxy_pass http://local_workerb; } if ( $arg_uid ~* "(.*[AB]$)" ) { proxy_pass http://local_workerf; } proxy_pass http://local_workera;}

1)请求路径中的usg=0和usg=1这两个参数是确定的,所以使用了$query_string进行正则匹配即可;($query_string的值是请求中所有参数)

2)接下来,我们想对uid的值如果是以A、B结尾的请求,转向local_workerf处理,这时候就无法用$query_string进行正则匹配了;(因为对于/?uid=1A&t=1&usg=1和/?uid=123&t=A&usg=0 不太好匹配)这时,只能用$arg_uid进行正则匹配了。

3)由于usg=0和usg=2这两个参数是互斥的,所以根据上面location中if指令的逻辑,不用break也可以正确处理,且放到最上面。对于uid的匹配,由于会和usg进行冲突,所以只能放到最下面或者加break,即:

location / { root html; index index.html index.htm index.php; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Connection ""; if ( $arg_uid ~* "(.*[AB]$)" ) { proxy_pass http://local_workerf; break; } if ( $query_string ~* "usg=0" ) { proxy_pass http://local_workera; } if ( $query_string ~* "usg=1" ) { proxy_pass http://local_workerb; } proxy_pass http://local_workera;}

到此这篇关于nginx location中多个if里面proxy_pass的方法的文章就介绍到这了,更多相关nginx location proxy_pass内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:nginx 反向代理之 proxy_pass的实现详解Nginx proxy_pass的一个/斜杠引发的血案Nginx代理proxy pass配置去除前缀的实现记一次nginx中proxy_pass的使用问题nginx proxy_pass反向代理配置中url后加不加/的区别介绍Nginx服务器的反向代理proxy_pass配置方法讲解nginx proxy_pass指令’/’使用注意事项

location /(conf|bin|inc|data) {deny all;},location / { location ~/(conf|bin|inc|data) { deny all; } }内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 如何用nginx解决前端跨域问题
  • 详解nginx服务器中http headers相关的模块配置使用
  • 添加nginx代理配置只允许内部ip访问的实现方法
  • nginx服务器作反向代理时的缓存配置要点解析
  • nginx共享内存机制详解
  • nginx处理http请求实例详解
  • nginx expires控制页面缓存
  • nginx限制ip恶意调用短信接口处理方法
  • 简介nginx中的location匹配规则
  • nginx:413 request entity too large的处理办法--修改 php上传文
  • nginx 多个location合并的写法?
  • nginx 反向代理一个server下配置多个location域名问题
  • 如何在Nginx服务器中设置多个站点
  • 怎么配置Nginx以代理多个后台地址
  • 求nginx下location匹配任意非指定二级目录的正则写法
  • nginx proxy_pass 网址后面能带路径吗
  • nginx 怎么配置一个url映射多个路径
  • nginx proxy_pass名称可以重复么
  • nginx中怎样指定多个目录不解析php
  • 怎么配置Nginx以代理多个后台地址
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginx 反向代理之 proxy_pass的实现详解nginx proxy_pass的一个/斜杠引发的血案nginx代理proxy pass配置去除前缀的实现记一次nginx中proxy_pass的使用问题nginx proxy_pass反向代理配置中url后加不加/的区别介绍nginx服务器的反向代理proxy_pass配置方法讲解nginx proxy_pass指令’/’使用注意事项如何用nginx解决前端跨域问题详解nginx服务器中http headers相关的模块配置使用添加nginx代理配置只允许内部ip访问的实现方法nginx服务器作反向代理时的缓存配置要点解析nginx共享内存机制详解nginx处理http请求实例详解nginx expires控制页面缓存nginx限制ip恶意调用短信接口处理方法简介nginx中的location匹配规则nginx:413 request entity too large的处理办法--修改 php上传文nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪详解nginx服务器中配置超时时间的nginx下301重定向域名的方法小结windows下nginx+php5的安装与配置nginx缓存及错误页面配置shell脚本之nginx自动化脚本服务器使用nginx部署springboot项目的详细nginx配置react项目url后直接输入路由路径nginx搭建https服务器教程详解 nginx 301重定向的配置全面解析nginx到底能做什么详解nginx 502错误解决办法nginx + php 搭建 超性能 web 服务器
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved