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
Post a Comment