2016-05-03 15 views
0

私はpythonウェブアプリケーション用のuwsgi + nginxの設定に取り組んでいます。私はX-SENDFILEエミュレーション(http://uwsgi-docs.readthedocs.io/en/latest/Snippets.htmlを参照)を追加したい :uwsgi X-SendfileエミュレーションのMIMEタイプがありませんか?

[uwsgi] 
collect-header = X-Sendfile X_SENDFILE 
response-route-if-not = empty:${X_SENDFILE} static:${X_SENDFILE} 

今、私は私たちのサイトを訪問するには、コンテンツが正しくのsendfile()を使用してにresponsedされます。唯一の瑕疵はです。コンテンツタイプがありません。私はwsgiの応答で明示的に設定しています。私は多くの方法を試してきました、私が見つけた唯一の回避策は次のとおりです。これは動作しますが、少し愚か

[uwsgi] 

collect-header = X-Sendfile-Content-Type X_SENDFILE_CONTENT_TYPE 
collect-header = X-Sendfile X_SENDFILE 
response-route-if-not= empty:${X_SENDFILE_CONTENT_TYPE} addheader:Content-Type: ${X_SENDFILE_CONTENT_TYPE} 
response-route-if-not = empty:${X_SENDFILE} static:${X_SENDFILE} 

。私は本当にファイルの拡張子によってコンテンツの種類を判断できるようにしたいと思います。出来ますか? uwsgiのソースコードに掘り後、私はその理由を見つけた

答えて

0

https://github.com/unbit/uwsgi/blob/2.0.12/core/uwsgi.c#L2677を参照)

if (uwsgi.build_mime_dict) { 
     if (!uwsgi.mime_file) 
#ifdef __APPLE__ 
      uwsgi_string_new_list(&uwsgi.mime_file, "/etc/apache2/mime.types"); 
#else 
      uwsgi_string_new_list(&uwsgi.mime_file, "/etc/mime.types"); 
#endif 
     struct uwsgi_string_list *umd = uwsgi.mime_file; 
     while (umd) { 
      if (!access(umd->value, R_OK)) { 
       uwsgi_build_mime_dict(umd->value); 
      } 
      else { 
       uwsgi_log("!!! no %s file found !!!\n", umd->value); 
      } 
      umd = umd->next; 
     } 
    } 

uwsgiは変数build_mime_dictが設定されている場合にのみMIMEの辞書(コンテンツタイプへのマッピングファイルの拡張子)を構築します。私の設定にはこのバリバイルを設定するオプションが含まれていないので、mime dictは空になります。

「静的」オプション(mimefileなど)を追加すると、MIMEの作成が完了します。また、実際のファイルパスが表示されないように、collect-headerをpull-headerに変更します。

[uwsgi] 
mimefile = /etc/mime.types 
pull-header = X-Sendfile X_SENDFILE 
response-route-if-not = empty:${X_SENDFILE} static:${X_SENDFILE} 
関連する問題