gpt4 book ai didi

forms - nginx lua处理表单数据

转载 作者:行者123 更新时间:2023-12-01 07:36:38 25 4
gpt4 key购买 nike

我有一个 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 和其他文件的路径。

我在这里做错了什么?

最佳答案

In the form, if I define the "form action=/form_validate" the form data does not processed. Nginx side see this request as a "GET" method rather than a "POSt".

这是nginx的一个特殊功能。如果您使用“location/form_validate/{ ... }”配置 nginx 并使用 uri “/form_validate” 请求它,nginx 将响应 301 状态码和 “Location: .../form_validate/" header 。

您可以从 location directive document 的最后一部分获得更多详细信息.

But, if I do define it as "form action=/form_validate/", the form data does get processed, but unfortunately my proxy_pass call get messed up. When it hits the proxied server, it does not know the path to all the java script, CSS & other files.

如果url以"/form_validate/"开头,比如"/form_validate/test.js",代理服务器会获取路径"/测试.js”。使用没有尾部斜杠的 "proxy_pass http://web_svr;" 不会更改原始 url。
如果 url 不是以 "/form_validate/" 开头,代理服务器将无法获得此请求。因为这个请求是由 location/{} 捕获的。

关于forms - nginx lua处理表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31415591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com