我想设置NGINX在开发机器上服务OpenUI5应用程序。 我之前从未使用过NGINX,并且在重写url时遇到麻烦。
正如我从跟踪日志中可以看到的,它被应用两次,因此请求404错误的结果。
"^/(?<name>[^/]+)(/(?<something>.*)|/?)$" matches "/HelloWorld/" rewritten data: "/HelloWorld/WebContent/" "^/(?<name>[^/]+)(/(?<something>.*)|/?)$" matches "/HelloWorld/WebContent/index.html" rewritten data: "/HelloWorld/WebContent/WebContent/index.html"
这里是我的NGINXconfigurationpice:
location / { root projects; index index.html index.htm; rewrite ^/(?<name>[^/]+)(/(?<something>.*)|/?)$ /$name/WebContent/$something break; } location ~ ^/([^/]+)/resources/(.*)$ { resolver 8.8.8.8; add_header Access-Control-Allow-Origin "*"; proxy_pass https://openui5.hana.ondemand.com/1.34.9/resources/$2; proxy_redirect off; access_log on; }
让我澄清我正在努力解决的任务。 基本上项目看起来像这样:
+ nginx_root |-+ projects |-+ HelloWorld |-+ WebContent |-- index.html |-+ main |-- main.view.xml |-- main.controller.js
有三个要求使这个HelloWorld工作:
我们应该隐藏WebContent文件夹,即从http:// localhost / HelloWorld使其内容可用,而不是http:// localhost / HelloWorld / WebContent
应用程序中的每个XHR应根据第一个要求进行映射。 例如,如果应用程序需要http://localhost/HelloWorld/main/main.view.xml ,则NGINX应该从HelloWorld/WebContent
应用程序尝试从./resources文件夹加载OpenUI5库,即http://localhost/HelloWorld/resources/sap-ui-core.js 。 图书馆本身应该从CDN提供: https : //openui5.hana.ondemand.com/1.34.9/resources/
请原谅我的英语,让我知道我是否可以澄清这个问题。 谢谢!
这是我的解决scheme,根据我的理解你的问题。
首先,你应该在你的location块之外定义root ,因为当在那里定义root时,nginx的行为有点不直观。
然后,解决点1和2的location块:
location ~ ^/(<?project>[^/]+)/(<?folder>.*) { alias /path/to/nginx_root/$project/WebContent/$folder; }
在这里,我们将项目名称和项目内部的path捕获到$project和$foldervariables,然后使用这些variables在文件系统中构build这个特定项目文件的真实path,并告诉nginx读取文件从这个path使用alias指令。
然后,对于第3点,我build议你在应用程序内build立一个function,在那里你可以直接build立指向你的CDN的URL。 如果您将URL指向现有的Web服务器,然后将请求redirect到CDN,您将错过CDN的许多优点。
更糟糕的是您在解决scheme中使用的proxy_pass 。 在这种情况下,请求你的nginx服务器,然后向CDN请求资源,然后将资源发送给用户。