nginx-location-rewrite常用详解

location以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。以^~ 开头,表示uri以某个常规字符串开头,如果匹配到,则不继续往下匹配。不是正则匹配以~ 开头,表示区分大小写的正则匹配;以~* 开头,表示不区分大小写的正则匹配以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到*注意 location xxx {} 其中xxx与括号之间很多时候需要空格,最好都加上 匹配顺序:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/) rewriterewrite只能放在 server{}, location{}, if{}中,并且只能对域名后的文件路径起作用。 执行顺序执行server块的rewrite指令执行location匹配执行选定的location中的rewrite指令语法rewrite regex replacement [flag]; flag这儿分为server级和location级,其中if可写在server和location中,分别对应server级和location级。同级别中执行顺序看书写顺序。last : 不再执行同级rewrite,写在location中重新循环server.break : 不再执行同级rewrite,只往后匹配,如果在location中,会报404,因为location中没有嵌套location使其往继续往下级匹配;redirect : 返回302临时重定向,地址栏会显示跳转后的地址permanent : 返回301永久重定向,地址栏会显示跳转后的地址当不写flag时,再次循环同级匹配 if(condition)当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false直接比较变量和内容时,使用=或!=~ 正则表达式匹配~* 不区分大小写的匹配!~ 区分大小写的不匹配-f和!-f 用来判断是否存在文件-d和!-d 用来判断是否存在目录-e和!-e 用来判断是否存在文件或目录-x和!-x 用来判断文件是否可执行 其他调试 default_type application/json; 在locaiton中 return 200 '$uri xxx' 变量set $a "1"if ($a = "1") { return 302}proxy_passproxy_pass http://127.0.0.1:8008/; 这里只讨论在location中的proxy_pass; ...

September 9, 2019 · 1 min · jiezi

Nginx-配置根据请求IP末段进行分流

原文链接: 何晓东 博客 主要是 location 参数中的 if 判断的配置跳转,分流能减轻服务器的负载和压力,这种是一种非常常见的服务器部署架构。根据 IP 最后一段的范围来跳转 #域名,ip,端口等信息请自行修改upstream huaji-01.com { server 192.168.1.100:8080;}upstream huaji-02.com { server 192.168.1.200:8080;}server { listen 80; server_name www.huaji.com; location / { if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.[1,125]$) { proxy_pass http://huaji-01.com; break; } proxy_pass http://huaji-02.com; }}以上为将 IP 末段为 1-125 的请求来源转发到 huaji-01.com,其他转向huaji-02.com,同样可以修改正则,例如规则: $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$ 末尾为0268这样的偶数ip,跳转到 huaji-01.com,其他跳转到第二个域名;规则:$remote_addr ~* ^(112)\.(.*)\.(.*)\.(.*)$ 开头为 112 的 IP 跳转到指定的域名;规则:$http_x_forwarded_for ~* ^(112)\.(.*)\.(.*)\.(.*)$ 根据 forward 地址段来分流,开头为 112 的跳转到指定域名 if 指令条件判断的含义: ...

July 9, 2019 · 1 min · jiezi

Apache 透过 htaccess 隐藏 php 副档名(mod_rewrite)

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra首先安装好 apache 后,启用 rewrite 功能$ a2enmod rewrite然后再到 /etc/apache2/apache2.conf 添加内容$ nano /etc/apache2/apache2.conf内容为<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>记得将路径设为你的网站根目录路径呦!接着将 apache reloadservice apache2 reload然后去你的网站根目录中添加档案为 .htaccess,并加入以下内容Options -IndexesOptions +FollowSymlinksRewriteEngine on在同一个 .htaccess 档案中添加 RewriteRule,就像这样Options -IndexesOptions +FollowSymlinksRewriteEngine onRewriteRule ^admin/index$ admin/index.php这样只要访问路径 /admin/index 就等于是访问了 /admin/index.php,apache已经帮你隐藏副档名了Line ID:ianmacQQ:1258554508

April 13, 2019 · 1 min · jiezi