下面是一段nginx配置,之前只是判断如果$host是否等于www.04007.cn,后来我加上一个匹配04007,保存配置文件后检查发现报错:nginx: [emerg] invalid condition本文地址:http://www.04007.cn/article/541.html,未经许可,不得转载.
#配置文件修改 if ( $host ~ /04007/ && $host != 'www.04007.cn' ) { rewrite ^/(.*)$ http://www.04007.cn/$1 permanent; } [root@04007 vhosts]# nginx -t nginx: [emerg] invalid condition "$host" in /usr/local/nginx/conf/vhosts/04007.conf:6 nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed于是我带着程序语言的逻辑认真地检查配置文件的语法,依然没发现哪里有异常,后来才知道nginx的配置中不支持if条件的逻辑与&& 逻辑或|| 运算,而且不支持if的嵌套语法:nginx通过ngx_http_rewrite_module模块支持url rewritet和if条件判断,但不支持else。另外该模块需要PCRE支持,应在编译nginx时指定PCRE支持。根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后nginx将返回500错误。同时,重写模块可以包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。学习rewrite之前要对正则表达式要很熟悉,常用的正则表达式元字符如下:本文地址:http://www.04007.cn/article/541.html,未经许可,不得转载.
#nginx常用的正则表达式 . :匹配除换行符以外的任意字符 ? :重复0次或1次 + :重复1次或更多次 * :重复0次或更多次 \d :匹配数字 ^ :匹配字符串的开始字符 $ :匹配字符串的结束字符 {n} :重复n次 {n,} :重复n次或更多次 [c] :匹配单个字符c [a-z] :匹配a-z小写字母的任意一个 #在rewrite中,如果使用小括号(),那么在小括号之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。所以上述配置会报下面的错误:nginx: [emerg] invalid condition。所以上面的这方法是行不通的,改成两个if条件嵌套也一样不行,我这里的条件到是简单,一想,我这个可以改为:本文地址:http://www.04007.cn/article/541.html,未经许可,不得转载.
if ( $host = '04007.cn' ) { rewrite ^/(.*)$ http://www.04007.cn/$1 permanent; } #还可以这样: if ( $host ~ ^04007 ) { rewrite ^/(.*)$ http://www.04007.cn/$1 permanent; }另外对于上面的问题,如果不能像以上压缩到一个条件解决的话,可以使用间接变量的方式来实现,这个在程序逻辑里我们也经常使用, 方法如下:本文地址:http://www.04007.cn/article/541.html,未经许可,不得转载.
set $flag 0; if ($host ~ '04007' ){ set $flag "${flag}1"; } if ($host != 'www.04007.cn'){ set $flag "${flag}1"; } if ($flag = "011"){ rewrite ^/(.*)$ http://www.04007.cn/$1 permanent; }但在进行上述试验后,我想使用一个假域名指host访问阿里云主机,发现阿里云会阻止这样的访问:
该网站暂时无法访问尊敬的用户,您好
很抱歉,该网站暂时无法访问,可能由以下原因导致:
原因一:未备案或未接入;根据《非经营性互联网信息服务备案管理办法》,网站需要完成备案或接入。
原因二:网站内容与备案信息不符或备案信息不准确;根据《非经营性互联网信息服务备案管理办法》,网站内容需要与备案信息一致,且备案信息需真实有效。建议网站管理员尽快修改网站信息。本文地址:http://www.04007.cn/article/541.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/541.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/541.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |