Nginx 配置 location块

Jan 3, 2018 阅读(213)

标签: Nginx

在Nginx的官方文档中定义的location的语法格式为:

location [ = | ~ | ~* | ^~ ] uri { ... }

其中,方括号里面的部分,是可选项,用来改变请求字符串与uri的匹配方式,uri 变量是待匹配的请求字符串,可以是不含正则表达式的字符串,如 /myserverinfo.jsp 等,可一个是包含正则表达式的字符串,如 \.php$ (表示以.php结尾的URL)等。

语法格式中各选项的含义:

  • "=", 用于非正则匹配,要求请求字符串与uri严格匹配。如果匹配成功,就停止继续向下搜索并立即处理此请求。

  • "~", 用于区分大小写的正则表达式匹配。

  • "~*", 用于不区分大小写的正则表达式匹配。

  • "^~",用于非正则匹配,要求Nginx 服务器找到标识uri 和请求字符串匹配度最高的location后,立即使用此 location处理请求,而不再使用正则uri和请求字符串做匹配。


注意:

我们知道,在浏览器传送URI时对于一部分字符进行URL编码,比如空格被编码为“%20”,问号被编码成“%3f”等。“^~”有一个特点是,它对uri中的这些符号将会进行编码处理。比如,如果location块收到的URI为 “/html/%20/data”,则当Nginx 服务器搜索到配置为“^~ /html/ /data”的location时,可以匹配成功。


举个例子:

server {
	listen       80;
	server_name  xuexiyuan.cn www.xuexiyuan.cn;
	access_log  logs/xuexiyuan.cn.access.log;


	#Nginx静态资源代理(静态资源由Nginx来处理并响应用户请求)	
	location ~ /resources/.*\.(js|css|png|jpg|ico|gif|woff2|mp3|mp4)$ {
		 #请求根目录,Web服务器收到请求之后,首先要在服务器端指定目录中寻找请求资源,以下root指令就是用来配置这个根目录
		root /home/www/;
		add_header Handler nginx;
		 #定义用户浏览器缓存时间15天
		expires      15d;
	}

	#Nginx静态资源代理(静态资源由Nginx来处理并响应用户请求)	
	location ^~ /game {
		#请求根目录,Web服务器收到请求之后,首先要在服务器端指定目录中寻找请求资源,以下root指令就是用来配置这个根目录
		root /home/www/other/;
		add_header Handler nginx;
		#定义用户浏览器缓存时间15天
		expires      5d;
	}

	location / {
		#可以在相同域名页面的 frame 中展示
		add_header X-Frame-Options SAMEORIGIN;
		add_header Handler tomcat;
		#将当前Host头域填充成客户端的地址
		proxy_set_header Host $http_host;
		proxy_pass http://127.0.0.1:8080;
	}

	error_page  404             /resources/html/404.html;

	# redirect server error pages to the static page /50x.html
	error_page   500 502 503 504  /50x.html;
	location = /50x.html {
	    root   html;
	}
}



官网文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#location