网站根目录反向代理后,特定子目录避免反代的方法
实际情形
域名/站点根目录反向代理至部分运行于特定端口的程序,而其他子目录需保留默认80/433端口访问。
如web.py为运行于8080端口的FastAPI应用,提供index.html及相关API,为根目录展示页面。
而页面中套用的js、css文件单独存放于80端口的./resource文件夹中,需要避免此文件夹被web.py的8080端口反代。
解决方法
在nginx文件中,除location /{}
外,额外添加location ^~ /resource/ {}
,括号内无需添加任何内容。示例:
# 优先匹配子目录,阻止其被代理
location ^~ /resource/ {
# 无需配置,使用默认80/443端口处理
}
location ^~ /ts3-banner/ {
include enable-php-74.conf; #启用PHP
}
# 根目录反向代理配置
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 其他必要的proxy配置...
}
错误尝试
尝试将/resource文件夹单独反向代理至http://127.0.0.1/resource
,会出现错误:
400 Bad Request
Request Header Or Cookie Too Largenginx.