这NextJS可真是把我给恶心到了,项目里使用next-international这个库配置了站点多语言,按照其文档中的配置说明,需要修改middleware中间件的配置。
而项目当中遇到了跨域的接口请求,不知道什么原因后端配置不生效。于是我打算增加文件中编写的rewrites规则。结果我发现一旦使用了NextJS的中间件,这些rewrites配置居然通通全部直接无视了
constnextConfig={asyncrewrites(){return[{source:'/paul/:slug*/',destination:'*/',}]}};//此时访问项目链接/paul显示404因为注释掉多语言需要加入中间件的代码之后,rewrites中的规则重新生效了
也不确定这是不是Bug,但这种巨型框架层面的Bug可不是我一个小彩笔能解决的,Bug解决不了,但需求仍然要继续做的。我想到直接使用Caddy来帮我做这件事,反向代理某一个业务的接口之后强行设置CORS的Header头,允许任意的跨域请求,随意使用。
使用Docker在设置里填入对应的端口号,这里我只设置80端口的映射,确保端口号没有被占用就行。
修改配置文件设置完成后容器将会自动启动并且持续运行,使用浏览器访问对应映射好的端口号(我这是7888),如果能正常访问则服务正常运行,就可以继续设置了。此时点开容器面板选择ExecTab进入该容器的终端界面,输入以下命令进入配置文件的编辑界面:
vi/etc/caddy/Caddyfile
修改配置文件的内容,具体如下:
:80{reverse_proxy{header_upHost{upstream_hostport}header_upX-Real-IP{remote}header_upX-Forwarded-For{remote}header_upX-Forwarded-Port{server_port}header_upX-Forwarded-Proto{scheme}}@cors_preflight{methodOPTIONSheaderOrigin*}handle@cors_preflight{respond204headerAccess-Control-Allow-Origin"*"headerAccess-Control-Allow-Methods"GET,POST,OPTIONS"headerAccess-Control-Allow-Headers"*"}header{Access-Control-Allow-Origin*Access-Control-Allow-Methods"GET,POST,OPTIONS"}}保存后重启容器,使用浏览器重新访问对应链接,应该会直接显示对应「被反向代理」网站的内容,说明反向代理配置成功。
之后修改NextJS项目那边的环境变量,使接口请求经过我们配置好的Caddy代理,如无意外则一切正常使用,这就变相解决了NextJS内置的反向代理存在Bug的问题。