【发布时间】:2015-10-03 14:52:02
【问题描述】:
我有一个 html 表单,我正在获取用户名和密码,我想将其传递给需要基本身份验证的 Web 服务器。这是一个非常简约的 Web 服务器,仅支持 nginx/lua(不支持 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 截图:
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/;
}
}
我的问题是:
在表单中,如果我定义“form action=/form_validate”,则不会处理表单数据。 Nginx 方面将此请求视为“GET”方法而不是“POST”。
但是,如果我将其定义为“form action=/form_validate/”,则表单数据会得到处理,但不幸的是我的 proxy_pass 调用搞砸了。当它访问代理服务器时,它不知道所有 java 脚本、CSS 和其他文件的路径。
我在这里做错了什么?
【问题讨论】: