nginx lua processing form data -


i have html form getting username & password , wanted pass on web server require basic authentication. minimalistic web server nginx/lua support (no php/perl/python).

index.html:

<form action="/form_validate" method="post"> <label for="username">username</label> <input id="username" name="username" size="16" type="text"/> <label for="password">password</label> <input name="password" size="16" type="password"/> </form> 

nginx.conf snip:

 upstream web_svr    {     least_conn;     server 127.0.0.1:8080;   }     server   {     listen       80;     server_name  testsvr;      location /      {       root /var/html;       index index.html;     }      location /form_validate/     {       set_form_input $username username;       set_form_input $password password;        proxy_set_header host $host;       proxy_set_header x-real-ip $remote_addr;       proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;       proxy_set_header authorization "basic $digest";       proxy_redirect off;        log_by_lua '         ngx.header.content_type = ("text/plain")         ngx.log(ngx.err,"username: (",ngx.var.username,")")         ngx.log(ngx.err,"password: (",ngx.var.password,")")       ';       proxy_pass http://web_svr/;     }   } 

my issue is:

in form, if define "form action=/form_validate" form data not processed. nginx side see request "get" method rather "post".

but, if define "form action=/form_validate/", form data processed, unfortunately proxy_pass call messed up. when hits proxied server, not know path java script, css & other files.

what doing wrong here?

in form, if define "form action=/form_validate" form data not processed. nginx side see request "get" method rather "post".

this special feature of nginx. if configure nginx "location /form_validate/ { ... }" , request uri "/form_validate", nginx response 301 status code , "location: .../form_validate/" header.

you can more details last part of location directive document .

but, if define "form action=/form_validate/", form data processed, unfortunately proxy_pass call messed up. when hits proxied server, not know path java script, css & other files.

if url starts "/form_validate/", such "/form_validate/test.js", proxied server path "/test.js". using "proxy_pass http://web_svr;" without trailing slash not change original url.
if url not starts "/form_validate/", proxied server cannot request. because request captured location / {}.


Comments