nginx-1.21.3とngx_ajp_moduleでコンパイルエラー
nginx-1.21.3とngx_ajp_moduleでコンパイルエラー
最近サボっていたnginxのバージョンアップ。
以前のバージョンと同じようにconfigureしてmakeするとこんなエラー。
../nginx_ajp_module/ngx_http_ajp.c: 関数 ‘sc_for_req_get_uri’ 内: ../nginx_ajp_module/ngx_http_ajp.c:139:27: エラー: ‘ngx_http_request_t’ は ‘space_in_uri’ という名前のメンバを持っていません if (r->quoted_uri || r->space_in_uri || r->internal) { ||< space_in_uriってメンバがないと。 構造体ngx_http_request_tがどこで定義されているかを調べると、/src/http/ngx_http_request.hにあります。 該当するメンバの周辺は、nginxの1.18.0だとこんな感じ。 >|| /* URI with "%" */ unsigned quoted_uri:1; /* URI with "+" */ unsigned plus_in_uri:1; /* URI with " " */ unsigned space_in_uri:1; unsigned invalid_header:1;
1.18.0と1.21.3と同じファイルでdiffをとってみる。
結果こんなの。
< unsigned filter_need_buffering:1; < unsigned last_sent:1; < unsigned last_saved:1; 474,475c470,471 < /* URI with empty path */ < unsigned empty_path_in_uri:1; --- > /* URI with " " */ > unsigned space_in_uri:1;
他にも追加されたものあるみたいですが、いまでている現象については名前が代わっただけみたいです。
ってことでngx_ajp_moduleのソースを修正する。エラーにちゃんと行数まで書いてありますね。
nginx_ajp_module/ngx_http_ajp.cの139行目。
修正後のソースはこんな。
if (r->quoted_uri || r->empty_path_in_uri || r->internal) { escape = 2 * ngx_escape_uri(NULL, r->uri.data, r->uri.len, NGX_ESCAPE_URI); }