nginx 配置详解root,alias,proxy_pass,proxy_set_header

nginx 配置详解root,alias,proxy_pass,proxy_set_header

1、root和alias

1.root:root指定的目录是上级目录,path匹配的整个路径会追加,即root+path;
	例:location /www/ {
			root /home/data;
		}
那么我们的访问路径为:
访问路径:http://www.abc.com/www/a.html,实际上是访问/home/data/www/a.html。

2.alias:alias指定的目录必须带/,path匹配后面的内容会在alias指定的目录下查找,即alias+匹配到path路径后面的部分。
	例:location /www/ {
			alias /home/data;
		}
那么我们的访问路径为:
访问路径:http://www.abc.com/www/a.html,实际上是访问/home/data/a.html。

2、proxy_pass的斜杠问题

1.path没有斜杠
	location /api1 {
		proxy_pass http://localhost:8080; 
	}
 "http://localhost/api1/xxx" -> "http://localhost:8080/api1/xxx"

	location /api2 {
		 proxy_pass http://localhost:8080/; 
	}
 "http://localhost/api2/xxx" -> "http://localhost:8080/xxx"

	location /api5 { 
		proxy_pass http://localhost:8080/haha; 
	}
 "http://localhost/api5/xxx" -> "http://localhost:8080/haha/xxx"
	⬆
 请注意这里的这里的双斜线。

2)path有斜杠
	location /api1/ { 
		proxy_pass http://localhost:8080; 
	}
 "http://localhost/api1/xxx" -> "http://localhost:8080/api1/xxx"

	location /api2/ {
	 proxy_pass http://localhost:8080/;
	}
 "http://localhost/api2/xxx" -> "http://localhost:8080/xxx"

	location /api5/ {
	 	proxy_pass http://localhost:8080/haha; 
	}
 "http://localhost/api5/xxx" -> "http://localhost:8080/hahaxxx"
	⬆
 请注意这里的haha和xxx之间没有斜杠。

3)index 选项
index后面可以跟多个设置,如果访问的时候没有指定具体访问的资源,则会依次进行查找,找到第一个为止。

举例:
	location / {
		root /usr/local/nginx/html;
		index index.html index.htm;
	}
访问该location的时候,可以通过 http://ip:port/,地址后面如果不添加任何内容,
则默认依次访问index.html和index.htm,找到第一个来进行返回

4) proxy_set_header Host
4.1)不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值

	server{
		listen 8080;
		server_name _;
		loaction / {
			proxy_pass http://172.101.168.119:5000;
		}
	}
结果如下:返回proxy_pass 后面的值
浏览器输入:localhost:8080 返回的内容为:{"Host":"172.101.168.119.5000"}

4.2)设置 proxy_set_header Host $host
注意:localhost为回环地址为:127.0.0.1在计算机网络中属于一个特殊的ip地址。
	server{
		listen 8080;
		server_name _;
		loaction / {
			proxy_set_hearder Host $host;
			proxy_pass http://172.101.168.119:5000;
		}
	}
结果如下:不再是 proxy_pass代理的ip地址了, 不包含端口
浏览器输入:localhost:8080 返回的内容为:{"Host":"127.0.0.1"}

4.3) 设置proxy_set_header Host $http_host

	server{
		listen 8080;
		server_name _;
		loaction / {
			proxy_set_hearder Host $http_host;
			proxy_pass http://172.101.168.119:5000;
		}
	}
结果如下:不再是 proxy_pass代理的ip地址了, 包含端口
浏览器输入:localhost:8080 返回的内容为:{"Host":"127.0.0.1:8080"}

总结

path有无斜杠无影响,主要看proxy_pass有没有斜杠。proxy_pass没有的话,proxy_pass+path;有的话(包括端口和上下文都是一样的),proxy_pass+匹配到path路径后面的部分。

nginx location正则表达式

location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
  [ configuration A ] 
}
 
location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
  # 但是正则和最长字符串会优先匹配
  [ configuration B ] 
}
 
location /documents/ {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration C ] 
}
 
location ~ /documents/Abc {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration CC ] 
}
 
location ^~ /images/ {
  # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
  [ configuration D ] 
}
 
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配所有以 gif,jpg或jpeg 结尾的请求
  # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
  [ configuration E ] 
}
 
location /images/ {
  # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
  [ configuration F ] 
}
 
location /images/abc {
  # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
  # F与G的放置顺序是没有关系的
  [ configuration G ] 
}
 
location ~ /images/abc/ {
  # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
    [ configuration H ] 
}
 
location ~* /js/.*/\.js
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx中,rootproxy_passalias是用于配置反向代理和处理请求路径的关键指令。 首先,root指令用于设置请求的根目录。当一个请求到达Nginx时,Nginx会根据请求的URL路径去寻找对应的文件或目录。通过root指令,可以指定请求的根目录,Nginx会以该目录作为基准去查找请求的资源。 中的例子展示了root的用法。在这个例子中,当请求的路径是/html2时,Nginx会在/usr/local/nginx/目录下寻找对应的资源。 接下来是proxy_pass指令,它用于设置反向代理的目标地址。当一个请求到达Nginx时,Nginx会将该请求转发到proxy_pass指定的目标服务器上,并将响应返回给客户端。这可以用于实现负载均衡或者将请求转发给其他服务器处理。 中的例子展示了proxy_pass的用法。在这个例子中,当请求路径是/html2时,Nginx会将请求转发到http://localhost:8080上进行处理。 最后是alias指令,它用于配置请求路径的别名。当一个请求到达Nginx时,alias指令会将请求路径中匹配到的部分剔除,并将剩余部分拼接到alias指令后面的路径中去寻找资源。 中的例子展示了alias的用法。在这个例子中,当请求路径是/api1时,Nginx会将路径中的/api1剔除,并在root后面拼接剩余部分,然后在/usr/local/nginx/目录下寻找对应的资源。 综上所述,root指令用于设置请求的根目录,proxy_pass指令用于设置反向代理的目标地址,alias指令用于配置请求路径的别名。这些指令可以根据实际需求来配置Nginx,实现灵活的请求处理和代理转发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值