原文:https://ichochy.com/posts/software/20231125.html


nginx location 正则错误写法

location 错误的写法

匹配请求目录地址 /555

server {
location ~ ^/\d{2,3}$ {
……
}
}

分析正则

location ~ ^/\d{2,3}$

~     为开启正则匹配,这个不能少
^ 为字符的开始匹配,字符以后面的规则开始
/ 为第一个匹配字符 /
\d 匹配数字
{2,3} 限定数字的个数 2-3 个
$ 为字符的结束匹配,字符以前面的规则结束

上面的会出现错误 pcre_compile() failed: missing
正则解析失败,正则表达式正常是没有问题的,让人很误解
但在nginx中不能这样写,需要加上双引号(""

location 正则的正确写法

location ~ "^/\d{2,3}$"

注意:中/英文输入法,需要英文符号的双引号("")

正则规则

~         表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
^~ 表示普通字符匹配,不使用正则匹配,一般用来匹配目录
= 进行普通字符精确匹配
@ "@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
!~ 表示正则不匹配,排除正则的匹配,区分大小写
!~* 表示正则不匹配,排除正则的匹配,不区分大小写
.       匹配除换行符以外的任意字符
? 重复0次或1次
+ 重复1次或更多次
* 重复0次或更多次
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结束
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n-m次
[a] 匹配单个字符a
[a-z] 匹配a-z小写字母的任意一个

nginx 反向代理不能使用变量

server {
location ~ "^/(\d{2,3})$" {
proxy_pass https://$1.ichochy.com
……
}
}

问题来了

上面的配置没有生效,总是报错
Web 访问出现 502 Bad Gateway 错误,nginx 报错
proxy_pass 使用变量时会出现没有解析器解析域名的错误

日志出现如下的错误:
no resolver defined to resolve ichochy.com

修正错误

没有解析器就给它指定一个

resolver 8.8.8.8;

完整的配置信息

server{
location ~ "^/(\d{2,3})$" {
resolver 8.8.8.8;
proxy_pass https://$1.ichochy.com
……
}
}

例: 请求地址https://ichocy.com/555
location匹配到 /555,而$1代表的就是555,所以https://$1.ichochy.com就是https://555.ichochy.com

注:
$1 代表正则第一个小括号()中匹配的信息
$2 代表正则第二个小括号()中匹配的信息,以此内推 $3 ……

这样,请求地址 https://ichocy.com/555 ,就被反向代理到 https://555.ichochy.com

修改配置文件

# nginx 配置文件
vi /etc/nginx/nginx.conf
# 网站配置文件
vi /etc/nginx/sites-available/default

查看日志

# 错误日志
tail -f /var/log/nginx/error.log
# 请求日志
tail -f /var/log/nginx/access.log

Nginx 配置(Config)中遇到的错误(Error)的更多相关文章

  1. nginx配置url中带问号的rewrite跳转

    今天收到一个需求,要将一个带查询参数的url跳转到另外一个静态url,安装常规的rewrite规则,如: rewrite ^/a.html?id=67$ http://zt.epython.cn/20 ...

  2. ldap安装配置过程中遇到的错误,以及解决方法

    错误1: [root@openldap openldap]# ldapsearch -LLL-W -x -H ldap://etiantian.org -D "cn=admin,dc=eti ...

  3. nodejs出现events.js:72中抛出错误 Error: listen EADDRINUSE

    <pre>events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoExce ...

  4. nginx配置过程中出现的问题

    在安装nginx时我们先创建用户useradd -s /sbin/nologin -M nginx 不然会报nginx: [emerg] getpwnam("nginx") fai ...

  5. TFS 2010 配置的时候,提示TF255466错误

    TFS 2010 配置的时候,提示TF255466错误 Error [ System Checks ] TF255466: The configuration process for Team Fou ...

  6. web.config中配置页面出错后跳转指定错误页面

    每当用户访问错误页面时,会出现不友好的404错误,所以为了防止这种不友好,我们在web.config中的<system.web>节点下配置 <customErrors>,在出现 ...

  7. asp.net mvc 3 配置全局错误处理 Web.config中设置CustomError

    摘自: http://www.myexception.cn/web/1130191.html asp.net mvc 配置全局异常处理 Web.config中设置CustomError Web.con ...

  8. f-stack中nginx配置后make出现error: ignoring return value of ‘ftruncate’

    问题 Nginx 配置后 make 出现error: src/os/unix/ngx_process_cycle.c: In function 'ngx_start_worker_processes' ...

  9. nginx中的502错误

    遇到这种情况,首先看一下慢日志 [17-Aug-2015 13:13:43] WARNING: [pool www] child 27780, script '/data/s.com/index.ph ...

  10. 配置web项目出的各种error (安装sql2008错误,网站连接数据库error错误等等)

      一个破error:40 错误搞出了很多莫名其妙的为问题,搞了5天,最后重装系统加上重新配置终于好了. 1. 关于SQL 2008 安装错误 安装之前必须安装VS2008 SP1 安装到最后提示 试 ...

随机推荐

  1. JavaScript将时间戳转化为时间

    const timestampToTime= (timestamp) => { const date = new Date(timestamp * 1000); const year = dat ...

  2. 学习unigui【24】Echart的使用:多个坐标系

    使用echart非常简单,网上有介绍. 主要放一个unihtmlFrame.然后unihtmlframe.text := 'html的代码',就会渲染(初次调用echart的js库要一点稍后). un ...

  3. MQTT协议发布和订阅的实现,一步步带你实现发布订阅服务。

    MQTT协议 MQTT协议是基于TCP传输协议之上的应用层协议,全程Message Queuing Telemetry Transport.主要用于物联网设备间的通信,在低带宽.不稳定网络环境下的优势 ...

  4. ArrayBlockingQueue的take()底层原理

    一.ArrayBlockingQueue 的 take() 方法的底层源码的详细介绍 ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个 ...

  5. 至美!看AXUI如何美化原始HTML标签(reset/normalize)

    前言:不只是重置,而是重塑 在前端开发中,我们每天都会接触大量的原生 HTML 标签,例如 <button>.<input>.<a>.<table>.& ...

  6. 北京市第六届信息通信行业网络安全技能大赛(初赛)-CTF夺旗阶段 EZRSA writeup

    题目EZRSA EZRSA.py from Crypto.Util.number import * import gmpy2 from flag import m p = getPrime(1024) ...

  7. Java编程--委派设计模式

    目录 委派设计模式 委派 (Delegation) 委派设计模式 委派 (Delegation) 委派(Delegation)是一种设计模式,通常用于实现代码的解耦和复用.简单来说,委派是指一个对象将 ...

  8. servlet 转发与重定向

    目录 转发 重定向 重定向与转发本质都是跳转到新的URL 重定向与转发的本质区别在于:转发是一个服务端的行为,而重定向是一个浏览器的行为. 下面是图解: 转发 转发的作用在服务器端,将请求发送给服务器 ...

  9. 【记录】BASE64|解决JS和C++中文传输乱码,内含两种语言的Base64编码解码的代码

    JS 解决方法来源于知乎新码笔记的文章 function b64Encode(str) { return btoa(unescape(encodeURIComponent(str))); } func ...

  10. 数字孪生工厂实战指南:基于Unreal Engine/Omniverse的虚实同步系统开发

    引言:工业元宇宙的基石技术 在智能制造2025与工业元宇宙的交汇点,数字孪生技术正重塑传统制造业.本文将手把手指导您构建基于Unreal Engine 5.4与NVIDIA Omniverse的实时数 ...