背景信息
- 有wordpress服務A
- 有flask服務B, gunicorn啟動,8個進程
- 用nginx代理,實現訪問A然后跳轉到B
問題
- flask服務B上有文件上傳操作,用nginx后發現無法上傳大文件。
解決: nginx代理配置中有文件大小限制client_max_body_size,修改即可
location /test{
proxy_pass http://127.0.0.1:8001/test;
proxy_redirect off;
proxy_set_header Host localhost;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
}
-
訪問wordpress的1.1.1.1/a,通過nginx跳轉到flask服務的127.0.0.1/b,127.0.0.1/b上有一個上傳按鈕,上傳文件應該交由127.0.0.1/b的post處理,但由於nginx轉發,跳轉到了1.1.1.1/b post,結果就會找不到對應的服務接口
解決:將flask和wordpress上的url使用相同的名字。wordpress 1.1.1.1/a -> flask 127.0.0.1/a -> wordpress 1.1.1.1/a post -> flask 127.0.0.1/a post
(這個方法不好,因為flask和wordpress耦合了,但是我沒有找到正確的解決方案,只好臨時用這個了) -
flask中有全局變量,通過nginx跳轉后,原本的請求可能由另一個進程接管,導致無法獲取正確的信息。
解決:用session解決,session中的變量是跨進程共享的,把狀態信息放入session變量即可。此外,session也解決了用戶識別問題,避免了多個用戶同時請求導致的沖突。