有個SPA項目,UI和API都使用Python默認的Web Server,感覺不太好。今天嘗試了一下將二者分離,使用openresty作為Web Server和Reverse Proxy(這里把Openresty當(dāng)作nginx用了,沒有寫lua代碼,后續(xù)有需求的話,可以考慮用lua)。遇到了一些問題,經(jīng)過一番Google,最終解決。
問題1:React-router不工作
在React-router中定義的路由不起作用。nginx總是報404。
解決:使用try_files。當(dāng)在靜態(tài)文件中找不到路由后,返回index.html,然后react-router就起作用了。
location / {
root /mnt;
index index.html;
# Allow react-router to work if URI cannot be found as static file.
try_files $uri /index.html;
}
問題2:CSS作為靜態(tài)文件加載了,但沒起作用
同樣的Webpack編譯后的代碼,在Python的Web Server中CSS可以加載并起作用,但nginx就是不起作用。百思不得其解,于是跟蹤了所有的CSS加載過程,發(fā)現(xiàn)CSS加載時Content Type為“text/plain",不是”text/css“,所以才想起是MIME type的問題。
解決:添加include mime.types;后問題解決。Openresty中不會加載默認的mime.types,需要自己手動添加。