Nginx 反向代理配置只允许访问某路径或后缀文件

2019-11-28 22:39:11 +08:00
 daimaosix
    location / {
        proxy_pass https://1.123.com;

        proxy_http_version	1.1;
        proxy_cache_bypass	$http_upgrade;

        proxy_set_header Upgrade			$http_upgrade;
        proxy_set_header Connection 		"upgrade";
        proxy_set_header Host				"1.123.com";
        proxy_set_header X-Real-IP			$remote_addr;
        proxy_set_header X-Forwarded-For	$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto	$scheme;
        proxy_set_header X-Forwarded-Host	"1.123.com";
        proxy_set_header X-Forwarded-Port	$server_port;
    }

    #set $limit 1;
    req_status server;

	location ~.*\.(png|jpg) {
    	allow all;
	}
	location ~ {
    	deny all;
    	return 403;
	}

软件

Tengine-2.3.2

需求

配置反向代理之后,只允许访问特定某路径或特定文件后缀。某特定路径不是固定的 URL,其中 1-2 个目录是固定的。

问题

目前想到的是只允许访问某后缀。上方最后两个 location 是修改之后的,除了访问.png 和.jpg 的文件路径是 404 以外(不能访问源文件,配置应该是生效了,如果可以访问指定的后缀,这个问题应该就可以解决了),访问其他路径都是 403。

谢谢各位 V 友可以查看此贴。

4590 次点击
所在节点    程序员
8 条回复
ibirdyuan
2019-11-28 23:00:54 +08:00
没设置好 root 吧,看下 nginx 的 root 关键字?
daimaosix
2019-11-28 23:25:14 +08:00
@ibirdyuan
root /etc/nginx/html;
指向了一个不存在的目录,如果是反向代理的话这个 root 没用吧
ibirdyuan
2019-11-28 23:42:30 +08:00
@daimaosix 额,我才理解你的问题。。。
1. location 是有优先级的,根据你的 url 只会走到一个 location 块里面
2. 因为你配置了.png 和.jpg 所以找了本地目录,就 404 了,~ 的优先级高于 /, 所以就 403 了
eason1874
2019-11-29 00:00:47 +08:00
是不是这个意思啊?

```
set $proxyurl "https://1.123.com$uri";

proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host "1.123.com";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host "1.123.com";
proxy_set_header X-Forwarded-Port $server_port;

location / {
# 默认屏蔽
deny all;
}

location ~* \.(png|jpg)$ {
# .png .jpg 请求转发到后端
proxy_pass $proxyurl;
}

location /images/ {
# /images/ 目录路径请求也转发到后端
proxy_pass $proxyurl;
}
```
daimaosix
2019-11-29 01:05:20 +08:00
@eason1874 是这个效果老哥,测试了一下没问题,但是我不能写 set $proxyurl "https://1.123.com$uri";
因为第一个 location 的配置不能自定义,所以我直接写了:
location ~* \.(png|jpg)$ {
proxy_pass https://1.123.com;
}
如果是这样的话,第一个 location 的配置是不是就没用了呢?
daimaosix
2019-11-29 01:29:19 +08:00
@ibirdyuan 老哥看下 4 楼那位老哥的方子可行
eason1874
2019-11-29 09:22:58 +08:00
@daimaosix #5 我不知道你说的第一个 location 是指哪个。每个 location 段的 proxy_pass 都可以自定义,我设置个变量只是为了方便统一使用一个。

但是需要注意,如果在一个目录 location 里 proxy_pass 到一个网站根目录的话,访问路径和转发路径是不一样的,这个你自己试下就知道了。
wangyzj
2019-11-29 12:46:16 +08:00
location 用正则控制,那么除了满足条件的都会到 root
然后 nginx 启动用户假设 www
把 root 指向一个目录,权限改成 700,用户为 root
那么其他不满足条件的都 403 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/624115

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX